Google AI Essentials：Chain-of-Thought (CoT) プロンプティングを知る

# はじめに

本記事は、Google AI Essentialsのプログラムより、参照させて頂いています。興味を持った方は、是非受講してみてください。

https://www.coursera.org/learn/google-ai-essentials

# Chain-of-Thought (CoT) プロンプティングを知る

***<font color="MediumVioletRed">『CoT プロンプティングは、大規模言語モデル（LLM)に論理的思考のプロセスを説明するよう要求するテクニックです。』</font>***

- CoT プロンプティングは、段階的な論理的思考を伴う問題を解くのに有効です。
- このテクニックは、特定のケースにおいて LLM の回答の質を向上させます。

## メリット

- LLM の出力の全体的な精度を向上させることができます。タスクをより管理しやすいステップに分割すると、LLM が正確で一貫した結果を出せるようになります。
- 問題解決のプロセスを改善することができます。LLM に問題の分解を指示することで、LLM がどのような手順で解決に至ったかをよりよく理解することができます。

CoT プロンプティングは、数学的または論理的な論理的思考を伴う問題を解くのに有効です。

例えば、
- **購入の判断**
- **販売データの分析**
- **顧客要件に基づく製品のレコメンド**

を行う際に、CoT プロンプティングを使用することができます。

## プロンプト設計

***<font color="MediumVioletRed">『CoT プロンプティングには、問題を解決する方法を個別のステップで示す例が 1 つ以上含まれていることが多い』</font>***

- プロンプトでは、問題やタスクの背景を説明し、例を挙げ、指示とともにリクエストを述べます。

## 職場でのタスクで、CoT プロンプティングを使う方法の例

何千人もの従業員を抱える組織があるとします。各従業員には、消耗品や備品を購入する際に使用できる固有の購買コードが割り当てられています。テクニカル サポートのスペシャリストは、各従業員に固有の購買コードを作成する必要があります。

スペシャリストは、会社や従業員情報の使用が承認されている社内の会話型 AI ツールを使用し、次のCoT プロンプティングで購買コードの作成を依頼します。

```text
私たちの組織では、従業員の部署とID番号を組み合わせて購買コードを割り当てています。
購買コードのアルファベットはすべて小文字とします。
例を見て、同様の形式で質問に答えてください。
各従業員の購買コードを決定する手順を説明してください。
```

```text
質問：Tiana B はマーケティング部門に所属し、ID ナンバーは 9283 です。
　Tiana B の購買コードは何ですか？
答え：Tiana B の購買コードは marketing9283 です。
これを判断するには、まず部署（マーケティング）と ID 番号（9283）を組み合わせます。
その結果が Marketing9283 です。

次に、すべてのアルファベットを小文字に変更します。
これにより、購買コード marketing9283 が作成されます。
```

```text
質問：Sylvie E は営業部に所属し、ID ナンバーは 2379 です。
Sylvie E の購買コードは何ですか？
```

## プロンプトの3つの主要コンポーネント

このプロンプトには 3 つの主要な部分があります。

1. ***<font color="MediumBlue">コンテキスト</font>***
1. ***<font color="MediumBlue">例</font>***
1. ***<font color="MediumBlue">LLMが答えるべき質問</font>***

それぞれの部分を詳しく見てみましょう。

### <font color="MediumBlue">1. コンテキスト</font>

プロンプトではまず、問題を解決するために使うコンテキストを提供します。

```text
私たちの組織では、従業員の部署とID番号を組み合わせて購買コードを割り当てています。
購買コードのアルファベットはすべて小文字とします。
```

このプロンプトでは、この組織で購買コードを作成する方法が説明されています。これは、CoT プロンプティングであるため、プロンプトでは LLM に例に従い、購入コードを決定する手順を説明するよう指示します。 

### <font color="MediumBlue">2. 例</font>

質疑応答形式で例を示すことで、LLM がフォローしやすくなります。 

この例の質問部分には、従業員の部署と ID 番号に関する情報が含まれており、この情報に基づいた Tiana B の購買コードを尋ねています。

例の解答部分では、スペシャリストが LLM に購買コードを決定するために使用するステップを順を追って示しています。

```text
質問：Tiana B はマーケティング部門に所属し、ID ナンバーは 9283 です。
　Tiana B の購買コードは何ですか？
答え：Tiana B の購買コードは marketing9283 です。
これを判断するには、まず部署（マーケティング）と ID 番号（9283）を組み合わせます。
その結果が Marketing9283 です。

次に、すべてのアルファベットを小文字に変更します。
これにより、購買コード marketing9283 が作成されます。
```

:::note info
プロンプトの中で必ずしも役立つ例を示せるとは限りません。その場合は、LLM にその理由を説明してほしいと述べるだけでよいのです。結果の質は、あなたのプロンプトと、あなたが利用している LLM によって異なります。

最良の結果を得るには、プロンプトに以下の文言を入れてみてください。
- 「問題を段階的に（step-by-step で）解決してください」
- 「答えを決定するための各ステップを説明してください」
:::


### <font color="MediumBlue">3. LLMが答えるべき質問</font>

最後に、LLM が答えるべき具体的な問いをプロンプトに記入します。

```text
質問：Sylvie E は営業部に所属し、ID ナンバーは 2379 です。
Sylvie E の購買コードは何ですか？
```

## Tips：プロンプトを改善するには

LLM に最も適したプロンプトを 見つける方法のひとつは、 LLMにも言えることですが、 プロンプトをどんどん反復して とにかくたくさん入力することです。 

- 面白くしたかった出力が 面白くなかったのなら、 もっと面白くして、と プロンプトに入れましょう。 
- 漠然としすぎていたなら、 プロンプトに 漠然としないように、と 入れましょう。
- もし LLM に クリエイティブな回答を希望する場合は、 非常に短いプロンプトを試してみましょう。 
- 具体的な回答を希望する場合は、 たくさんの例を入れれば、 あなたの例に合致した回答を得られます。

LLM の使い方として、 よりクリエイティブにできるのか、 より具体的にできるのかは、 どれだけコンテキストを 入れるかによって決まります。

もう一つの面白いテクニックは Chain-of-Thought プロンプティングです。 モデルの回答を論理的に説明させます。 モデルに数学や数式を尋ねる場合、 数式を まず最初のステップ、 そして 2 番目のステップ… とステップに分けるように頼めます。 LLM に複数のステップを踏ませることで より正確なものになりえます。 

もうひとつ、ちょっと意外なテクニックがあります。 モデル自身の回答に対して さらに回答するよう求めるんです。 たとえばときに、私はモデルに尋ねたあと 追加で、この返答は曖昧ですか？と聞きます。 答えが「はい」なら その回答を破棄します。 そしてもうちょっと考えてもらうようにします。 実験すればするほど、 クリエイティブであればあるほど、 いい結果がついてきます。