Menu

생각의 사슬(CoT) 프롬프팅: 단계별로 생각하기

생각의 사슬(Chain of Thought) 프롬프팅은 모델이 답을 내기 전에 추론 과정을 쓰게 하는 방법입니다. 여러 단계가 필요한 수학과 논리 문제에서 가장 효과가 크고, 답하기 전에 이미 생각하는 추론 모델에서는 효과가 작습니다.

이 페이지의 모든 프롬프트는 수정한 뒤 ChatGPT, Claude 등 AI 앱에서 바로 열 수 있습니다.

생각의 사슬(Chain of Thought, CoT) 프롬프팅은 언어 모델이 최종 답을 내기 전에 문제의 중간 단계를 쓰게 하는 방법입니다. 문장제, 논리 퍼즐, 일정 짜기처럼 여러 단계가 필요한 문제에서는 풀이를 드러내 놓고 푸는 편이 바로 답하는 것보다 정답을 더 많이 내는 경향이 있고, 확인할 수 있는 단계도 남습니다. 가장 짧은 버전은 프롬프트에 문장 하나를 더하는 것입니다. "단계별로 생각해 보자(Let's think step by step)."

단계를 쓰면 도움이 되는 이유

모델은 답변을 토큰 하나씩 만들고, 이미 쓴 모든 것이 다음 토큰의 입력이 됩니다. 프롬프트가 답을 즉시 요구하면, 모델은 중간 결과가 하나도 쓰이지 않은 상태에서 답을 내야 합니다. 모델이 먼저 "월요일 커피 매출은 168,000원이다"라고 쓰면 그 숫자가 이제 컨텍스트에 있고, 다음 단계는 그것을 머릿속에 암묵적으로 들고 있는 대신 그 위에 쌓을 수 있습니다.

이것이 직관입니다. 근거는 2022년의 두 논문에서 나왔습니다. Wei 등의 "Chain-of-Thought Prompting Elicits Reasoning in Large Language Models"는 추론 과정을 쓴 풀이 예시가 대형 모델의 산수, 상식, 기호 추론 성적을 높인다는 것을 보였습니다. 또한 효과가 규모에 달려 있다는 것도 발견했습니다. 작은 모델은 효과가 없었고, 매끄럽지만 틀린 답으로 이어지는 추론을 쓰는 경우가 많았습니다. 이어서 Kojima 등의 "Large Language Models are Zero-Shot Reasoners"는 예시 없이 "Let's think step by step"이라는 한 문장만으로도 결과가 크게 좋아진다는 것을 보였습니다. 다만 대체로 풀이 예시만큼은 아니었습니다.

바로 답하기와 생각의 사슬

두 탭은 같은 질문을 합니다. 첫 번째는 금액만 요구하고, 두 번째는 풀이를 요청하면서 답을 정해진 마지막 줄에 두게 합니다.

어느 카페에서 커피는 3,500원, 머핀은 2,250원에 팔아. 월요일에 커피 48잔과 머핀 몇 개를 팔아서 총 213,000원을 벌었어. 화요일에는 월요일보다 커피를 10잔 덜 팔고 머핀은 두 배로 팔았어. 화요일 매출은 얼마야? 금액만 답해.
Try it
Example replyReplies vary between models and runs.

258,000원

바로 답한 쪽은 전형적인 실수를 보여 줍니다. 258,000원은 월요일 커피 168,000원에 화요일 머핀 90,000원을 더한 값이라서, 화요일에 커피를 10잔 덜 팔았다는 것을 잊었습니다. 단계별 답변은 화요일 커피 잔 수에 별도의 줄을 주기 때문에 그 단계를 조용히 건너뛸 수 없습니다. 요즘 모델이라면 바로 답하는 버전도 맞힐 수 있지만, 문제가 길어지고 단계들이 서로 더 의존할수록 차이가 벌어집니다.

단계를 쓰면 두 번째 이점도 있습니다. 답이 틀렸을 때 어느 단계가 잘못됐는지 보이므로, 그 지점에서 프롬프트나 입력을 고칠 수 있습니다.

Few-shot 생각의 사슬

Wei 등의 원래 기법은 답에 추론 과정이 드러난 풀이 예시를 프롬프트에 넣고, 모델이 새 질문에 같은 방식으로 답하게 합니다. 아래 예시는 논문의 첫 번째 그림을 옮긴 것이고, 그 뒤의 질문은 새로 만든 것입니다. 질문을 바꿔서 직접 해 보세요.

Few-shot 생각의 사슬
Fill in
Parts
질문: 로저는 테니스공 5개를 가지고 있어. 테니스공 캔을 2개 더 샀어. 캔 하나에는 테니스공이 3개 들어 있어. 로저는 지금 테니스공을 몇 개 가지고 있을까? 답: 로저는 처음에 공 5개를 가지고 있었다. 공이 3개씩 든 캔 2개는 공 6개다. 5 + 6 = 11. 답은 11이다.
질문: 도서관 서가에 책이 120권 있었어. 45권을 빌려주고, 18권을 돌려받고, 30권을 기증받았어. 지금 서가에는 책이 몇 권 있을까? 답:
Try it
Example replyReplies vary between models and runs.

도서관은 처음에 책 120권이 있었다. 45권을 빌려주자 서가에 75권이 남았다. 18권을 돌려받아 93권이 되었다. 30권을 기증받아 123권이 되었다. 답은 123이다.

Few-shot CoT를 쓰면 추론의 모양을 제어할 수 있습니다. 얼마나 길게 쓸지, 무엇을 풀어 쓸지, 답을 어떻게 말할지입니다. 예시의 "답은 11이다"는 정해진 끝맺음이고, 답변은 이것을 따라 했습니다. 제로샷 CoT는 쓰기가 빠르지만 이런 선택을 모델에게 맡깁니다. 예시 세트를 만드는 방법은 few-shot 프롬프팅을, 지시만 쓰는 버전은 제로샷 프롬프팅을 참고하세요.

답은 별도의 줄에 두기

답변에 추론이 들어가면 답은 문단 어딘가에 묻히고, 프로그램이 답을 읽어야 할 때 문제가 됩니다. 카페 프롬프트가 "Answer: X원"으로 한 것처럼 마지막 줄에 정해진 형식으로 답을 요청하고, 코드에서 그 줄을 읽으세요.

import re

matches = re.findall(r"^Answer:\s*(.+)$", reply, re.MULTILINE)
answer = matches[-1] if matches else None

마지막으로 일치한 줄을 쓰는 것이 중요합니다. 모델이 스스로 고치기 전에 추론 중간에 "Answer:"로 시작하는 줄을 쓸 수도 있기 때문입니다. 사용자에게 답만 보여 줘야 한다면, 추론은 한 쌍의 태그 안에, 답은 다른 태그 안에 넣으라고 요청한 다음 두 번째만 보여 주세요. 필드가 여러 개 필요할 때 JSON을 요청하는 방법은 구조화된 출력에서 다룹니다.

추론 모델

요즘 모델 중 일부는 답하기 전에 생각하도록 만들어졌습니다. 보이는 답변 전에 내부적으로 추론을 생성하는데, 이 추론은 흔히 숨겨지거나 요약됩니다. 이런 모델에게 "단계별로 생각해 보자"는 훨씬 덜 중요합니다. 요청하든 안 하든 단계가 진행되기 때문입니다. 이 문구를 더하면 보통 보이는 답변만 길어집니다.

추론 모델에서도 여전히 도움이 되는 것은 추론을 둘러싼 모든 것입니다. 문제를 빠짐없이 서술하고, 올바른 답이 지켜야 할 제약을 밝히고, 최종 답의 형식을 정하는 것입니다. 단계를 하나하나 대본처럼 쓰지 말고 좋은 답이 어떤 모습인지 설명하세요. 정해진 단계 순서는 모델이 스스로 찾았을 더 나은 경로에서 벗어나게 만들 수 있습니다.

생각의 사슬을 쓰지 말아야 할 때

생각의 사슬은 토큰과 시간을 쓰고, 작업에 서로 이어지는 단계가 있을 때만 그 값을 합니다. 정보 조회, 번역, 다시 쓰기, 단순 분류에서는 답변만 길어집니다. 모델은 그럴듯해 보이는 추론을 쓰고도 틀린 답에 도달할 수 있으므로, 답에 이르는 단계만이 아니라 최종 결과 자체를 따로 확인하세요.

사슬 하나가 틀릴 수 있는 어려운 문제에는 이를 확장한 기법이 두 가지 있습니다. 자기 일관성 프롬프팅은 사슬을 여러 개 샘플링해서 가장 많은 사슬이 도달한 답을 고르고, 생각의 나무(ToT) 프롬프팅은 여러 갈래의 부분 추론을 탐색하고 비교한 다음 하나를 택합니다.

자주 묻는 질문

생각의 사슬(CoT) 프롬프팅이란 무엇인가요?

생각의 사슬(CoT) 프롬프팅은 언어 모델이 최종 답 전에 문제의 중간 단계를 쓰게 하는 방법입니다. 추론 과정이 담긴 풀이 예시를 보여 주거나, "단계별로 생각해 보자(Let's think step by step)" 같은 지시를 더합니다. 여러 단계가 있는 문제에서 정답률이 높아지는 경향이 있고, 각 단계를 확인할 수 있게 됩니다.

"단계별로 생각해 보자"는 지금도 효과가 있나요?

일반 채팅 모델에서는 여러 단계가 필요한 문제, 특히 프롬프트가 즉시 답하도록 몰아붙이는 경우에 여전히 도움이 됩니다. 답하기 전에 생각하는 추론 모델은 이미 내부적으로 이렇게 하므로, 이 문구는 답변을 길게 만드는 것 외에는 별로 더해 주지 않습니다. 추론 모델에는 대신 문제와 답의 형식을 명확히 말하세요.

생각의 사슬은 언제 도움이 되고 언제 안 되나요?

서로 이어지는 여러 단계가 필요한 작업에서 도움이 됩니다. 문장제, 산수, 논리 퍼즐, 제약이 있는 일정 짜기, 코드가 하는 일 추적하기가 그렇습니다. 정보 조회, 번역, 다시 쓰기, 단순 분류에는 별로 도움이 안 되고 답변만 길고 느려집니다.

제로샷 CoT와 few-shot CoT는 어떻게 다른가요?

2022년 Wei 등이 소개한 few-shot CoT는 추론 과정이 담긴 풀이 예시를 프롬프트에 넣고, 모델은 그 추론 방식을 따라 합니다. 2022년 Kojima 등의 제로샷 CoT는 예시 없이 "단계별로 생각해 보자" 같은 지시만 더합니다. 제로샷은 쓰기가 빠르고, few-shot은 단계의 모양을 더 잘 제어할 수 있습니다.

모델이 쓴 추론이 실제로 답을 얻은 과정인가요?

꼭 그렇지는 않습니다. 단계는 모델이 생성한 텍스트일 뿐이라서, 그럴듯해 보이는데 최종 답이 틀릴 수도 있고, 오류가 있는데 답은 우연히 맞을 수도 있습니다. 추론은 증거가 아니라 확인할 대상으로 보고, 최종 답은 따로 검증하세요.

Coddy programming languages illustration

Coddy로 코딩 배우기

시작하기