🤔

Claude3.7の拡張思考モード特有のプロンプトエンジニアリング

2025/03/13に公開

1. はじめに

こちらの記事のClaude版です。
Claudeの拡張思考モード(後述)特有のプロンプトエンジニアリングについてまとめておきます。

2. モデル自体の説明

Claude 3.7 Sonnetは、標準モード(Standard mode)と拡張思考モード(Extended thinking mode)を切り替えられるハイブリッドモデルです。標準モードでは、以前のClaudeモデルと同様に、内部的な推論を示さずに直接的な応答を提供します。拡張思考モードでは、最終的な回答を提供する前に、Claudeの推論プロセスが表示され、結論に至るまでの過程を把握できます。

Claude 3.7 Sonnetはより高度な指示遵守能力を示し、曖昧な要求に対してより適切な対応が可能です。また、アライメント偽装(※1)をしにくくなっています。
(※1)有害な要求への対応を拒否する代わりに、将来のトレーニングでの選好の変更を防ぐために、要求に従うふりをすること

3. 拡張思考モード に適したユースケース

拡張思考モードは、以下の領域で優れています。

  1. 複雑な分析: 複数のパラメータや要因を含む財務、法律、またはデータ分析
  2. 高度なSTEM問題:数学、物理学、研究と開発
  3. ロングコンテキスト処理: 広範な入力からの情報の処理と合成
  4. 制約最適化: 複数の競合する要件がある問題
  5. 詳細データ生成: 包括的な表または構造化された情報セットの作成
  6. 複雑な指示に従う: 複雑なシステムプロンプトと考慮すべき多くの要素を備えたチャットボット
  7. 構造化された創造的タスク: 詳細な計画、アウトライン、または複数の物語要素の管理を必要とする創造的な執筆

補足: プログラミング ∈ 高度なSTEM問題 です。

4. 👍 拡張思考モード 特有のプロンプトエンジニアリングでするべきこと

4.1. 一般的な指示から始めて、必要に応じて段階的に指示を追加する

Claudeは、最適な思考プロセスを人間が規定するよりも、タスクについて深く考えるという高レベルの指示の方が、より良いパフォーマンスを発揮しやすくなります。問題へのアプローチにおけるモデルの創造性は、人間が最適な思考プロセスを規定する能力を超える可能性があります。

必要な場合、Claudeは複雑な構造化された実行ステップにも効果的に従うことができます。モデルは以前のバージョンよりもさらに長いリストとより複雑な指示を処理できます。より一般的な指示から始めて、Claudeの思考出力を読み、そこから思考を導くためのより具体的な指示を提供して反復することをお勧めします

4.2. マルチショットプロンプティング(=few shot prompting)を活用

マルチショットプロンプティングは、拡張思考に適しています。クロードに問題を考える方法の例を提供すると、拡張思考ブロック内で同様の推論パターンに従うようになります。

問題の考え方を示す例を<thinking><scratchpad>のようなXMLタグを使って提供し、拡張思考のパターンを指示できます。Claude は、このパターンを正式な拡張思考プロセスに一般化します。ただし、Claude が最適と考える方法で自由に考えさせると、より良い結果が得られる可能性があります。

4.3. 長い出力と長文思考を最大限に活用する

拡張思考が有効で拡張出力機能(ベータ)を備えたClaudeは、大量のデータと長文テキストの生成に優れています。

データセット生成のユースケースでは、包括的なデータセットを生成するために「非常に詳細な表を作成してください…」などのプロンプトを試してください。

より詳細な拡張思考ブロックとより詳細な応答を生成したい詳細なコンテンツ生成などのユースケースでは、以下のヒントを試してください:

  • 最大拡張思考の長さを増やし、かつ明示的により長い出力を要求する
  • 非常に長い出力(20,000語以上)の場合、段落レベルまでの単語数を含む詳細なアウトラインを要求する。その後、Claudeにアウトラインに対して段落をインデックス化し、指定された単語数を維持するよう依頼する

4.4. 十分なthinking budgetを与える

4.3のような長文思考を行う場合、Claudeに十分なthinking budget(思考予算)を与え、指示を完全に処理させます。
thinking token(思考トークン)に指定できる最小値は1024トークンであることを念頭に置き、タスクの複雑さに応じて予算を調整します。

4.5. 一貫性とエラー処理を改善するためにClaudeに作業を振り返らせ、チェックさせる

一貫性を向上させ、エラーを減らすために、シンプルな自然言語プロンプティングを使用してください

  1. タスクを完了する前に、簡単なテストで作業を検証するようClaudeに依頼する
  2. 前のステップが期待された結果を達成したかどうかを分析するようモデルに指示する
  3. コーディングタスクの場合、拡張思考でテストケースを実行するようClaudeに依頼する

4.6. 英語での利用を推奨

拡張思考は英語で最高のパフォーマンスを発揮します。最終的な出力はClaudeがサポートする言語で出力できます。

5. 👎 拡張思考モード 特有のプロンプトエンジニアリングですべきでないこと

5.1.Chain-of-thought (CoT) のガイダンスをプロンプトに含めない

Claude 3.7 Sonnetの思考能力は、明示的な推論指示なしで効果的に機能するように設計されているため、CoTのガイダンスは不要です。
代わりに、まずClaudeの自然な思考プロセスを観察し、その観察に基づいてプロンプトを調整してください。

5.2 旧モデルで使用していたモデル固有のガイダンス(冗長性の処理に関する指示など)を削除する

Claude 3.7 Sonnetは以前のバージョンよりも少ない指示で動作するため、これらの指示は不要となり、トークンを節約しコストを削減できます。

5.3. thinking budgetが1024トークン未満の場合、拡張思考モードを使用しない

thinking budgetには最小予算(1024トークン)が設定されています。
1024未満の場合、標準モードを使用し、XMLタグ(<thinking> など)を使用した従来のchain-of-thoughtプロンプトを使用することを検討してください。

5.4. 各種パラメタに関連するすべきでないこと

プロンプト入力時にはあまり気にする必要はないので、折りたたみ

5.4.1. 拡張思考が有効になっている状態で、assistant レスポンスにテキストを事前入力しない

拡張思考が有効になっている場合、標準のassistantレスポンスのテキストの事前入力は許可されていないため

5.4.2. temperaturetop_ptop_k の変更、および強制的なツール使用を拡張思考と組み合わせて使用しない

これらのパラメータは拡張思考とは互換性が無いため

5.4.3. 32Kを超える思考予算でリクエストを送信する際に、バッチ処理を使用しない
理由:32Kを超える思考予算は、システムタイムアウトやオープン接続制限に達する可能性のある長時間実行リクエストを引き起こす可能性があります。

5.4.4. 思考パラメータ(有効/無効の切り替え、または予算の変更)を変更したときに、メッセージに設定されたキャッシュブレークポイントが無効になることを考慮しない

思考パラメータの変更はキャッシュに影響を与える可能性があるためです。
ただし、システムプロンプトとツールは、思考パラメータが変更されてもキャッシュを維持します。

5.4.5 Claude 3.7 Sonnetより前の旧バージョンのClaudeモデルでの動作を前提として、コンテキストウィンドウのサイズを無視して max_tokens を設定する

Claude 3.7 Sonnetでは、プロンプトトークンとmax_tokensの合計がコンテキストウィンドウサイズを超えると、システムは検証エラーを返します。

補足: 旧バージョンのClaudeモデルでは、プロンプトトークンとmax_tokensの合計がモデルのコンテキストウィンドウを超えた場合、システムは自動的にmax_tokensを調整してコンテキスト制限内に収めていましたが、Claude 3.7 Sonnetでは、max_tokens(思考が有効な場合は思考予算を含む)は厳密な制限として適用されます。

余談

Claudeで拡張思考モードを使うとき、つまり、reasoning modelの側面があるときは、o1, o3-miniと同じく、これまでよりシンプルなプロンプトであっても良い結果が得られやすいというところは共通しているように思います。

参考文献

Discussion