03 - CoT와 페르소나

2025-09-05

#Prompt-Engineering#LLM#Gemini#ChatGPT#Claude

들어가며

1편과 2편에서는 프롬프트 엔지니어링의 기본 개념부터 제로샷, 원샷, 퓨샷 프롬프팅이라는 핵심 기법까지 다루었다. 이 기법들은 AI에게 명확한 작업을 지시하고, 예시를 통해 원하는 결과물의 형태를 안내하는 데 매우 효과적이다. 하지만 이를 활용하더라도 종종 더 복잡한 문제에 부딪히게 된다. 여러 단계의 논리적 사고가 필요하거나, 특정 분야의 깊이 있는 전문 지식이 요구되는 경우들이다.

이럴 때 기초적인 프롬프팅만으로는 AI가 성급하게 부정확한 결론을 내리거나, 피상적인 답변만 내놓는 한계를 경험하게 된다. 이번 글에서는 이러한 한계를 극복하고 AI의 '사고 과정'을 직접 유도하여 추론 능력을 극대화하는 두 가지 강력한 고급 전략, **사고의 연쇄(Chain-of-Thought, CoT)**와 **페르소나 패턴(역할 프롬프팅)**에 대해 자세히 알아보자.

사고의 연쇄(CoT) 프롬프팅: AI의 추론 과정 유도하기

사고의 연쇄(Chain-of-Thought, CoT) 프롬프팅은 모델에게 최종 답변을 내놓기 전에, 문제 해결을 위한 중간 추론 단계를 단계별로 생각하도록 유도하는 기법이다. 이는 복잡한 산술 문제, 논리 추론, 상식 추론 등 여러 단계를 거쳐야 하는 문제에서 특히 강력한 성능을 발휘한다.

CoT가 효과적인 이유는 명확다. 복잡한 문제를 작은 단위로 분해하고 각 단계를 순차적으로 해결하도록 강제함으로써, 성급한 결론으로 인한 오류 가능성을 크게 줄인다. 이는 마치 개발자가 코딩 전에 의사코드(pseudocode)를 작성하거나, 수학자가 문제 풀이 과정을 종이에 적는 것과 같은 메타인지 전략을 AI에게 적용하는 것과 같다.

CoT는 크게 두 가지 방식으로 적용할 수 있다.

1. 퓨샷 CoT (Few-shot CoT)

이 방식은 문제, 그에 대한 단계별 추론 과정, 그리고 최종 답변으로 구성된 완전한 예시를 몇 개 제공하는 것이다. 모델은 이 예시들을 통해 '어떻게 생각해야 하는지'를 학습한다.

프롬프트 예시:

Q: 카페에 5개의 사과가 있었다. 2개를 더 사왔고, 3개를 손님에게 팔았다. 남은 사과는 몇 개인가?
A: 처음 5개의 사과가 있었다. 2개를 더 사왔으므로 5 + 2 = 7개가 되었다. 3개를 팔았으므로 7 - 3 = 4개가 남았다. 정답은 4개이다.

Q: 로저는 테니스 공을 5개 가지고 있다. 그는 각각 3개의 공이 들어있는 2캔의 테니스 공을 더 샀다. 그는 지금 총 몇 개의 공을 가지고 있는가?
A:

예상 출력:

로저는 처음에 5개의 공을 가지고 있었다. 그는 2캔의 공을 샀고, 각 캔에는 3개의 공이 들어있으므로, 새로 산 공은 2 * 3 = 6개이다. 따라서 총 공의 개수는 5 + 6 = 11개이다. 정답은 11개이다.

2. 제로샷 CoT (Zero-shot CoT)

별도의 예시를 만들기 어려운 경우에도 CoT를 활용할 수 있다. 프롬프트 끝에 **"단계별로 생각해보자(Let's think step-by-step)"**와 같은 간단한 문구를 추가하기만 하면 된다. 이 문구 하나가 모델 스스로 추론 과정을 생성하도록 유도한다.

프롬프트 예시:

로저는 테니스 공을 5개 가지고 있다. 그는 각각 3개의 공이 들어있는 2캔의 테니스 공을 더 샀다. 그는 지금 총 몇 개의 공을 가지고 있는가? 단계별로 생각해보자.

이러한 접근법은 AI를 단순한 '답변 생성기'에서 '문제 해결 파트너'로 변화시킨다. 개발자에게 이는 AI의 추론 과정을 들여다볼 수 있는 **'디버깅 창'**을 여는 것과 같다. AI가 제시한 추론 과정에 논리적 오류가 있다면, 어느 부분에서 잘못되었는지 파악하고 더 정교한 프롬프트를 통해 수정할 수 있다. 이는 AI를 신뢰할 수 없는 '블랙박스'에서 투명하고 디버깅 가능한 협업 도구로 만드는 중요한 전환점이다.

페르소나 패턴 (역할 프롬프팅): 전문가 지식 잠금 해제하기

**역할 프롬프팅(Role Prompting)**은 AI에게 특정 페르소나나 역할을 부여하여 응답의 스타일, 어조, 깊이, 전문성을 제어하는 매우 효과적인 기법이다. "너는 10년차 사이버 보안 전문가야" 또는 "너는 파이썬 초심자를 위한 친절한 코딩 튜터야"와 같이 구체적인 역할을 부여하면, 모델은 내장된 방대한 데이터 속에서 해당 역할과 관련된 지식과 소통 방식을 활성화한다.

다음은 역할 프롬프팅의 효과를 극명하게 보여주는 '전'과 '후' 예시이다.

역할 부여 전 (일반 프롬프트):

이 Python 코드를 설명해줘.

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)

역할 부여 후 (페르소나 패턴):

너는 컴퓨터 과학과 학생들에게 재귀 함수의 개념을 가르치는 경험 많은 교수야. 아래 Python 코드를 재귀의 핵심 원리(기저 조건, 재귀 호출)에 초점을 맞춰 명확하고 이해하기 쉽게 설명해줘.

역할을 부여하기 전의 프롬프트는 코드의 기능에 대한 건조한 설명을 생성할 가능성이 높다. 하지만 역할을 부여한 후의 프롬프트는 훨씬 더 깊이 있고, 교육적인 맥락에 맞는 비유를 사용하며, 학생들이 헷갈릴 만한 부분을 짚어주는 등 훨씬 풍부한 답변을 생성할 것이다.

이 기법은 단순히 정보의 정확성을 높이는 것을 넘어, 특정 청중이나 목적에 맞는 맞춤형 커뮤니케이션을 가능하게 한다. 개발자 문서를 작성할 때는 '숙련된 기술 작가'의 역할을, 코드 리뷰를 요청할 때는 '꼼꼼한 시니어 개발자'의 역할을 부여함으로써 우리는 AI를 더욱 정교하고 유용한 도구로 활용할 수 있다.

참고 자료

Chain-of-Thought Prompting

역할 프롬프팅