LLM 성능 18% 높이는 프롬프트 엔지니어링의 비밀: 복잡성 원칙
LLM을 실무에 쓰다 보면 당황스러운 순간이 옵니다. 분명 똑똑하다고 들었는데, 의외로 간단한 수학이나 논리 문제에서 뻔뻔하게 오답을 내놓기 때문이죠.
보통 이를 해결하기 위해 ‘차근차근 생각해봐(Chain of Thought, CoT)’라는 주문을 걸지만, 이것만으로는 부족합니다. 핵심은 ‘어떤 예시를 보여주느냐’에 있습니다.
에든버러 대학과 앨런 인공지능 연구소의 연구에 따르면, 정답은 의외로 단순함이 아닌 복잡함에 있었습니다. 모델 재학습 없이 프롬프트만 바꿔서 성능을 18% 끌어올리는 ‘복잡성 원칙’을 정리해 드립니다.
왜 ‘Simple’보다 ‘Complex’인가?
우리는 보통 간결한 것이 좋다고 배우지만, LLM의 추론에서는 정반대입니다. “Complex is Best”입니다.
연구 결과에 따르면, 프롬프트에 넣는 예시(Few-shot)의 추론 단계(Reasoning Steps)가 많을수록 모델의 정답률이 비약적으로 상승합니다.
- 잘못된 예시: “사과 3개 중 1개를 먹었으니 2개가 남았어.” (단순 1단계)
- 올바른 예시: “처음에 사과가 3개 있었어. 그중 1개를 먹는 행위는 뺄셈이야. 3 – 1 = 2니까 결국 2개가 남게 돼.” (상세 다단계)
마치 수학 선생님이 “이건 이거야”라고 답만 알려주는 것보다, 풀이 과정을 구구절절하게 설명해 줄 때 학생의 응용력이 좋아지는 것과 같은 이치입니다.
전략 1: 입력(Input)의 단계를 잘게 쪼개라
단순히 글자 수를 늘리는 것이 아니라 ‘사고의 호흡’을 길게 만들어야 합니다.
핵심 지표: 문장의 길이나 수식의 복잡함보다 ‘줄바꿈(\n)’으로 구분된 추론 단계의 개수가 성능을 결정합니다.
성능 변화:
- 기존 방식: 61.0% 정확도
- 복잡한 예시 적용 시: 66.6% (GSM8K 벤치마크 기준)
특정 데이터셋(MathQA)에서는 29.3%에서 47.3%로 무려 18%p 폭등했습니다.
전략 2: 출력(Output)에서 ‘게으른 답변’은 걸러라
답변을 얻을 때도 요령이 필요합니다. 보통 여러 개의 답변을 생성해 다수결로 정답을 고르는 ‘Self-Consistency’ 기법을 쓰는데, 여기서 한 단계 더 나아가야 합니다.
“추론 과정이 짧고 단순한 답변의 투표권은 박탈하십시오.”
모델이 내놓은 50개의 답변 중, 단계가 너무 짧은 것들은 ‘찍었거나’ ‘꼼수를 부렸을’ 확률이 높습니다. 가장 긴 추론 과정을 거친 상위 K개의 답변들만 추려서 다수결을 진행하는 ‘복잡성 기반 일관성(Complexity-Based Consistency)’ 기법을 쓰면, 성능은 82.9%까지 치솟습니다.
바로 적용하는 3단계 액션 플랜
프롬프트 엔지니어링은 요행이 아니라 논리적인 설계입니다. 오늘 바로 아래 세 단계를 적용해 보세요.
| 단계 | 실행 내용 | 비고 |
|---|---|---|
| 1. Select | 보유한 데이터 중 풀이 과정이 가장 긴 문제를 선별하세요. | 최소 9단계 이상의 문제 권장 |
| 2. Annotate | 중간 과정을 생략하지 말고 아주 집요하게 쪼개서 적으세요. | 줄바꿈을 활용해 단계를 구분 |
| 3. Vote | 결과 도출 시, 추론 단계가 긴 답변에 가중치를 두세요. | 짧은 답변은 노이즈로 간주 |
“복잡하게 가르쳐야 모델이 깊게 생각합니다.” 여러분의 프롬프트에 지금 바로 상세한 ‘풀이 과정’을 추가해 보시는 건 어떨까요? 작은 줄바꿈의 차이가 결과의 차이를 만듭니다.
