1. はじめに
近年、LLM(大規模言語モデル)の進化により、複雑な問題解決が可能になってきました。
特にプロンプトエンジニアリングの手法は日々進化しており、多段階の思考プロセスを通じて高精度な出力を導くアプローチが注目を集めています。
本記事では、Anthropic社のClaudeを例に、Extended Thinking(拡張的思考モード)を活用する際の技術的な考慮点やプロンプティング手法のベストプラクティスを整理します。
上記URLの解説として、自分の解釈を混ぜた記事となっています。
正確な内容については、上記URLをご確認ください。
2. Prompt Engineering の基本概念
Prompt Engineeringとは、LLMに対して最適な入力(プロンプト)を設計し、モデルが適切な文脈や思考プロセスを経て、求める出力を返すように導く技術のことです。
- 一般指示:モデルに対し、大まかで包括的な指示を与える手法
- 段階的指示:手順を細かく指示し、ステップバイステップで解を導かせる手法
どちらのアプローチを用いるかは、タスクの種類やモデルの特性に応じて柔軟に使い分ける必要があります。
3. Extended Thinkingの概要とメリット
Extended Thinkingは、LLMが問題をステップバイステップで解く過程を“Thinking”部分で明示しながら、最終的な回答を作成するモードです。
- 思考プロセスの可視化:モデルがどのように問題にアプローチしているのかを確認できる
- 複雑なタスクへの対応力向上:段階的な検討を通じて、より難度の高い問題にも対応しやすくなる
- デバッグや指示修正が容易:思考途中の段階で、誤ったアプローチに対して追加指示を与えることが可能
Extended Thinkingと標準モードを使い分ける基準はタスクの複雑さなどによります。
4. 技術的考慮事項と設定のポイント
Extended Thinkingを利用する際、以下の技術的ポイントを把握しておくことが重要です。
-
Thinking tokens(思考トークン)の最小バジェット:1024トークン
- 必要最小限の思考容量として1024トークンを確保することが推奨されています。
- タスクの複雑性に応じて段階的に増減させるとよいでしょう。
-
32Kトークン超の思考負荷への対処:バッチ処理の推奨
- タスクによっては32Kを超える大規模思考が必要になる場合がありますが、ネットワーク制限やタイムアウトの問題を避けるためにバッチ処理を検討しましょう。
-
言語の選択
- Extended Thinkingは英語で最高の性能を発揮します。ただし、最終アウトプットはClaudeがサポートしている任意の言語で問題ありません。
-
思考バジェットが1024トークン未満の場合
- その場合は標準モード(thinkingオフ)で、チェーン・オブ・ソート(Chain-of-thought) に相当するプロンプト手法(例:XMLタグ<thinking>の利用)を推奨します。
5. 効果的なプロンプティング手法
・一般指示 vs. 段階的指示
-
一般指示
ClaudeなどのLLMには、はじめは大まかな指示を与えるほうが有効なケースがあります。モデルの創造的な思考を阻害せずに、複数の解法を考慮させられるメリットがあります。 -
段階的指示
もしモデルの思考プロセスを読んで微調整したい場合や、解き方が限定的なタスクには段階的指示が効果的です。はじめは一般指示で試し、うまくいかない場合に段階的指示へ移行する段階アプローチを推奨します。
・マルチショットプロンプティングの活用
マルチショット(Few-shot)プロンプティングを、Extended Thinkingと組み合わせることで、より高度な思考プロセスを実現できます。
-
XMLタグの活用
<thinking>
や<scratchpad>
タグを使用して、サンプルとして提示した思考プロセスを明示的に記述します。 - Claudeは提示されたパターンを参考に、自らのExtended Thinkingブロックでも類似の思考手順を踏んで解答を導きます。
例
ユーザー
数学の問題の解き方を教えるから、同じような問題を解いてほしい。
問題1:80の15%は?
<thinking>
80の15%を見つけるには
1. 15%を小数に変換する: 15% = 0.15
2. 掛ける: 0.15 × 80 = 12
</thinking>
答えは12である。
では、これを解いてみよう:
問題2:240の35%は?
上記のように思考プロセスをサンプルとして提示することで、類似問題の解法手順をトレースしやすくなります。
6. 長文出力と長期思考の最適化戦略
Extended Thinkingをオンにすると、Claudeはより多くのトークンを用いて深く考察できるだけでなく、長文出力にも対応しやすくなります。
-
大規模データセットの生成
「Please create an extremely detailed table of…」などのプロンプトにより、包括的で詳細なデータセットを生成することが可能です。 -
長文テキストや複雑な構成
20,000ワードを超えるような大規模テキストを生成する場合は、思考バジェットと出力バジェットの両方を充分に確保しつつ、段階的にアウトラインを作成→段階ごとに本文を書くという流れを推奨します。
しかし、闇雲に思考トークンを増やすのではなく、タスクに応じて最小限から少しずつ増やす手法が効率的です。
7. デバッグと検証の方法
デバッグと思考プロセスの修正
-
Extended Thinkingの思考部分を直接ユーザーから再入力しない
ClaudeのThinkingプロセスをそのまま再度ユーザー入力として返すと、モデルが混乱する可能性があります。思考の重複や誤学習が起こりやすいため非推奨です。 -
プリフィルは非推奨
Extended Thinkingがオンの状態でThinking出力を手動で調整することは推奨されていません。
設計的な検証フロー
モデルが出力した思考ステップを監視して、必要があれば追加指示を与えます。誤りを発見した場合は、同じ流れの中でモデルに再検証や修正を指示しましょう。
コード生成などの例
ユーザー
ある数の階乗を計算する関数を書きなさい。
完成する前に、以下のテストケースで解答を検証してください:
- n=0
- n=1
- n=5
- n=10
そして、見つかった問題を修正してください。
上記のようにテストケースを事前に指定し、モデルがThinking内で検証してから最終回答を出すことでエラーを減らすことができます。
8. まとめと今後の展望
Claudeやその他のLLMを用いたExtended Thinkingは、複雑な問題や大量の情報を扱う際に大きな可能性をもたらします。
- 短期的には:チェーン・オブ・ソート手法をはじめとした既存のプロンプト技術と組み合わせ、デバッグや思考の可視化を柔軟に行うのが最適です。
- 長期的には:トークン制限やバッチ処理への対応など、システム基盤の強化が進むにつれて、さらに大規模かつ複雑なタスクでも安定的かつ高速に処理できるようになるでしょう。
Extended Thinkingを使いこなすことで、LLMのポテンシャルを最大限に引き出し、より高度な問題解決や大規模データ生成が実現可能になります。
今後もプロンプトエンジニアリングの技術的革新とともに、この手法の活用領域は拡大していくと考えられます。
以下の記事も参考にしてみてください。