Claude Media
Claude Sonnet 5.5のプロンプトガイド — 思考量の調整と症状別の文面

Claude Sonnet 5.5のプロンプトガイド — 思考量の調整と症状別の文面

Claude Sonnet 5.5のプロンプトで足す文面と消す文面を症状別に紹介。思考量の調整、前置き思考なし運用、ターン途中のユーザーメッセージ、検証の指示まで実例で扱います。

Sonnet 5.5のプロンプトは何を足し、何を消すか

Sonnet 5のプロンプトは、そのまま5.5でも動く見込みです。ただし挙動の癖は変わっています。低いeffortでは途中で確認を取りたがり、ユーザーの割り込みメッセージを注入攻撃と疑い、JSON回答では考えずに答えます。直し方は、システムプロンプトに短い文を足すか、古い指示を消すかのどちらかです。思考の量は、プロンプトの「考えすぎないで」ではなくeffortで決まります。

この記事は、症状ごとに使える文面を並べます。モデルの概要・料金・破壊的変更はClaude Sonnet 5.5とはにあります。ここでは、プロンプトの書き方と、それに関わる思考量の調整を扱います。

まず症状と対処の対応表です。

症状まず見る場所効く対処節
コーディングの途中で確認を求めて止まるまず見る場所止まったターンのeffort(low・mediumか)効く対処「終わるまで続ける」段落を足す節続けさせる文面
頼んでいないテスト・ドキュメントが増えるまず見る場所差分に依頼外のファイルがあるか効く対処「完了したら止めて報告」段落だけ足す節続けさせる文面
思考なし運用でJSONの答えが間違うまず見る場所thinkingの型と、ツールを渡したか効く対処adaptive thinkingと「考えてから答える」1行節JSON出力の節
長いターンで画面が黙るまず見る場所thinkingブロックの本文が空か効く対処進捗更新の指示とメッセージ用ツール節進捗更新の節
ユーザーの割り込みが無視されるまず見る場所割り込みがtool_resultの中にないか効く対処ユーザーの言葉をtool_resultの外へ置く節割り込みの節
テストを回さず「完了」と報告するまず見る場所トランスクリプトにテスト・ビルドの出力があるか効く対処検証を義務づける段落を足す節検証の節

途中で止まる・やりすぎる挙動は2つの段落で調整する

lowとmediumのエージェント系コーディングでは、作業の途中で確認を挟むことがあります。計画の確認を求める、自分で答えられる質問をする、複数パートの1つ目が終わったところで続行を尋ねる、といった動きです。効果が最も素直なのはeffortを上げる方法です。effortを変えたくないときは、次の2段落をシステムプロンプトに足します(英文例の訳です)。

ユーザーに頼まれたことがすべて終わるまで作業を続けること。ユーザーの返答なしには進めないとき、またはリスクのある操作の前でだけ確認する。
 
頼まれた作業が終わり、確認も済んだら、そこで止めて報告すること。頼まれていない機能・テスト・ファイル・ドキュメント・リファクタは足さない。有益だと思うなら、実行せず最後に提案として書く。

1段落目が「続けさせる」指示、2段落目が「範囲を守らせる」指示です。どちらも公式の英文例を日本語に直した文面で、訳は本記事の例です。

1段落目を足すと、lowとmediumでもモデルは最後まで作業を運びます。そのぶんセッションは長くなり、コストも増えます。危険な操作やもう戻せない操作についての自前のルールは、この段落では代替できません。別に残してください。

頼まれていない追加を止めたいときは2段落目だけ

Sonnet 5.5は、リポジトリの慣習に合うテスト・ドキュメント・小さな補助ファイルを、頼まれなくても足す傾向があります。どのeffortでも起き、高いほど多くなります。歓迎するチームは多いはずで、その場合は何もしなくて構いません。変更を依頼範囲に限りたいときだけ、2段落目を単独で足します。xhighとmaxでは、この段落が追加を減らし、変更全体も小さくなります。

xhigh・maxの過剰な再レビューを止める文面

xhighとmaxのSonnet 5.5は、タスクを終えたあとに自分でレビューと検証を回し始めます。ハーネスが許せば、サブエージェントも立てます。目に留まった周辺の修正まで済ませることもあります。この徹底ぶりは欲しいが、対象は依頼した作業に絞りたい場合は、次の文面が使えます(英文例の訳)。

頼まれた作業が終わり、チェックも通ったら、そこで止めて報告すること。自分から追加のレビューや堅牢化の作業を始めない。ユーザーがレビューを求めていない限り、レビュー用のサブエージェントも起動しない。より深いレビューが必要だと思うなら、最後にそう伝える。

maxでのコーディングの検証では、この文面でレビュー用サブエージェントが起動しなくなり、品質を変えずにセッションコストが約3分の1下がりました。メインエージェントが自発的に回すレビューは、減るものの完全にはなくなりません。日常的な作業はhigh以下で回すのが前提です。

「アイデアをください」で作り始めてしまうとき

「これで何ができるか見せて」のように範囲を決めない依頼では、アイデアだけ欲しいのにプレゼン資料や動画の制作に入ることがあります。依頼文で「まず案だけ」と書くか、次の1段落(英文例の訳)を足します。

ユーザーがアイデア・選択肢・計画を求めたときは、それだけを示して止まること。ユーザーが進めてよいと言うまで、何も作らず、何も変更しない。

Sonnet 5.5の思考量は、プロンプトでなくeffortで決まる

思考を減らしたいときも増やしたいときも、まず触るのはeffortです。文面で思考量を操作する方法は、次の節の理由で当てにできません。

effortの水準は、Sonnet 5と同じ名前でも思考の量が違います。Sonnet 5の設定を持ち越さず、自前の評価セットで振り直してください。出発点は、APIの既定のhighです。エージェント系やレイテンシ重視の用途では、よく定まった作業ならmediumから始めます。上げるのは、品質が足りないときだけです。xhighとmaxは、品質の向上を測れた作業に限ります。

前置き思考なしで動かすときにプロンプトから消すもの

思考を切っていた実装は、thinking: {"type": "between_tools"}に移します。Sonnet 5.5で最も低い思考設定で、high以下のeffort(low・medium・high)で受け付け、xhighとmaxでは400になります。移行の破壊的変更としての整理はClaude Sonnet 5.5とはにあるので、ここではプロンプト側の作業に絞ります。

import anthropic
 
client = anthropic.Anthropic()
 
response = client.messages.create(
    model="claude-sonnet-5-5",
    max_tokens=16000,
    output_config={"effort": "medium"},
    thinking={"type": "between_tools"},
    tools=tools,
    system=system_prompt,  # 「考えるな」系の指示は入れない
    messages=messages,
)

プロンプトについて要点は1つです。「考えるな」という指示は削ります。between_toolsのもとでそうした指示を残すと、モデルが内部用のXMLタグを可視の出力へ書き出しやすくなります。思考を減らしたいなら、指示ではなくeffortを下げる方法が向いています。medium以上では、挨拶にすら短く考えてから返します。システムプロンプトで「あまり考えないで」と頼んでも、思考量は確実には減りません。lowなら、単純な依頼の多くで思考を飛ばします。

返ってきた思考ブロックは触らずに戻す

between_toolsでも、ツール呼び出しの合間のメモが1〜2文を超えるとthinkingブロックとして返ります。中身は要約です。次のリクエストでは、それをassistantターンの残りと一緒に無加工で戻します。戻したブロックは、要約ではなくモデルが書いた全文のメモとして働きます。最初のコンテンツブロックがtextとは限らないので、レスポンスはブロックの型で読み分けます。

ツールなしの推論タスクには使わない

ツールを渡さないリクエストでbetween_toolsを使うと、モデルは考えずに答えます。数段階の推論が要る用途では、adaptive thinkingを使ってください。理由は次の節のとおりです。

effortを切り替えたいときは、cacheと思考の型を先に確かめる

effortは途中で変えられる前提で設計しがちですが、組み合わせに制約があります。

  • トップレベルのeffortをリクエスト間で変えると、プロンプトキャッシュが無効になる
  • ターン単位で変えたいときは、cacheを保つper-message effort(ベータ、mid-conversation-output-config-2026-07-01ヘッダー)を使う。ただしadaptive thinkingが前提
  • between_toolsのまま、いまのeffortと異なるper-message output_config.effortを送ると400になる

たとえば対話セッションをlowで回し、難問が来たターンだけhighに上げる運用は、adaptive thinkingでなければ組めません。between_toolsに寄せたあとでこの運用を足そうとして初めて400に当たる、という順序になりがちです。あわせて、max_tokensは思考分を見込んで取ります。思考は内容を返さない設定でもmax_tokensに数えられ、エージェント的なコーディングでは上限の128,000とストリーミングが推奨されています。

JSONで答えさせる推論タスクは、考えさせる1行を足す

書類の数字を合計する、規則を当てはめる、項目を順位づける。こうした数段階の推論を伴う質問にJSONで答えさせると、Sonnet 5.5は考えずに答えることがあります。lowとmediumで特に多く出ます。structured outputsを使う場合、レスポンステキストはJSONだけになります。モデルが筋道を立てられる場所は思考しかなく、思考を飛ばした分だけ精度が落ちます。

対処は3通りです。

  • adaptive thinkingを有効にし、システムプロンプトの末尾に1行足す
  • adaptive thinkingでeffortをxhighにする
  • between_toolsを使わない(ツールなしだと考えないため)

公式の英文はThink the problem through before you answer.です。日本語では次のように書けます(訳は本記事の例)。

答える前に、問題をじっくり考え抜くこと。

この1行で、モデルは答える前により頻繁に考えます。highでは精度がxhighに近づき、出力トークンの増加は控えめです。lowとmediumでも精度は上がりますが、highには届かず、トークンの増え方は大きくなります。xhighは、この1行なしでも最高精度でした。出力トークンはhighより増えます。

structured outputsのlowとmediumには、もう1つ落とし穴があります。まれに、思考がmax_tokensに達するまで続きます。high以上ではほぼ起きません。stop_reasonが"max_tokens"のレスポンスは、JSONとして読めても失敗として扱い、再試行してください。max_tokensの見積もりは、Sonnet 5でmax_tokensが途中で切れる問題と同じ考え方で、思考とJSONの両方が収まる額にします。

structured outputsが使えないときは、最後のJSONを拾う

プロンプトでJSONを頼む方式だと、モデルは本文で筋道を書いてから、末尾にJSONを置くことが多くなります。答えは大抵合っています。レスポンス全体をJSONとして読む実装が落ちるだけです。パーサー側の直し方は次の4段階です。

手順

本文からJSONを取り出す手順

  1. 1

    読む範囲を決める

    textブロックだけを読みます。stop_reasonが"max_tokens"なら、中身にかかわらず失敗として扱います。

  2. 2

    各`{`か`[`から読み取りを試す

    読み取りに成功したら、その値の末尾から再開します。内側の値を単独で数えないための手当てです。

  3. 3

    最後に見つかった値を採る

    本文の筋道や下書きのJSONより、末尾の最終回答を優先します。

  4. 4

    フィールドを確かめる

    期待するフィールドがそろっているかを見て、足りなければ1回だけ再試行します。

最初の{から最後の}までを切り出す方法は避けます。モデルが最終JSONの前に下書きを書くことがあり、その範囲には下書きも入るためです。次のコードは、この手順の実装例です(本記事の例で、公式のコードではありません)。

import json
 
def last_json_value(text: str):
    decoder = json.JSONDecoder()
    found, i = None, 0
    while i < len(text):
        if text[i] in "{[":
            try:
                value, end = decoder.raw_decode(text, i)
                found, i = value, end
                continue
            except json.JSONDecodeError:
                pass
        i += 1
    return found

もう1つ、JSONのスキーマにreasoningやthinkingのようなフィールドを置いて筋道を書かせる設計は避けます。5.5ではこの形がreasoning_extractionの拒否を招きうるためです(後述の「拒否はstop_reasonで受け、理由の指示を消す」)。筋道が欲しいなら、上の1行とadaptive thinkingで考えさせ、読むときは思考の要約ブロックから取ります。

レコードを1行ずつ並べる形式の答えでは、「空白・カンマ・改行だけで区切られた最後の連続」を採用する処理が別に要ります。この手順で、検証ではほぼすべてのレスポンスが使えるようになり、精度は変わりませんでした。代案はxhigh+adaptive thinkingです。作業が思考の側へ移り、JSONだけが返ることが大半で、出力トークンの合計はhighと同程度に収まります。

長いターンが無言に見えるときは、進捗更新を設計する

Sonnet 5.5は、ツール呼び出しの合間に、いま分かったことと次にやることをユーザー向けに書きます。1〜2文を超えるメモは、progress-updateのthinkingブロックで返ります。既定のthinking.displayでは、そのブロックの中身が空です。textブロックだけを描画するクライアントは、長いエージェントターンの間、黙って見えます。

表示するには、display: "updates"(ベータ、thinking-display-updates-2026-08-18ヘッダー)を指定します。between_toolsなら要約つきで返るので、displayは要りません。between_toolsにはdisplay・budget_tokens・block_bindingを併用できず、送ると400になります。

プロンプトの側では3つ手を打てます。

  1. 「最終回答まで途中の発見を溜めておけ」といった古い指示を消す
  2. 更新のタイミングを決めたいなら、システムプロンプトで指定する(最初のツール呼び出しの前に一言、終わりに短い振り返り、など)
  3. コード片や質問のような正確な文面をユーザーに見せたいとき用に、メッセージ送信用の簡単なツールを渡す

ツールを渡すときは、そのツールを「そうした内容専用」と指示します。ツール一覧が途中で変わらないよう、セッション最初のリクエストで宣言します。プロンプトキャッシュへの影響は、自動プロンプトキャッシュの挙動で確認できます。

ハーネスから催促するときの文面

それでも黙る時間が長いなら、ハーネス側で催促します。ユーザーへのテキストも進捗更新も出さないツール呼び出しの連続数を数え、たとえば5回続いたら、直近のツール結果の後ろに1ターン限りのリマインダーを足します。turn-scopedなシステムメッセージ(ベータ)として送る文面は次の文面です(英文例の訳)。

しばらくユーザーに何も伝えていない。いま何をしているかを短い言葉で伝えてから、作業を続けること。

催促を2〜3回送っても静かなままなら、それ以上は送りません。ツール結果の直後にハーネスの文面が頻繁に差し込まれると、モデルが注入攻撃を疑うからです。リマインダーは以降のリクエストでもmessagesに残します。挿入して後で消すのではなく末尾に追記する形なので、プロンプトキャッシュとpreserved thinkingは壊れません。highでメッセージ送信ツールがある条件では、この催促でモデルの更新頻度が上がり、最長の無言区間が短くなりました。タスクの品質に測定できる差は出ていません。

ターン途中のユーザーメッセージは、注入と誤認される置き方がある

Sonnet 5.5は、ツール結果などの読み込んだ内容に混じる悪意ある指示(間接プロンプトインジェクション)に耐えるよう訓練されています。その副作用として、本物のユーザーのメッセージを注入と疑うことがあります。ユーザーが作業中に打った言葉が、ツール結果の直後に置かれたmid-conversationのシステムメッセージや、tool_resultブロックの中に入って届くと起きます。モデルは「ツール結果にあなたを装った文が入っていました」とユーザーに告げ、そのメッセージを無視するか、確認を求めます。

きっかけになりやすいのは、次の実装です。

  • 各ツール結果の後にトークンの残量カウントダウンを付ける
  • 複数ステップのターンの途中でユーザーに送信を許す
  • 毎ステップ、ツール結果の後に指示や文脈を足す

どれも、ツール結果の直後に文面が来ます。カウントダウンや毎ステップの指示なら、ツール呼び出しのたびに起きえます。たまに送る1ターン限りのリマインダーは、頻度がずっと低くなります。自前のリマインダーで誤認が出たら、送る回数を減らします。

置き方で結果が分かれます。

くらべる

ユーザーの割り込みを置く場所

避ける

誤認されやすい置き方

ユーザーの言葉をtool_resultブロックの中に入れる。最も誤認が多い形です。ツール結果の直後に置いたmid-conversationのシステムメッセージも同じ危険があります。通知とユーザーの言葉を同じブロックに混ぜるのも避けます。

こちら

誤認されにくい置き方

tool_resultを運ぶuserメッセージの中で、最後のtool_resultの後ろにtextブロックとして足す。リマインダーなどの通知は、ユーザーの言葉の後ろに別のmid-conversationシステムメッセージとして置きます。

もう1点、途中入力ができる対話セッションでは、自前のトークンやバジェットのカウントダウンをツール結果の後に足さないでください。

割り込みを載せたuserメッセージの形は、次のようになります(構造の例です)。

{
  "role": "user",
  "content": [
    {"type": "tool_result", "tool_use_id": "toolu_01", "content": "…テスト結果…"},
    {"type": "text", "text": "ついでにREADMEの手順も直しておいて"}
  ]
}

tool_resultはtool_useと対にする必要があるので、textは必ずその後ろです。task budgets(ベータ)も似たカウントダウンを足しますが、この誤認を起こした例は確認されていません。タスクバジェットを設定した状態で誤認が出たら、バジェットなしでも試します。

検証の指示は、「本物のチェック」を定義して書く

Sonnet 5.5は、エージェント系コーディングで完了を報告する前に、たいてい自分の変更を確かめます。lowでは、その確認を飛ばして「終わりました」と報告することがあります。たとえば、依存関係が入っていないという理由でプロジェクトのテストを省きます。トランスクリプトにテストやビルドの出力が見当たらないまま完了報告が来るなら、次の段落(英文例の訳)を足します。

実行・ビルド・型チェックができるコードを変更したときは、完了を報告する前に、その変更を実際に確かめるチェックを回すこと。プロジェクトのテスト・型チェッカー・ビルド、または変更したコマンド自体を実行する。構文チェックだけのもの、起動に失敗したチェックコマンドは数えない。足りないのが宣言済みの依存関係だけなら、禁止されていない限り入れてよい。入れるのはプロジェクト自身のパッケージマネージャーとロックファイルで行う(例: npm install、pip install -r requirements.txt)。sudoやシステムのパッケージマネージャーは使わない。この環境で本物のチェックが回せないときだけ、変更を完了として報告する代わりに、どのチェックを回せなかったかと理由を伝える。

この段落は何を決めているのでしょうか。中身を分けると、次の4点です。

決めていること文面の対応部分
何を「本物のチェック」と数えるか文面の対応部分テスト・型チェック・ビルド・変更したコマンド自体の実行
数えないもの文面の対応部分構文チェックだけ、起動に失敗したチェックコマンド
足りないものへの対応文面の対応部分宣言済みの依存はプロジェクト自身のパッケージマネージャーとロックファイルで入れる
越えてはいけない線文面の対応部分sudoとシステムのパッケージマネージャーは使わない

最後の1文が、逃げ道を塞ぎます。回せないなら、どのチェックを回せなかったか、なぜかを書かせます。lowでこの段落を足すと、飛ばされたチェックや形だけのチェックは稀になりました。品質に測定できる差はなく、タスクあたりのコストは少し上がります。

Claude Codeで同じことをするなら、CLAUDE.mdに検証コマンドを具体名で書く形が使えます。段落の思想はそのままで、npm testやnpx tsc --noEmitのようなプロジェクト固有のコマンドを添えるだけです。これはこの記事の応用例で、公式の手順ではありません。効果はeffortごとに違うので、評価セットで測ってください。測り方はプロンプト評価の実践ガイドにあります。

検索させたいときは、抑制の文言を消す

チャットや知識労働では、料金・許可・必須条件のような変わりやすい細部を、検索せずに訓練知識から答えることがあります。まず、プロンプトの中の「ツールは本当に必要なときだけ使う」「ツール呼び出しは最小限に」といった文言を消します。そのうえで、検索ツールを渡している製品なら、次の段落(英文例の訳)を足します。

訓練時点から変わっている可能性のある細部は、自信があっても、検索ツールで確認すること。たとえば、何が許可されているか、何が必須か、何が課金されるか、といった点である。レポートや比較のような調査を伴う作業では、訓練知識で書かず、最新の情報源を集める。

リサーチ系とサポート系の製品で特に効きます。答えが最新の細部に依存するためです。

小さな実装上の注意3点

ツール名の大文字小文字とパラメータ名のずれ

宣言済みのツールを、大文字小文字だけ違う名前(Bashに対するbash)で呼ぶことがあります。既知のパラメータを少し違う名前で渡すこともあります。ハーネス側の対処は2通りです。1つは、一意に決まるなら大文字小文字が違っても受け付けること。もう1つは、is_error: trueのtool_resultで正しい名前を返すことで、モデルは次のターンで直すことが多くなります。プロンプトで叱るより、この2通りのほうが確実です。

複雑な画像には切り抜き・拡大・コード実行の手段を渡す

密度の高いグラフや技術図面は、切り抜き・拡大・コード実行の手段を渡すと読み取りが大きく改善します。グラフでは全effortで効きます。技術図面はhigh以上で効き、xhighとmaxで最大です。グラフについては、highでツールありのほうが、maxでツールなしより正確で、コストは小さくなりました。ツール定義の実例は、公式のcropツールのクックブックにあります。

拒否はstop_reasonで受け、理由の指示を消す

安全分類器が要求を断ると、通常のレスポンスにstop_reason: "refusal"が付き、stop_details.categoryにカテゴリ(cyber・bio・frontier_llm・reasoning_extraction・general_harms)が入ります。プロンプトの書き方として関係するのは、reasoning_extractionです。「回答に推論過程を含めて」と頼む指示は、この拒否を呼びます。

引っかかる形は、思い当たるより広く取る必要があります。公式は次の4つを挙げています。

  • 答える前に埋めさせる<thinking>・<reasoning>・スクラッチパッド欄
  • JSON出力やツール入力のreasoning・thinking・traceフィールド
  • モデルの私的なメモや、思考の経過ログ
  • 推論を一字一句、または全文で求める指示

文面はシステムプロンプトだけでなく、スキルやツール説明に書かれていることもあります。説明を求めるなら、短い説明・結果の根拠・実行した操作の要約という頼み方なら問題ありません。この拒否には推奨のフォールバック先がなく、リトライより文面の書き換えが解決策です。費用も無視できません。出力が出る前のこの拒否は、通常のリクエストと同じ料金で課金されます(bioとfrontier_llmも同様で、それ以外のカテゴリは課金されません)。課金されない拒否も、レート制限には数えられます。古いプロンプトの「推論を書き出して」が毎回拒否されると、成果のない費用が積み上がります。

消したうえで、推論はadaptive thinkingの要約ブロック(display: "summarized")から読みます。server-side fallbackの再試行範囲は、cyberとfrontier_llmだけです。カテゴリごとの扱いはreasoning_extraction拒否とfallback設計にあります。

5.5のプロンプト調整は、足すより先に消す作業になる

足す文面は短いのに、消すべき文面が毎回出てきます。消す対象と、残すと起きることは次のとおりです。

棚卸し

消す文面と、残すと起きること

  • 「ツール呼び出しは最小限に」

    必要な検索まで減り、訓練知識で答えます。

  • 「途中の発見は最終回答まで溜める」

    進捗更新が消え、長いターンが黙ります。

  • 「考えるな」

    内部のXMLタグが可視の出力に出ます。

  • 「推論を回答に含めて」

    reasoning_extractionの拒否が返ります。

  • ツール結果の後に毎回足す文面

    ユーザーの言葉を注入と誤認します。

古いモデルのために書いた予防線が、5.5では副作用に変わります。

まとめ

足す文面はどれも出発点にすぎません。移行の順番としては、5項目の棚卸しに当たる古い指示を外してから、足す文面を選ぶ流れになります。

参照した一次ソース

この記事の記述は、次の一次ソースと照合しています。更新時に参照先が変わった場合は一覧も更新します。

  1. platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-cla…
  2. platform.claude.com/docs/en/models/sonnet-5-5/migration-guide
  3. platform.claude.com/docs/en/build-with-claude/refusals-and-fallback
この記事を共有:XはてブLinkedIn