Anthropicは、Claude開発者向けドキュメントにベータ機能「メッセージ単位の effort 指定」を追加した。開発者はマルチターン会話の途中に専用の system メッセージを差し込み、以降の回答の推論レベルを high から low へ、あるいはその逆へ切り替えられる。リクエスト最上位の effort 設定には触れずに済み、すでにキャッシュされている会話の先頭部分も引き続きヒットする。
ドキュメントに示された書き方は短い。messages 配列に role が system、content が空配列のメッセージを加え、その中に output_config.effort の新しい値を置き、リクエストヘッダーに mid-conversation-output-config-2026-07-01 を付ける。サンプルでは最上位の effort を high にし、モデルがまず高レベルで SQLite から PostgreSQL への3ステップの移行計画を立てる。その後に low の system メッセージを挿入し、ユーザーが計画を1文にまとめるよう求めると、このターンは低レベルで回答される。
新しいレベルはどのターンから有効になるか
いつ切り替わるかはメッセージを置く位置で決まり、規則はかなり細かく書かれている。
- 新しい入力を含む user メッセージの直後に置いた場合、Claude はそのターンの回答から新しいレベルを使う。
- それ以外の位置、たとえば assistant の返答と次の user メッセージの間に置いた場合は、次に新しい入力を含む user メッセージから新しいレベルになる。
- tool_result だけを含む user メッセージは新しい入力とみなされないため、ツール呼び出しが数往復しても切り替えは起きない。
新しいレベルは、後続の別のメッセージが変更するまで有効が続く。ドキュメントは、このメッセージを送信済み内容の末尾に置き、以降のリクエストでもそのまま残すよう特に注意している。すでに送った過去のターンの前に差し込んだり、後から動かしたり削除したりしてはならない。保持される思考(preserved thinking)に対応するモデルでは、こうした変更を行うと、そのメッセージ以降の assistant ターンにある思考ブロックが無効になる。
エラーの扱いも明記されている。ベータヘッダーなしで system メッセージに output_config を書くと、「Extra inputs are not permitted」というメッセージとともに 400 が返る。ヘッダーを付けても、Claude Fable 5 のように未対応のモデルでは同じく 400 になる。between_tools の思考モードを有効にした Sonnet 5.5 や、思考をオフにした Haiku 5.5 でも途中のレベル変更はできず、ドキュメントはこの2つの場合には適応型思考(adaptive thinking)を使うよう勧めている。
従来の方法と、なくなる手間
effort はもともとリクエスト単位のパラメーターで、リクエストの最上位に書くものだった。同じ会話で前半はじっくり考え、後半は素早く答えさせたい場合、2回のリクエストの間で最上位の値を書き換えるしかなかった。この方法についてドキュメントの評価は率直で、最上位の値を変えるとプロンプトキャッシュが最初から計算し直しになり、それまでに積み上げた長いコンテキストがキャッシュミスとして再課金されるという。
"A per-message change leaves everything before it unchanged, so the cached prefix still matches."(メッセージ単位で変更すれば、それ以前の内容は一切変わらないため、キャッシュされたプレフィックスは引き続き一致する。)
見落とされやすい点もドキュメントは挙げている。Claude Fable 5.1 では、最上位の値を変えてもモデルを誘導する効果自体があまり確実ではない。それまでの返答が旧レベルで書かれているため、モデルが自分の過去の文体に合わせようとするからだ。メッセージ単位の切り替えは「ここから切り替える」という指示を会話そのものに書き込むので、モデルはその転換点を認識できる。
最も実用的なのは、長時間動くエージェントのループだ。コーディングエージェントは、コードベースを読んで修正方針を決めるまでは高レベルで進め、その後の数十ターンの実行と確認は低レベルで回す。その間コンテキストの先頭部分は変わらないので、キャッシュヒット率に影響はない。これまでは「レベルの柔軟さ」と「キャッシュのお得さ」のどちらかを選ぶしかなかったが、両方を取れるようになる。
カスタマーサポートやQ&A系のアプリでも使える。会話の冒頭でユーザーが複雑な不具合を説明し、モデルが高レベルで診断する。原因が絞り込めた後にユーザーが「2番目の手順は具体的にどこを押すのか」と聞くだけなら、低レベルに下げて答えさせれば応答はかなり速くなる。逆に、雑談の途中でユーザーが突然契約書を持ち込み、条項ごとの確認を求めた場合は、アプリが一時的にレベルを引き上げられる。こうした切り替えは従来、キャッシュを諦めるか、そもそも切り替えないかのどちらかだった。
対応範囲
モデルでは、Fable 5.2、Mythos 5.2、Fable 5.1、Mythos 5.1、Opus 5.5、Opus 5、Sonnet 5.5、Haiku 5.5 がベータの対象一覧に入っており、対応するクラウドプラットフォームはモデルごとに完全には一致しない。プラットフォームでは、Claude API、Amazon Bedrock、Claude Platform on AWS、Google Cloud の2種類のマネージド提供形態、Microsoft Foundry がいずれもベータと表示されている。Bedrock の InvokeModel インターフェースを使う開発者は、ベータの値をリクエストヘッダーではなく、リクエストボディの anthropic_beta 配列に書く必要がある。
Managed Agents は現時点で対応しておらず、ドキュメントが示す代替策は、セッション単位でエージェントのモデル設定を上書きする方法だ。機能はまだベータ段階で、ベータヘッダー名に含まれる日付はAPIのバージョン識別子である。正式版の公開後に表記が変わるかどうかについて、ドキュメントは触れていない。
参考資料:Claude 開発者ドキュメントの Per-message effort ページ(ベータヘッダー名、対応モデルとプラットフォームの一覧、有効になる位置の規則、エラーメッセージを確認)、CocoLoop、Claude 開発者ドキュメントの effort パラメーター解説。