CoT 프롬프트란? | 단계별 사고 사용법과 추론 모델에서 달라진 점

AI와 대화하다 보면 분명 아는 것이 많은데도 조건이 여러 개 얽힌 문제나 계산이 필요한 작업에서는 엉뚱한 답을 내놓는 경우가 있습니다. "이 정도는 맞힐 줄 알았는데?" 싶은 순간을 한 번쯤 경험해 보셨을 겁니다.

저도 블로그 자동화 로직을 짜거나 복잡한 조건문, 여러 변수가 얽힌 시나리오를 AI와 함께 정리하면서 비슷한 문제를 자주 겪었습니다. 결과만 한 번에 요청하면 중요한 조건 하나를 빠뜨리거나 앞에서 정한 기준과 맞지 않는 결론을 내놓는 경우가 있었습니다.

그래서 처음에는 "결론을 바로 말하지 말고 단계별로 생각해 줘"라는 지시를 추가했습니다. 복잡한 문제를 몇 개의 작은 단계로 나눠 확인하도록 했더니 결과를 검토하기가 훨씬 편했습니다.

이와 관련해 프롬프트 엔지니어링에서 자주 등장하는 개념이 Chain-of-Thought, 줄여서 CoT입니다. 다만 최근에는 추론에 특화된 AI 모델이 등장하면서 몇 년 전과 똑같은 방식으로 CoT 프롬프트를 사용할 필요는 없어졌습니다.

이번 글에서는 CoT 프롬프트가 무엇인지부터 2022년 연구에서 왜 주목받았는지, 그리고 최신 추론 모델에서는 어떻게 활용 방법이 달라졌는지까지 순서대로 정리해 보겠습니다.

CoT 프롬프트로 문제를 1단계부터 4단계까지 나눠 추론하는 과정을 표현한 흐름도
복잡한 질문을 여러 단계로 나누어 검토하고 최종 답변에 도달하는 과정을 단순화한 그림입니다.

CoT 프롬프트란 무엇일까요?

CoT는 Chain-of-Thought의 약자로, 우리말로는 보통 '사고의 연쇄' 또는 '단계별 사고' 정도로 번역합니다.

초기 CoT 연구에서는 모델이 정답만 바로 생성하도록 하는 대신 문제 해결에 필요한 중간 추론 단계를 함께 생성하도록 유도했습니다. 특히 여러 번의 계산이나 논리적 연결이 필요한 문제에서 이러한 방식이 성능 향상으로 이어질 수 있다는 연구 결과가 나오면서 널리 알려졌습니다.

예를 들어 단순히 "정답을 알려 줘"라고 요청하는 대신 문제에서 주어진 조건을 확인하고, 필요한 계산을 수행한 뒤 최종 답을 결정하도록 유도하는 방식입니다.

다만 여기서 한 가지 구분해야 할 점이 있습니다. AI가 출력한 설명이 모델 내부에서 실제로 일어난 모든 사고 과정을 그대로 보여 준다고 생각해서는 안 됩니다. 특히 최신 추론 모델은 답변을 생성하기 전에 내부적인 추론 과정을 사용할 수 있으며, 사용자가 보는 답변은 그 내부 과정 전체와 동일하지 않을 수 있습니다.

AI는 왜 복잡한 문제에서 실수할까요?

대형 언어 모델(LLM)은 입력된 문맥을 바탕으로 다음에 이어질 토큰을 예측하면서 응답을 생성합니다.

간단한 사실 확인이나 짧은 질문에는 바로 답할 수 있지만, 여러 조건을 동시에 확인해야 하거나 여러 단계의 계산과 판단이 필요한 문제에서는 일부 조건을 놓치거나 잘못된 결론을 만들기도 합니다.

예를 들어 예산 제한, 우선순위, 기간, 예외 조건을 한꺼번에 고려해야 하는 문제라면 하나의 조건을 빠뜨리는 것만으로도 최종 답이 달라질 수 있습니다.

이런 복잡한 문제를 다루기 위해 연구된 프롬프트 기법 가운데 하나가 CoT입니다. 문제를 한 번에 처리하도록 하기보다 필요한 중간 단계나 검토 항목을 활용하도록 유도하는 방식입니다.

물론 단계를 나눈다고 해서 항상 정답이 나오는 것은 아닙니다. 잘못된 전제나 계산에서 출발하면 이후 단계가 논리적으로 잘 정리되어 보여도 최종 결론은 틀릴 수 있습니다.

"단계별로 생각해"라는 문장은 왜 유명해졌을까요?

Few-shot CoT 연구

CoT가 널리 알려진 계기 가운데 하나는 2022년 발표된 'Chain-of-Thought Prompting Elicits Reasoning in Large Language Models' 연구입니다.

연구진은 단순히 질문과 정답의 예시만 제공하는 대신 문제를 해결하는 중간 추론 과정이 포함된 예시를 모델에 보여 주는 방식을 실험했습니다.

그 결과 충분히 큰 언어 모델에서 산술 문제, 상식 추론, 기호 추론과 같은 여러 작업의 성능이 향상되는 모습을 확인했습니다.

중요한 점은 이 연구가 "모든 질문에 단계별 사고를 요구하면 무조건 성능이 올라간다"는 의미는 아니라는 것입니다. 연구에 사용된 모델과 문제 유형, 프롬프트 구성 등의 조건 안에서 CoT의 효과가 확인됐다고 이해하는 것이 정확합니다.

Zero-shot CoT와 "Let's think step by step"

같은 해 발표된 'Large Language Models are Zero-Shot Reasoners' 연구에서는 더 단순한 방법이 소개됐습니다.

풀이 예시를 미리 제공하지 않고 "Let's think step by step"이라는 문장을 추가하는 것만으로 모델이 중간 추론 단계를 생성하도록 유도하는 Zero-shot CoT 방식입니다.

연구에서 당시 사용된 모델은 MultiArith라는 산술 문제 벤치마크에서 기본 Zero-shot 방식으로 17.7%의 정확도를 기록했지만, Zero-shot CoT를 적용했을 때 78.7%까지 올라갔습니다.

이 결과 때문에 "단계별로 생각해 보자"라는 짧은 문장이 프롬프트 엔지니어링에서 유명해졌습니다.

다만 이 숫자는 2022년 당시 특정 모델과 벤치마크에서 나온 결과입니다. 현재 사용하는 모든 AI 모델에서 같은 수준의 개선이 나타난다는 의미는 아닙니다.

최신 추론 모델에서는 무엇이 달라졌을까요?

초기 CoT 연구 이후 AI 모델은 크게 발전했습니다. 특히 복잡한 문제를 해결하기 위해 답변 전에 내부적으로 더 많은 추론을 수행하는 추론 모델이 등장했습니다.

이런 모델에서는 예전처럼 "단계별로 생각해", "모든 추론 과정을 자세히 보여 줘" 같은 문장을 반드시 넣을 필요가 없습니다.

OpenAI 역시 추론 모델을 사용할 때 "think step by step"처럼 모델의 사고 방식을 직접 지정하는 지시가 불필요하며, 경우에 따라 도움이 되지 않을 수 있다고 안내하고 있습니다.

대신 해결해야 할 목표가 무엇인지, 반드시 지켜야 하는 조건은 무엇인지, 어떤 결과물을 원하는지를 명확하게 전달하는 것이 중요합니다.

예전 방식

이 문제를 단계별로 생각해 줘.

생각하는 과정을 처음부터 끝까지 모두 보여 주고 마지막에 정답을 알려 줘.

지금 활용하기 좋은 방식

아래 문제를 분석하고 최종 해결책을 제시해 줘.

다음 항목은 반드시 검토해 줘.

1. 핵심 조건과 제약 사항
2. 가능한 해결 방법
3. 각 방법의 장단점
4. 조건을 가장 잘 충족하는 최종 방안

최종 답변은 '조건 정리 / 대안 비교 / 최종 방안' 순서로 작성해 줘.

두 프롬프트는 비슷해 보이지만 차이가 있습니다.

첫 번째는 모델에게 내부 사고 과정을 자세하게 출력하도록 요구합니다. 두 번째는 사용자가 실제로 확인하고 싶은 항목과 최종 답변의 구조를 지정합니다.

저는 최근에는 두 번째 방식을 더 자주 사용합니다. 생각의 모든 과정을 길게 출력받기보다 중요한 조건이 빠지지 않았는지 확인하기 쉽고, 최종 결과도 원하는 형태로 정리하기 편하기 때문입니다.

실전에서는 CoT 프롬프트를 어떻게 작성할까요?

일반적인 AI 모델에서 복잡한 작업을 요청할 때는 단순히 "단계별로 생각해"라는 한 문장을 붙이는 것보다 문제를 어떤 순서로 검토해야 하는지 명확하게 정리하는 방법을 사용할 수 있습니다.

1. 먼저 목표를 분명하게 적습니다

AI에게 무엇을 해야 하는지 한 문장으로 명확하게 알려 줍니다.

"아래 상황을 분석해 서버 자원 배분안을 제시해 줘"처럼 최종적으로 얻고 싶은 결과를 먼저 적습니다.

2. 제약 조건을 빠뜨리지 않습니다

예산, 기간, 우선순위, 사용할 수 없는 방법처럼 결론에 영향을 미치는 조건을 적습니다.

프롬프트가 길더라도 중요한 조건이 빠져 있는 것보다 명확하게 적혀 있는 편이 결과를 검토하기 쉽습니다.

3. 확인해야 할 항목을 지정합니다

모델의 모든 사고 과정을 보여 달라고 하기보다 최종 결론을 내리기 전에 무엇을 확인해야 하는지를 지정할 수 있습니다.

예를 들어 비용, 위험 요소, 장단점, 예외 조건 등을 각각 확인하도록 요구하는 방식입니다.

4. 원하는 출력 형식을 정합니다

마지막으로 답변을 어떤 형태로 받고 싶은지 적습니다.

표가 필요하면 표로 요청하고, 비교가 필요하면 항목별 비교 형식을 지정합니다. 결론과 근거를 구분해서 받고 싶다면 두 부분을 별도의 제목으로 나누도록 요청할 수도 있습니다.

복사해서 활용할 수 있는 실전 프롬프트

예를 들어 주말 할인 행사 때문에 서버 트래픽이 급증하는 상황을 분석한다고 가정해 보겠습니다.

너는 시스템 설계와 서비스 운영 관점에서 아래 상황을 분석해야 한다.

상황
A 마켓은 주말 할인 행사로 서버 트래픽이 평소의 5배로 증가할 것으로 예상된다. 사용할 수 있는 클라우드 서버 예산은 제한되어 있다. 결제 시스템 오류와 상품 조회 지연을 모두 완전히 제거하기는 어렵다.

목표
제한된 예산에서 서비스 장애 위험을 줄일 수 있는 자원 배분 방안을 제시한다.

반드시 검토할 항목
1. 현재 상황의 핵심 위험 요소와 제약 조건
2. 결제 오류와 상품 조회 지연이 서비스에 미칠 수 있는 영향
3. 제한된 예산에서 가능한 자원 배분 방법
4. 제안한 방법의 단점이나 남아 있는 위험

출력 형식
핵심 조건 → 대안 비교 → 권장 대응 방안 → 남은 위험 순서로 정리한다.

이렇게 작성하면 모델의 모든 내부 사고 과정을 요구하지 않으면서도 사용자가 확인하고 싶은 판단 항목을 빠뜨리지 않도록 요청할 수 있습니다.

특히 결과가 마음에 들지 않을 때도 "다시 생각해 줘"라고 막연하게 요청하는 대신 "예산 조건을 다시 확인해 줘", "세 번째 대안의 단점을 추가해 줘"처럼 어느 부분을 다시 검토해야 하는지 구체적으로 요청하기 쉽습니다.

Few-shot 프롬프트는 언제 사용할까요?

모델이 원하는 작업 방식이나 출력 형태를 제대로 이해하지 못한다면 예시를 함께 제공하는 Few-shot prompting을 활용할 수 있습니다.

예를 들어 고객 문의를 '배송', '환불', '제품 문의' 세 종류로 분류해야 한다면 각 분류에 해당하는 입력과 정답 예시를 몇 개 보여 준 뒤 새로운 문의를 분류하도록 요청할 수 있습니다.

이때 중요한 것은 예시를 많이 넣는 것 자체가 아니라 실제로 원하는 판단 기준과 출력 형태를 모델이 파악할 수 있도록 대표적인 예시를 선택하는 것입니다.

또한 Few-shot 예시가 항상 결과를 개선한다고 단정할 수는 없습니다. 사용하는 모델과 작업에 따라 예시가 없는 간단한 지시가 더 잘 작동할 수도 있으므로 중요한 작업이라면 두 방식을 직접 비교해 보는 것이 좋습니다.

CoT를 모든 질문에 사용할 필요는 없습니다

단순한 사실 확인이나 짧은 번역, 간단한 문장 수정처럼 복잡한 추론이 필요하지 않은 작업이라면 굳이 여러 단계의 검토 과정을 지정할 필요가 없습니다.

오히려 필요 이상으로 답변이 길어지고 원하는 결과를 얻는 데 시간이 더 걸릴 수 있습니다.

반대로 여러 조건을 동시에 고려해야 하는 판단, 복수의 대안을 비교하는 작업, 계산이나 논리 검토가 필요한 문제라면 문제를 작은 단위로 나누거나 확인해야 할 항목을 명시하는 방법이 유용할 수 있습니다.

그리고 아무리 정돈된 답변을 받더라도 중요한 숫자와 전제, 출처는 다시 확인해야 합니다. 단계가 많고 설명이 길다는 이유만으로 답의 정확성이 보장되는 것은 아닙니다.

마치며: 이제는 '생각을 보여 줘'보다 '무엇을 확인할지'가 중요합니다

CoT 프롬프트는 대형 언어 모델이 복잡한 문제를 해결하는 능력을 끌어내는 방법으로 주목받았고, 2022년의 여러 연구를 통해 널리 알려졌습니다.

하지만 AI 모델이 발전하면서 사용 방법도 달라지고 있습니다. "Let's think step by step"이라는 문장을 모든 질문에 붙이는 것보다 어떤 목표를 달성해야 하는지, 어떤 조건을 반드시 지켜야 하는지, 무엇을 검토해야 하는지 명확하게 알려 주는 것이 실전에서는 더 중요해졌습니다.

저 역시 지금은 AI에게 모든 생각을 길게 보여 달라고 요청하기보다 목표 → 제약 조건 → 검토 항목 → 출력 형식 순서로 프롬프트를 작성하는 편입니다.

복잡한 작업에서 AI의 답이 자꾸 중요한 조건을 빠뜨린다면 "단계별로 생각해"라는 한 문장만 추가하기보다, AI가 반드시 확인해야 할 조건을 직접 나눠서 적어 보세요. 결과를 검토하고 잘못된 부분을 다시 요청하기도 훨씬 편해집니다.

참고자료

#CoT프롬프트 #ChainOfThought #단계별사고 #프롬프트작성법 #프롬프트엔지니어링 #AI활용법 #추론모델 #FewShot프롬프트

Post a Comment

다음 이전