mirror of
https://github.com/dair-ai/Prompt-Engineering-Guide
synced 2024-11-02 15:40:13 +00:00
92 lines
3.9 KiB
Plaintext
92 lines
3.9 KiB
Plaintext
# 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개가 남게 됩니다.
|
|
```
|
|
|
|
이 간단한 프롬프트가 위와 같은 문제에 효과적이라는 점이 인상적입니다. 프롬프트에 사용할 예제가 너무 많지 않을 때 특히 유용합니다. |