본문 바로가기
AI 신기능 분석

AI 파인튜닝 없이 성능 높이는 법 - Few-shot, CoT, RAG 전략 비교

by 소개왕 탑백귀 2026. 4. 9.

AI 파인튜닝 없이 성능 높이는 법 - Few-shot, CoT, RAG 전략 비교

2026년 4월 기준 | AI 신기능 분석 · 프롬프트 전략

요약: 파인튜닝은 비용도 크고, 데이터도 필요하고, 시간도 오래 걸립니다. 그런데 실무에서는 파인튜닝 없이도 성능을 확 끌어올릴 수 있는 방법이 3가지 있습니다. Few-shot, Chain of Thought, RAG를 동일한 태스크에 적용해서 정확도를 직접 비교해봤습니다.

파인튜닝이 항상 정답은 아닌 이유

처음 AI를 도입할 때 "우리 데이터로 파인튜닝하면 되겠지"라고 생각하기 쉽습니다. 저도 그랬습니다. 고객 리뷰 감성 분석 프로젝트를 맡았을 때, 당연히 파인튜닝부터 검토했습니다.

그런데 현실은 이랬습니다.

  • 학습 데이터가 부족합니다. 파인튜닝에는 최소 수백~수천 건의 라벨링된 데이터가 필요합니다. 신규 서비스라면 이 데이터 자체가 없습니다.
  • 비용이 만만치 않습니다. GPT-4o 기준으로 파인튜닝 학습 비용이 토큰당 $0.025, 여기에 추론 비용도 기본 모델보다 비쌉니다. 소규모 팀에게는 부담됩니다.
  • 유지보수가 고됩니다. 제품 카테고리가 추가되거나 리뷰 트렌드가 바뀌면? 다시 데이터 모으고, 다시 학습시켜야 합니다.
  • 시간이 오래 걸립니다. 데이터 정제부터 학습, 검증까지 최소 1~2주. 빠르게 프로토타입을 만들어야 하는 상황에선 치명적입니다.

그래서 저는 파인튜닝 전에 먼저 시도해볼 3가지 전략을 정리했습니다. 실제로 이것만으로 충분한 경우가 훨씬 많았습니다.

Few-shot Learning: 예시의 힘

Few-shot은 가장 간단합니다. 프롬프트에 "이런 입력이 들어오면 이렇게 답해"라는 예시를 몇 개 넣어주는 겁니다. 모델 학습을 시키는 게 아니라, 프롬프트 안에서 패턴을 보여주는 방식입니다.

고객 리뷰 감성 분석에 적용한 코드를 보겠습니다.

from openai import OpenAI

client = OpenAI()

def analyze_sentiment_fewshot(review: str) -> dict:
    prompt = f"""고객 리뷰의 감성을 분석해주세요.

[예시 1]
리뷰: "배송 빠르고 제품 퀄리티 좋아요. 재구매 의사 있습니다."
결과: {{"sentiment": "positive", "confidence": 0.95, "reason": "배송 속도와 제품 품질에 대한 긍정 표현"}}

[예시 2]
리뷰: "사이즈가 안 맞아서 교환했는데 교환 과정이 너무 불편했어요."
결과: {{"sentiment": "negative", "confidence": 0.88, "reason": "교환 과정의 불편함에 대한 부정 표현"}}

[예시 3]
리뷰: "가격은 좀 비싼데 성능은 확실히 좋네요. 고민되긴 합니다."
결과: {{"sentiment": "mixed", "confidence": 0.82, "reason": "가격 부정 + 성능 긍정의 혼합 감성"}}

[분석할 리뷰]
리뷰: "{review}"
결과:"""

    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": prompt}],
        temperature=0.1
    )
    return response.choices[0].message.content

예시가 3개뿐인데도 결과가 확 달라집니다. Zero-shot(예시 없이 그냥 "감성 분석해줘")일 때는 positive/negative만 달랑 나오던 게, 예시를 넣으니 confidence 점수와 이유까지 일관된 형식으로 나옵니다.

팁: Few-shot 예시는 3~5개가 최적입니다. 너무 많으면 토큰 비용만 올라가고 성능 향상은 미미합니다. 예시를 고를 때는 쉬운 케이스, 어려운 케이스, 경계 케이스를 골고루 포함시키세요.

Chain of Thought: 생각하게 만드는 프롬프트

Chain of Thought(CoT)는 AI에게 "바로 답하지 말고, 단계별로 생각해"라고 요청하는 기법입니다. 사람이 문제를 풀 때 머릿속으로 추론 과정을 거치는 것처럼, AI에게도 중간 추론 과정을 출력하게 하면 최종 답의 정확도가 올라갑니다.

감성 분석에서 CoT가 빛나는 순간은 "복합 감성" 리뷰를 처리할 때입니다. "맛은 괜찮은데 양이 적고 배달이 늦었어요" 같은 리뷰는 긍정과 부정이 섞여 있어서 단순 분류로는 정확도가 떨어집니다.

def analyze_sentiment_cot(review: str) -> dict:
    prompt = f"""고객 리뷰의 감성을 분석해주세요.
단계별로 사고하면서 분석해주세요.

[분석 단계]
1단계: 리뷰에서 언급된 주제를 모두 뽑아주세요 (예: 배송, 품질, 가격 등)
2단계: 각 주제별로 긍정/부정/중립을 판단해주세요
3단계: 각 주제의 중요도를 가중치로 표현해주세요 (합계 1.0)
4단계: 가중 평균으로 최종 감성 점수를 계산해주세요 (-1.0 ~ 1.0)
5단계: 최종 결과를 JSON으로 정리해주세요

[리뷰]
"{review}"

[출력 형식]
각 단계의 분석 과정을 보여준 후, 마지막에 아래 JSON을 출력해주세요:
{{"sentiment": "positive/negative/mixed", "score": 0.0, "topics": [...], "reasoning": "..."}}"""

    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": prompt}],
        temperature=0.1
    )
    return response.choices[0].message.content

CoT를 적용하면 "맛은 괜찮은데 양이 적고 배달이 늦었어요" 같은 리뷰에서 맛(긍정 0.3), 양(부정 0.3), 배달(부정 0.4)을 분리해서 분석하고, 가중 평균으로 최종 감성을 계산합니다. 단순 Few-shot보다 복합 감성 케이스에서 정확도가 15% 이상 올라갔습니다.

주의: CoT는 추론 과정을 출력하기 때문에 응답 토큰이 2~3배 늘어납니다. 대량 처리 시 비용이 꽤 올라갈 수 있으니, 복합 감성이 의심되는 리뷰만 선별해서 CoT를 적용하는 것도 방법입니다.

RAG: 외부 지식을 주입하는 방법

RAG(Retrieval-Augmented Generation)은 AI에게 답하기 전에 관련 문서를 검색해서 컨텍스트에 넣어주는 방식입니다. 파인튜닝이 "모델 자체를 바꾸는 것"이라면, RAG는 "시험 볼 때 참고 자료를 펼쳐놓는 것"에 가깝습니다.

감성 분석에서 RAG가 유용한 경우가 있습니다. 바로 도메인 특화 용어가 등장할 때입니다. "탈색이 심해요"는 의류 리뷰에서는 부정이지만, 염색약 리뷰에서는 긍정(탈색이 잘 된다는 의미)일 수 있습니다. 이런 도메인 지식을 RAG로 주입하면 정확도가 올라갑니다.

from openai import OpenAI
import chromadb

client = OpenAI()
chroma = chromadb.PersistentClient(path="./review_db")
collection = chroma.get_or_create_collection("domain_knowledge")

# 1. 도메인 지식을 벡터 DB에 저장 (최초 1회)
domain_docs = [
    "의류 카테고리: '탈색'은 부정적 표현. 원단 색이 빠지는 품질 문제를 의미",
    "염색약 카테고리: '탈색'은 긍정적 표현. 기존 색을 잘 빼준다는 의미",
    "전자기기 카테고리: '발열'은 부정적 표현. 과열 문제를 의미",
    "온열기구 카테고리: '발열'은 긍정적 표현. 난방 기능이 잘 작동한다는 의미",
]
collection.add(
    documents=domain_docs,
    ids=[f"doc_{i}" for i in range(len(domain_docs))]
)

def analyze_sentiment_rag(review: str, category: str) -> dict:
    # 2. 리뷰 + 카테고리로 관련 도메인 지식 검색
    query = f"{category} {review}"
    results = collection.query(query_texts=[query], n_results=3)
    context = "\n".join(results["documents"][0])

    # 3. 검색된 지식을 프롬프트에 주입
    prompt = f"""고객 리뷰의 감성을 분석해주세요.

[도메인 참고 정보]
{context}

[상품 카테고리] {category}
[리뷰] "{review}"

위 도메인 정보를 참고하여, 해당 카테고리에 맞는 감성 분석을 해주세요.
결과: {{"sentiment": "positive/negative/mixed", "confidence": 0.0, "reason": "..."}}"""

    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[{"role": "user", "content": prompt}],
        temperature=0.1
    )
    return response.choices[0].message.content

RAG를 적용하면 "탈색이 너무 잘 돼요"라는 리뷰가 염색약 카테고리에서는 긍정으로, 의류 카테고리에서는 부정으로 정확하게 분류됩니다. 도메인 지식 없이는 모델이 맥락을 몰라서 틀리기 쉬운 케이스입니다.

동일 태스크 적용 결과 비교

고객 리뷰 감성 분석 태스크에 4가지 방식을 적용하고, 직접 라벨링한 200건의 테스트 데이터로 정확도를 측정했습니다. 모델은 GPT-4o(2026-03 버전)를 사용했습니다.

전략 단순 감성
(긍정/부정)
복합 감성
(mixed 포함)
도메인 특화
(전문 용어 포함)
평균 정확도
Zero-shot (기본) 78% 54% 61% 64%
Few-shot (3예시) 89% 71% 68% 76%
CoT (단계별 추론) 87% 83% 70% 80%
RAG (도메인 지식 주입) 85% 74% 91% 83%

결과를 보면 재미있는 패턴이 보입니다.

  • 단순 감성에서는 Few-shot이 가장 좋았습니다. 예시만 보여줘도 패턴을 금방 잡습니다.
  • 복합 감성에서는 CoT가 압도적입니다. 추론 과정을 거치니까 "이 부분은 긍정, 저 부분은 부정"을 분리해서 판단합니다.
  • 도메인 특화에서는 RAG가 독보적입니다. 아무리 좋은 프롬프트를 써도, 도메인 지식이 없으면 "탈색" 같은 맥락 의존 표현을 정확히 해석할 수 없습니다.

전략별 구현 난이도·비용·적합 상황 정리

실무에서 어떤 전략을 선택할지 결정할 때 참고할 수 있도록 정리했습니다.

항목 Few-shot CoT RAG 파인튜닝
구현 난이도 매우 쉬움 쉬움 중간 어려움
초기 세팅 시간 30분 1시간 1~2일 1~2주
추론 비용 (건당) $0.003 $0.008 $0.005 $0.004
필요 데이터 예시 3~5건 없음 참고 문서 수백~수천 건
유지보수 예시 교체 프롬프트 수정 문서 업데이트 재학습 필요
적합한 상황 형식 통일
빠른 프로토타입
복잡한 추론
다단계 판단
도메인 지식 필요
최신 정보 반영
대량 처리
일관성 극대화

팁: 이 전략들은 배타적이지 않습니다. 실무에서는 조합해서 쓰는 경우가 많습니다. 예를 들어 RAG로 도메인 지식을 가져온 다음, Few-shot 예시와 CoT 추론을 함께 적용하면 개별 전략보다 높은 정확도를 얻을 수 있습니다. 저는 최종적으로 RAG + Few-shot 조합으로 평균 정확도 89%를 달성했습니다.

어떤 전략을 선택해야 할까

결론부터 말하면, 파인튜닝은 마지막 수단입니다. 아래 순서로 시도해보세요.

  1. 먼저 Few-shot으로 시작합니다. 30분이면 구현 가능하고, 대부분의 경우 이것만으로도 Zero-shot 대비 10~15% 정확도가 올라갑니다.
  2. 복잡한 판단이 필요하면 CoT를 추가합니다. 특히 "왜 이렇게 분류했는지" 근거가 필요한 서비스에서는 CoT의 추론 과정 자체가 가치 있습니다.
  3. 도메인 지식이 필요하면 RAG를 구축합니다. 벡터 DB 세팅이 필요하지만, 한번 구축하면 문서 업데이트만으로 지식을 확장할 수 있습니다.
  4. 이래도 부족하면 그때 파인튜닝을 검토합니다. 이 시점에서는 1~3단계에서 모은 데이터가 파인튜닝 학습 데이터로 활용 가능합니다.

제가 지난 6개월간 5개 프로젝트에서 이 접근법을 적용해본 결과, 파인튜닝까지 간 경우는 단 1건뿐이었습니다. 나머지 4건은 Few-shot + CoT 또는 RAG 조합으로 충분했습니다. 비용은 파인튜닝 대비 1/5 수준이었고, 개발 기간도 절반 이하로 줄었습니다.

AI 성능을 높이는 건 반드시 모델을 바꾸거나 학습시키는 것만이 아닙니다. 프롬프트를 잘 설계하고, 필요한 정보를 적절히 제공하는 것만으로도 실무에서 충분한 성능을 확보할 수 있습니다.

참고: 이 글의 정확도 수치는 특정 태스크(한국어 고객 리뷰 감성 분석)와 특정 모델(GPT-4o)에서 측정된 결과입니다. 태스크와 모델에 따라 결과가 달라질 수 있으니, 반드시 본인의 데이터로 직접 테스트해보시기 바랍니다.