# Chain-of-Thought Prompting

import {Screenshot} from 'components/screenshot'
import COT from '../../img/cot.png'
import ZEROCOT from '../../img/zero-cot.png'


## Chain-of-Thought (CoT) Prompting

<Screenshot src={COT} alt="COT" />

Image Source: [Wei et al. (2022)](https://arxiv.org/abs/2201.11903)

[Wei et al. (2022)](https://arxiv.org/abs/2201.11903)에서 소개된 생각의 사슬(CoT) 프롬프트는 중간 추론 단계를 통해 복잡한 추론을 가능하게 합니다. 이를 단답형 프롬프트와 결합하면 응답하기 전에 추론이 필요한 복잡한 작업에서 더 나은 결과를 얻을 수 있습니다.

*프롬프트:*
```
집합 {4, 8, 9, 15, 12, 2, 1}에서 홀수를 모두 더하면 짝수입니다.
답변: 홀수(9, 15, 1)를 모두 더하면 25가 됩니다. 위의 명제는 거짓입니다.

집합 {17, 10, 19, 4, 8, 12, 24}에서 홀수를 모두 더하면 짝수입니다.
답변: 홀수(17, 19)를 모두 더하면 36이 됩니다. 위의 명제는 참입니다.

집합 {16, 11, 14, 4, 8, 13, 24}에서 홀수를 모두 더하면 짝수입니다.
답변: 홀수(11, 13)를 모두 더하면 24가 됩니다. 위의 명제는 참입니다.

집합 {17, 9, 10, 12, 13, 4, 2}에서 홀수를 모두 더하면 짝수입니다.
답변: 홀수(17, 9, 13)를 모두 더하면 39가 됩니다. 위의 명제는 거짓입니다.

집합 {15, 32, 5, 13, 82, 7, 1}에서 홀수를 모두 더하면 짝수입니다.
답변:
```

*출력:*
```
홀수(15, 5, 13, 7, 1)를 모두 더하면 41이 됩니다. 위의 명제는 거짓입니다.
```

와우! 추론 단계를 추가했을 때 완벽한 결과를 볼 수 있습니다. 사실 더 적은 수의 예제, 즉 하나의 예제만 추가해도 이 과제를 해결할 수 있습니다:

*프롬프트:*
```
이 그룹의 홀수는 4, 8, 9, 15, 12, 2, 1과 같이 짝수로 합산됩니다.
A: 홀수(9, 15, 1)를 모두 더하면 25가 됩니다. 정답은 거짓입니다.

이 그룹의 홀수는 15, 32, 5, 13, 82, 7, 1과 같이 짝수로 합산됩니다.
A:
```

*출력:*
```
홀수(15, 5, 13, 7, 1)를 모두 더하면 41이 됩니다. 답은 False입니다.
```

논문의 저자들은 위와 같은 결과가 충분히 큰 LLM에서만 발생하는 특성이라고 주장한다는 점을 명심하세요.

## Zero-shot COT Prompting

<Screenshot src={ZEROCOT} alt="Zero-shot COT" />

Image Source: [Kojima et al. (2022)](https://arxiv.org/abs/2205.11916)

최근에 나온 아이디어 중 하나로 zero-shot CoT가 있습니다. [zero-shot CoT](https://arxiv.org/abs/2205.11916) (Kojima et al. 2022) 원래의 프롬프트에 "단계적으로 생각하자"를 추가하는 것이 핵심입니다. 간단한 문제를 풀고 모델이 어떻게 작동하는지 살펴봅시다:

*프롬프트:*
```
저는 시장에 가서 사과 10개를 샀습니다. 사과 2개를 이웃에게 주고 2개를 수리공에게 주었습니다. 그리고 사과 5개를 더 사서 1개는 제가 먹었습니다. 저는 몇 개의 사과를 가지고 있었나요?
```

*출력:*
```
사과 11개
```

정답이 틀렸습니다! 위에서 제안한 프롬프트로 시도해 보겠습니다.

*프롬프트:*
```
저는 시장에 가서 사과 10개를 샀습니다. 저는 사과 2개를 이웃에게 주고 2개를 수리공에게 주었습니다. 그리고 사과 5개를 더 사서 1개는 제가 먹었습니다. 사과가 몇 개나 남았나요?

차근차근 생각해 봅시다.
```

*출력:*
```
먼저 사과 10개로 시작했습니다.
이웃에게 2개, 수리공에게 2개를 나누어 주었으므로 사과가 6개가 남았습니다.
그런 다음 사과 5개를 더 사서 이제 사과가 11개가 되었습니다.
마지막으로 사과 1개를 먹었으므로 사과 10개가 남게 됩니다.
```

이 간단한 프롬프트가 위와 같은 문제에 효과적이라는 점이 인상적입니다. 프롬프트에 사용할 예제가 너무 많지 않을 때 특히 유용합니다.