はじめに
第1章と第2章の基礎をベースに、この章では複雑な推論タスクでLLMの性能を大幅に向上させる高度なプロンプト技術を扱います。これらの技術は2025-2026年時点でのプロンプトエンジニアリングの最先端を代表しています。
この章を終えると、以下のことができるようになります:
- 複雑な問題解決のためのTree of Thought(ToT)を実装する
- 回答の信頼性を向上させるためにSelf-Consistencyを使用する
- アクションを伴う推論のためのReActパターンを適用する
- 推論モデル(o1、o3、DeepSeek-R1)向けの効果的なプロンプトを作成する
- マルチターン会話フローを設計する
- 複雑なワークフローのためのプロンプトチェーンを構築する
Tree of Thought(ToT)
Tree of Thoughtプロンプティングは、LLMに複数の推論パスを同時に探索させ、各パスを評価し、最も有望な方向を選択させることを促します。計画、探索、または創造的な探求が必要な問題に特に効果的です。
Tree of Thoughtの仕組み
基本的なToTプロンプト
Tree of Thoughtの例
Tree of Thought推論を使用してこの問題を解決してください。
**問題**:農夫がオオカミ、ヤギ、キャベツと一緒に川を渡る必要があります。
ボートは農夫と1つのアイテムしか運べません。一人にされると:
- オオカミはヤギを食べる
- ヤギはキャベツを食べる
**手順**:
1. 3つの異なる初期の手を生成
2. 各手を評価(安全/危険と理由)
3. 最良の手を選択して続行
4. 解決するまで繰り返す
**各ステップの形式**:
```
手の選択肢 [N]:
- アクション: [何を渡すか]
- 手の後の状態: [誰/何がどこにいるか]
- 評価: [安全/危険] - [理由]
- スコア: [1-10]
```
ツリー探索を開始してください:
Self-Consistency
Self-Consistencyは、複数の独立した推論パスを生成し、最も一般的な回答を選択することで信頼性を向上させます。これにより、個々の推論エラーの影響を軽減できます。
Self-Consistencyプロンプト
この問題を5回、異なる推論アプローチを使用して解決してください。
その後、最も一貫した回答を報告してください。
**問題**:店ですべての商品に20%の割引があります。レジでさらに10%引かれます。
100ドルの商品で合計何パーセント節約できますか?
**アプローチ1**:順次パーセンテージ計算
[推論...]
回答1: ___
**アプローチ2**:最終価格から逆算
[推論...]
回答2: ___
...
**最終回答**: [最も一般的な回答]
**信頼度**: [一貫性に基づく]
ReActパターン
ReAct(Reasoning + Acting)は、LLMが問題についての推論とアクション(情報検索やツール使用など)を交互に行うプロンプティングパターンです。これはAIエージェントの基盤となります。
ReActパターンテンプレート
ReAct形式を使用して以下の質問に回答してください。
以下のアクションにアクセスできます:
- Search[クエリ]: Wikipediaで情報を検索
- Calculate[式]: 数学計算を実行
- Lookup[用語]: 現在のコンテキストで特定の用語を検索
**質問**: 2024年オリンピックを開催した国の人口密度は?
**形式**:
思考1: [最初に何をすべきかの推論]
アクション1: [アクション名][入力]
観察1: [学んだこと]
思考2: [次の推論ステップ]
アクション2: [次のアクション]
観察2: [結果]
... 回答が得られるまで続ける ...
最終回答: [観察に基づく回答]
開始:
推論モデル向けプロンプティング(o1/o3)
OpenAIのo1とo3モデル(およびDeepSeek-R1などの同様の推論モデル)は、応答前に内部「思考」トークンを使用します。これらのモデルは標準的なLLMとは異なるプロンプティング戦略を必要とします。
標準LLMとの主な違い
| 標準LLM(GPT-4、Claude) | 推論モデル(o1、o3、DeepSeek-R1) |
|---|---|
| 詳細な指示が有効 | 簡潔で明確な目標を好む |
| 明示的なCoTプロンプティングが必要 | 内部でCoTを実行(自動) |
| Few-shot例が出力を改善 | Few-shotは実際にパフォーマンスを低下させる可能性 |
o1/o3のベストプラクティス
推論モデル向けガイドライン
- 簡潔に:問題を明確に述べ、過度に説明しない
- 「ステップバイステップで考えて」と言わない:自動的に行う
- Few-shot例を避ける:推論を制約する可能性がある
- デリミタを使用:入力の異なる部分を明確に分離
- 出力形式を最後に指定:「最終回答を...として提供」
o1/o3向けの悪いプロンプト
あなたは専門の数学者です。ステップバイステップで考え、すべての作業を示してください。
類似の問題を解く方法の例を示します:
[長い例...]
この問題を慎重に解き、すべてのケースを考慮してください:
ランダムな5枚のポーカーハンドがちょうど1ペアを含む確率は?
問題:システムプロンプト、CoT指示、Few-shot例、過度の指定
o1/o3向けの良いプロンプト
ランダムな5枚のポーカーハンドがちょうど1ペアを含む確率を計算してください
(1つのランクのカード2枚、異なるランクのカード3枚)。
最終回答を約分された分数と小数(小数点以下4桁)として提供してください。
なぜ効果的か:簡潔な問題文、明確な出力形式、モデルが自由に推論できる
マルチターン会話設計
効果的なマルチターン会話の設計には、メッセージ間でコンテキストがどのように構築されるかを計画し、会話状態を管理することが含まれます。
会話フローパターン
ファネルパターン
広く始め、徐々に焦点を絞る:
ファネル会話
**ターン1(ユーザー)**: Pythonプロジェクトで助けが必要です
**ターン1(AI)**: 喜んでお手伝いします!教えていただけますか:
- どんな種類のプロジェクト(Webアプリ、データ分析、自動化)?
- どんな具体的な課題に直面していますか?
**ターン2(ユーザー)**: Webスクレイピングプロジェクトです。動的コンテンツで困っています。
**ターン2(AI)**: 動的コンテンツは通常JavaScriptレンダリングが必要です。
- どのWebサイトをスクレイピングしていますか?
- SeleniumやPlaywrightを試しましたか?
**ターン3(ユーザー)**: BeautifulSoupを使っています。コンテンツはAJAXでロードされます。
**ターン3(AI)**: BeautifulSoupはJavaScriptを処理できません。オプションは次の通り:
[AJAXコンテンツ向けの具体的な解決策...]
プロンプトチェーン
プロンプトチェーンは、一つのプロンプトの出力が別のプロンプトの入力になるように複数のプロンプトを接続します。これにより、単一プロンプトの能力を超える複雑なワークフローが可能になります。
ドキュメント分析チェーン
def analyze_document(document):
# ステップ1: キー情報を抽出
extraction_prompt = f"""
このドキュメントから抽出:
- 主要トピック(リスト)
- キーエンティティ(人物、組織、場所)
- 言及された日付と数値
- アクションアイテム(あれば)
ドキュメント:
{document}
JSONとして返してください。
"""
extracted = call_llm(extraction_prompt)
# ステップ2: 感情とトーンを分析
analysis_prompt = f"""
この抽出された情報に基づいて:
{extracted}
分析:
- 全体的な感情(ポジティブ/ネガティブ/ニュートラル)
- トーン(フォーマル/インフォーマル/緊急/ルーティン)
- 主な懸念事項や優先事項
JSONとして返してください。
"""
analysis = call_llm(analysis_prompt)
# ステップ3: エグゼクティブサマリーを生成
summary_prompt = f"""
以下を組み合わせてエグゼクティブサマリーを作成:
抽出情報: {extracted}
分析: {analysis}
"""
return call_llm(summary_prompt)
演習問題
演習1:Tree of Thought(難易度:中)
課題:以下の制約で東京への3日間の旅行を計画するためにTree of Thoughtを使用してください:
- 予算:合計5万円(航空券除く)
- 必須訪問:渋谷、浅草、1つの美術館
- 食事制限:ベジタリアン
演習2:Self-Consistency(難易度:中)
課題:以下を決定するためのSelf-Consistencyプロンプトを設計してください:
「企業がAIを使って求職者をスクリーニングすることは倫理的か?」
演習3:ReActパターン(難易度:中)
課題:以下ができる「リサーチアシスタント」のReActプロンプトを作成してください:
- 学術論文を検索
- 発見を要約
- 方法論を比較
- 研究ギャップを特定
演習4:推論モデルプロンプト(難易度:上級)
課題:このプロンプトをo1/o3向けに書き直してください:
あなたは専門のソフトウェアアーキテクトです。この問題について
ステップバイステップで慎重に考えてください。良いアーキテクチャの例を示します...
1日1000万ユーザーを処理するEコマースプラットフォーム向けの
スケーラブルなマイクロサービスアーキテクチャを設計してください。
演習5:プロンプトチェーン(難易度:上級)
課題:「コードレビュー自動化」のための4ステップのプロンプトチェーンを設計してください。
章のまとめ
重要ポイント
- Tree of Thought:複数の推論パスを探索、評価し、複雑な問題に最適なものを選択
- Self-Consistency:複数の回答を生成し、信頼性向上のため最も一般的なものを選択
- ReAct:推論とアクションを交互に実行;AIエージェントの基盤
- 推論モデル(o1/o3):簡潔なプロンプトを使用、CoT指示とFew-shot例を避ける
- マルチターン設計:会話フローを計画し、コンテキストを明示的に管理
- プロンプトチェーン:単一プロンプトの能力を超える複雑なワークフローのために複数のプロンプトを接続
次のステップ
第4章では、Function CallingとTool Useを探求します:
- Function Callingの基礎
- ツール定義とスキーマ設計
- MCP(Model Context Protocol)統合
- ツール使用のエラーハンドリング
- マルチツールオーケストレーション
参考文献
- Yao, S., et al. (2023). Tree of Thoughts: Deliberate Problem Solving with Large Language Models
- Wang, X., et al. (2023). Self-Consistency Improves Chain of Thought Reasoning in Language Models
- Yao, S., et al. (2022). ReAct: Synergizing Reasoning and Acting in Language Models
- OpenAI. (2024). o1 System Card and Prompting Guide
更新履歴
- 2026-01-12:v2.0 o1/o3プロンプティング戦略を含む初版リリース