ここでは全10回に渡って、生成AI「Claude」を使いこなすためのプロンプトエンジニアリングのコツを紹介しています。前回の第5回目は、「複雑なタスクをプロンプトチェーンで解決する」について解説してきました。
Claudeに考えさせることの重要性
複雑な質問やタスクに直面した時、いきなり最終的な回答を求めるのではなく、Claudeにじっくりと問題を考えさせることが大切です。これは「思考の連鎖(CoT)プロンプティング」とも呼ばれ、回答の精度とニュアンスを大幅に向上させることができるんですね。
例えば、あなたが突然難しい質問をされたとしましょう。すぐに答えるよりも、まず考える時間があった方が、より良い回答ができるはずです。Claudeも同じなんです。
応答前に推論させることで、特に多面的または困難な質問に対して、より正確で知的な出力が得られるようになります。ステップバイステップで考えるよう明示的に指示することで、より体系的で徹底的な問題解決へのアプローチを促すことができるのです。
ステップバイステップで考えるよう促す方法
では、具体的にどうやってClaudeにステップバイステップで考えさせるのでしょうか。
最も簡単な方法は、プロンプトに「Think step by step」というフレーズを含めることです。例えばこんな感じですね。
映画「ジョーズ」と「007 カジノ・ロワイヤル」の監督は、同じ国出身ですか? Think step by step.
すると、Claudeは最終的な回答を提示する前に、思考プロセスを段階的に説明してくれます。
思考プロセスを明示的にキャプチャする
Claudeのステップバイステップの推論を最終的な応答から分けるために、やなどのXMLタグを使うのも良い方法です。思考プロセスをタグ内に、最終的な答えをタグ内に配置するようClaudeに指示することができます。
例えば、こんなプロンプトを与えてみましょう。
Role: User
Content: [プロンプトの残りの部分] 質問に答える前に、<thinking>タグ内でステップバイステップで考えてください。
そして、<answer>タグ内に最終的な答えを提示してください。
“thinking”タグの中身を事前に埋めておくこともできます。こうすることで、Claudeにどこから思考を始めるべきかを示唆できます。
Role: User
Content: [プロンプトの残りの部分] 質問に答える前に、<thinking>タグ内でステップバイステップで考えてください。
そして、<answer>タグ内に最終的な答えを提示してください。
Role: Assistant
Content: <thinking>まず、与えられた情報を整理します。</thinking>
すると、Claudeはタグ内で思考プロセスを完成させ、最終的な答えを提示してくれるでしょう。
タグを使うことで、必要に応じて”answer”タグ内の最終的な答えだけを後処理で抽出するのも簡単です。
思考プロンプティングの実践例
それでは、思考プロンプティングの実践例をいくつか見てみましょう。
映画の監督の出身国を比較する例
Role: User
Content: 映画「ジョーズ」と「007 カジノ・ロワイヤル」の監督は、同じ国出身ですか? Think step by step.
映画「ジョーズ」と「007 カジノ・ロワイヤル」の監督が同じ国出身かどうかを判断するために、段階的に考えていきましょう。
ステップ1: 映画「ジョーズ」の監督を特定する。
「ジョーズ」の監督は、スティーブン・スピルバーグです。
ステップ2: スティーブン・スピルバーグの出身国を特定する。
スティーブン・スピルバーグは、アメリカ合衆国オハイオ州シンシナティ出身です。
ステップ3: 映画「007 カジノ・ロワイヤル」の監督を特定する。
2006年公開の「007 カジノ・ロワイヤル」の監督は、マーティン・キャンベルです。
ステップ4: マーティン・キャンベルの出身国を特定する。
マーティン・キャンベルは、ニュージーランドのヘイスティングズ出身です。
ステップ5: 両監督の出身国を比較する。
スティーブン・スピルバーグはアメリカ合衆国出身で、マーティン・キャンベルはニュージーランド出身です。
したがって、「ジョーズ」と「007 カジノ・ロワイヤル」の監督は同じ国出身ではありません。
手がかりから推論して質問に答える例
Role: User Content: 以下の情報を使って、質問に答えてください。
- 太郎君は算数が得意です。
- 花子さんは国語が得意です。
- 太郎君は社会が苦手です。
- 次郎君は理科が得意です。
- 花子さんは算数が苦手です。
質問: 理科が得意なのは誰ですか?また、その人は算数が得意だと言えますか?
まず<thinking>タグ内で、与えられた情報から質問に答えるために必要な思考プロセスを説明してください。
そして、<answer>タグ内で質問に対する答えを提示してください。
Role: Assistant Content: <thinking>
<thinking> - 太郎君は算数が得意だが、理科についての情報はない。 - 花子さんは国語が得意で、算数が苦手。理科についての情報はない。 - 次郎君は理科が得意だが、算数についての情報はない。
質問の前半部分「理科が得意なのは誰ですか?」に答えるためには、次郎君に関する情報が重要です。
質問の後半部分「その人は算数が得意だと言えますか?」に答えるためには、次郎君の算数の得意・不得意に関する情報が必要ですが、与えられた情報にはありません。
</thinking>
<answer> 理科が得意なのは次郎君です。ただし、次郎君が算数も得意かどうかは、与えられた情報からは判断できません。 </answer>
考える時間を与える際の注意点
Claudeにステップバイステップで考えさせることで、応答の質を大幅に向上させることができますが、いくつか留意点もあります。
まず、Claudeが思考プロセスを出力することなしには、実際に「考える」ことはできません。つまり、Claudeに密かに考えさせて最終的な答えだけを返すようにすることはできないのです。
また、ステップバイステップの推論を促すと、Claudeの出力の長さが増加します。これは入力してからの待ち時間の長さに影響を与える可能性があるため、このテクニックを使用するかどうかを決める際には、このトレードオフを考慮する必要があります。
以上、Claudeに考える時間を与える方法とその重要性について解説しました。複雑な問題に直面した時は、ぜひClaudeにじっくり考えさせてみてください。より正確で洞察に満ちた回答が得られるはずです。
次回は、「Prefill Claude’s response」というテクニックについて解説します。お楽しみに!