Prompt Engineering 고급 기법: Chain-of-Thought부터 Tree-of-Thought까지
같은 모델인데 결과가 완전히 다르다? 차이는 프롬프트 설계에서 시작됩니다.
처음에는 그냥 질문만 잘 던지면 되는 줄 알았어요. 그런데 어느 순간부터 "왜 이 모델은 여기서 이런 판단을 하지?"라는 의문이 계속 들더라구요. 특히 복잡한 문제를 시키면, 답은 맞는데 과정이 이상하거나, 반대로 과정은 그럴듯한데 결론이 어긋나는 경우도 많았고요. 그때 알게 된 게 바로 Prompt Engineering, 그중에서도 Chain-of-Thought, Tree-of-Thought 같은 사고 유도 기법들이었어요. 이건 단순히 프롬프트를 길게 쓰는 기술이 아니라, 모델이 '어떻게 생각하게 만들 것인가'를 설계하는 영역이더라구요. 오늘은 실무에서 바로 써먹을 수 있는 관점으로, 프롬프트 엔지니어링의 고급 기법들을 차근차근 정리해보려고 합니다.
📋 목차
Prompt Engineering 기본 개념
Prompt Engineering은 LLM에게 원하는 결과를 얻기 위해 입력(프롬프트)을 설계하는 기술이에요. 단순히 질문을 잘 쓰는 것을 넘어서, 모델이 어떤 방식으로 사고하고 응답하게 할지를 의도적으로 유도하는 영역이에요.
왜 이게 중요할까요? LLM은 똑같은 질문에도 프롬프트를 어떻게 구성하느냐에 따라 완전히 다른 답을 내놓거든요. 예를 들어 "이 문제를 풀어줘"라고만 하면 대충 답을 던지는데, "단계별로 생각해서 풀어줘"라고 하면 훨씬 정확한 답이 나올 때가 많아요.
💡 핵심 포인트: Prompt Engineering은 모델을 바꾸지 않고도 성능을 극대화하는 방법이에요. 파인튜닝보다 비용이 낮고, 실시간으로 조정할 수 있다는 장점이 있어요.
프롬프트 엔지니어링의 발전 과정을 보면, 처음에는 단순한 질문→답변 형식이었다가, 예시를 주는 Few-shot이 나오고, 사고 과정을 유도하는 Chain-of-Thought가 등장했어요. 최근에는 여러 경로로 사고를 분기시키는 Tree-of-Thought까지 발전했죠. 이 흐름을 이해하면 각 기법을 언제 써야 할지 감이 와요.
Zero-shot과 Few-shot의 차이
고급 기법을 이해하려면 먼저 기본인 Zero-shot과 Few-shot을 알아야 해요. 이 둘은 예시를 주느냐 안 주느냐의 차이예요.
Zero-shot은 예시 없이 바로 질문하는 방식이에요. "다음 문장의 감정을 분석해줘: 오늘 날씨가 정말 좋네요" 이런 식이죠. 모델이 기존에 학습한 지식만으로 답해야 해요.
Few-shot은 몇 개의 예시를 먼저 보여주고 질문하는 방식이에요. "예시1: '기분이 좋아요' → 긍정, 예시2: '짜증나네' → 부정. 자 이제 이 문장은? '오늘 날씨가 정말 좋네요'" 이렇게요. 예시를 통해 모델이 패턴을 파악하고, 더 일관된 결과를 내요.
📊 Zero-shot vs Few-shot 비교
- Zero-shot: 빠르고 간단, 하지만 일관성이 낮을 수 있음
- Few-shot: 예시 덕분에 일관성 높음, 하지만 토큰 소모 많음
- 선택 기준: 태스크가 명확하면 Zero-shot, 미묘한 차이가 중요하면 Few-shot
Few-shot의 변형으로 One-shot(예시 1개), Many-shot(예시 많이)도 있어요. 예시가 많을수록 좋은 건 아니고, 적절한 수와 다양성이 중요해요. 보통 3~5개가 효과 대비 효율이 좋은 경우가 많아요.
Chain-of-Thought(CoT) 기법
Chain-of-Thought(CoT)는 2022년 구글에서 발표한 기법으로, 모델이 중간 사고 과정을 단계별로 출력하도록 유도하는 방식이에요. 이게 왜 효과적이냐면, LLM이 한 번에 정답을 내려고 하면 실수가 많은데, 중간 과정을 거치면 오류가 줄어들거든요.
가장 간단한 CoT 적용법은 프롬프트 끝에 "Let's think step by step"(단계별로 생각해보자)를 붙이는 거예요. 이것만으로도 수학 문제나 논리 추론에서 정확도가 크게 올라가요. 이걸 Zero-shot CoT라고 해요.
📝 CoT 프롬프트 예시
Q: 사과 3개가 있는데 2개를 더 샀어요. 그리고 1개를 친구에게 줬어요. 남은 사과는 몇 개인가요?
A: 단계별로 생각해볼게요.
1. 처음 사과: 3개
2. 2개를 더 삼: 3 + 2 = 5개
3. 1개를 줌: 5 - 1 = 4개
따라서 남은 사과는 4개입니다.
Few-shot CoT는 사고 과정이 포함된 예시를 먼저 보여주는 방식이에요. "이렇게 생각하는 거야"라고 시범을 보여주는 거죠. 더 복잡한 문제에서 효과가 좋아요. 연구에 따르면 CoT는 특히 수학, 코딩, 논리 추론 영역에서 큰 성능 향상을 보여줬어요.
Self-Consistency와 사고 안정화
CoT가 좋긴 한데, 한 가지 문제가 있어요. 같은 문제를 여러 번 물어보면 매번 다른 사고 경로를 타서 다른 답이 나올 수 있어요. 이걸 해결하기 위해 나온 게 Self-Consistency예요.
Self-Consistency의 원리는 간단해요. 같은 질문을 여러 번 던져서 여러 개의 사고 경로와 답변을 생성하고, 그중에서 가장 많이 나온 답(다수결)을 최종 답으로 선택하는 거예요. 예를 들어 5번 물어서 3번 "4개", 2번 "5개"라고 답했으면 "4개"를 선택하는 식이죠.
💡 Self-Consistency 핵심: 한 번의 추론보다 여러 번의 추론 결과를 종합하면 더 정확해요. 비용은 늘어나지만, 정확도가 중요한 태스크에서는 효과적이에요.
실무에서는 temperature를 높여서 다양한 경로를 탐색하게 하고, 여러 결과 중 일관된 것을 선택해요. 물론 API 호출이 늘어나니까 비용도 고려해야 해요. 보통 3~5회 정도가 비용 대비 효과가 좋다고 알려져 있어요.
Tree-of-Thought(ToT) 구조 이해
Tree-of-Thought(ToT)는 2023년에 발표된 기법으로, CoT를 트리 구조로 확장한 거예요. CoT가 한 줄기로 생각을 이어간다면, ToT는 여러 갈래로 분기해서 탐색하고, 막다른 길이면 다시 돌아와서 다른 경로를 시도해요.
비유하자면 이래요. CoT는 미로에서 한 방향으로 쭉 가는 것이고, ToT는 갈림길마다 여러 방향을 탐색하고, 안 되면 되돌아오는 것이에요. 이렇게 하면 복잡한 문제에서 더 좋은 해결책을 찾을 확률이 높아져요.
🌳 ToT의 구성 요소
- Thought Generation: 현재 상태에서 가능한 다음 생각들 생성
- Thought Evaluation: 각 생각의 유망성 평가 (LLM이 스스로 판단)
- Search Algorithm: BFS/DFS로 트리 탐색
- Backtracking: 막다른 길이면 되돌아가서 다른 경로 시도
ToT는 특히 창의적 글쓰기, 게임(24점 게임 등), 복잡한 계획 수립 같은 태스크에서 CoT보다 훨씬 좋은 성능을 보여줬어요. 다만 구현이 복잡하고 API 호출이 많아져서, 꼭 필요한 경우에만 쓰는 게 현실적이에요.
실무에서 쓰는 고급 프롬프트 전략
이론은 알겠는데, 실제로 어떻게 써야 할까요? 제가 실무에서 자주 쓰는 전략들을 공유해드릴게요.
첫째, 역할 부여(Role Prompting)예요. "너는 10년 경력의 데이터 사이언티스트야"처럼 역할을 주면, 그 역할에 맞는 어투와 전문성으로 답변해요. 간단하지만 효과가 꽤 좋아요.
둘째, 구조화된 출력 요청이에요. "JSON 형식으로 답해줘", "표로 정리해줘" 같은 지시를 추가하면 파싱하기 좋은 형태로 답이 나와요. 자동화 파이프라인에서 필수예요.
✅ 실무 프롬프트 체크리스트
- 명확한 태스크 정의 - 모호함 없이 구체적으로
- 출력 형식 지정 - JSON, 마크다운, 표 등
- 제약 조건 명시 - 글자 수, 포함/제외 키워드
- 예시 제공 (Few-shot) - 원하는 답변 스타일 시연
- 사고 과정 요청 (CoT) - 복잡한 문제에서 필수
셋째, 프롬프트 체이닝이에요. 복잡한 태스크를 여러 단계로 나눠서, 이전 단계의 출력을 다음 단계의 입력으로 연결하는 거예요. "먼저 요약해줘 → 그 요약을 바탕으로 분석해줘 → 분석 결과로 보고서 작성해줘" 이런 식이죠.
마지막으로 ReAct(Reasoning + Acting)도 알아두면 좋아요. 모델이 "생각 → 행동 → 관찰"을 반복하면서 외부 도구(검색, 계산기 등)를 활용하는 패턴이에요. LangChain 같은 프레임워크에서 에이전트를 만들 때 이 패턴을 많이 써요.
✍️ 마치며
오늘 Prompt Engineering의 고급 기법들을 Zero-shot부터 Tree-of-Thought까지 정리해봤어요. 핵심은 "모델이 어떻게 생각하게 만들 것인가"예요. 단순한 질문-답변을 넘어서, 사고 과정을 유도하면 같은 모델로도 훨씬 좋은 결과를 얻을 수 있어요. 간단한 태스크는 Zero-shot, 조금 복잡하면 CoT, 정말 어려우면 ToT나 Self-Consistency를 적용해보세요. 오늘 글이 프롬프트 설계에 도움이 되셨으면 좋겠습니다! 💙
#PromptEngineering #프롬프트엔지니어링 #ChainOfThought #TreeOfThought #CoT #LLM #ChatGPT #AI프롬프트

댓글 쓰기