Claude Opus 5.5 發布後,為什麼不能再靠 tool_choice 強制出 JSON?從 breaking changes 到 JSON Schema

截至 2026 年 9 月 24 日:Opus 5.5(9 月 22 日)不是換模型字串就完事。thinking 關不掉;tool_choice 的 any/tool 回 400。靠強制工具出 JSON 的流水線,必須改走 auto + strict + JSON Schema,或 Structured Output。

先給結論:Opus 5.5 不是把模型字串換一下就完事。2026 年 9 月 22 日,Anthropic 發布 Claude Opus 5.5(claude-opus-5-5)。價目表好看:輸入 / 輸出 $4 / $20,比 Opus 5 低 20%;快取讀 $0.20,低 60%。官方說典型工作負載大約省 40%。同一天 OpenAI 把 GPT-6 Sol / Luna 砍到半價。真正會炸生產的,是四處硬失敗:thinking 關不掉;tool_choice 的 any / tool 返回 400;thinking 塊綁模型和對話;Claude API 與 Google Cloud 拒收 computer_20251124。以前靠「強制工具呼叫」保證出一份 JSON 的流水線,現在必須改走 auto + strict: true 的 JSON Schema,或 Structured Output。

這篇按 2026 年 9 月 24 日寫,依據 Anthropic 當天仍有效的模型頁與「What's new」。本站已有《Tool Calling 為什麼依賴 JSON Schema》《Structured Output 是什麼》《Agents API 之後為什麼更需要 JSON》。本文只回答:換到 5.5 之後,JSON 合約哪一層要改。

9 月 22 日發了什麼

Claude Opus 5.5 是 Claude 5.5 家族的第一檔。官方定位:長跑 Agent 編碼與知識工作。模型 ID 在 Claude API、Google Cloud、Microsoft Foundry 都是 claude-opus-5-5;Bedrock 是 anthropic.claude-opus-5-5。退役承諾不早於 2027 年 9 月 22 日。Sonnet 5.5 與 Haiku 5.5「未來幾周」才來。

價目(每百萬 token):輸入 $4、輸出 $20、5 分鐘快取寫 $5、1 小時快取寫 $8、快取讀 $0.20。批處理半價。Fast mode 僅 Claude API:speed: "fast" 加 fast-mode-2026-02-01,輸入 / 輸出 $8 / $40,官方寫最高約 2.5 倍速度。預設 effort 是 medium——Opus 5 預設是 high。漏寫 effort,行為會變,不是無聲相容。

公告裡的基準表把 Terminal-Bench 4.0 寫成 66.4%(相對 GPT-6 Astra 的 57.9%)。Anthropic 自己也說:到這個能力檔,分差不如真實任務可靠;和 Fable 5.1 的體感差距比分數窄。這篇不拿排行榜當選型依據。

四處硬失敗,一張表

文件把「換成 5.5 就 400」的請求列得很清楚。前三條對 Fable 5.1 同樣成立:

舊寫法5.5 上會怎樣該改成什麼
thinking: {"type": "disabled"} 或 enabled + budget_tokens400 invalid_request_error省略 thinking,或 {"type": "adaptive"};深度用 effort
tool_choice: {"type": "any"} 或 {"type": "tool", "name": "..."}400;token 計數介面同樣驗auto(或 none)+ strict: true,或 Structured Output
改 system / tools / 更早訊息後再回放 thinking 塊2026-08-31 之後開的賬號預設 400對話只追加;改指令用中途 system 訊息,不要改歷史
Claude API / Google Cloud 上的 computer_20251124400computer_toolset_20260801;Bedrock 仍收舊工具

還有一處不報錯但會靜音:工具呼叫之間的短說明,改走 thinking 塊。預設 display: "omitted" 時空文字。靠流式「中間句」當進度條的介面,會突然沒聲。要進度,設 thinking.display。

為什麼不能再靠 tool_choice 強制出 JSON

2024–2025 年的常見補丁是:定義一個「提取」工具,把 tool_choice 設成 any 或點名那把工具,模型就不得不交一份 input_schema 裡的物件。程式讀 tool 的 arguments,不再 JSON.parse 聊天正文。這條路在 5.5 上直接 400:

tool_choice: type "tool" and "any" are not supported for this model.

官方替代不是「再寫一句請輸出 JSON」。替代是:tool_choice 留 auto,工具定義開 strict: true,用 JSON Schema 卡住參數;要固定形狀的最終答覆,把 Schema 放到 Structured Output。想讓模型傾向調工具而不是用散文回答,把「何時該調」寫進提示詞。提示詞影響選哪把工具,不代替 Schema。

所以 5.5 並沒有讓 JSON 變次要。它拆掉了「強制呼叫」這根柺杖。柺杖一拆,合約必須自己站得住。原理見《Tool Calling 為什麼依賴 JSON Schema》。

auto + strict + JSON Schema

遷移後的最小形狀是:

{
  "model": "claude-opus-5-5",
  "tool_choice": { "type": "auto" },
  "tools": [
    {
      "name": "extract_order",
      "description": "Extract a confirmed order. Call when the user has named a sku and a quantity.",
      "strict": true,
      "input_schema": {
        "type": "object",
        "properties": {
          "sku": { "type": "string" },
          "qty": { "type": "integer", "minimum": 1 }
        },
        "required": ["sku", "qty"],
        "additionalProperties": false
      }
    }
  ]
}

strict: true 讓解碼階段按 Schema 收參數。缺欄位、型別錯、多出來的鍵,應在這一層被擋,而不是靠「強制呼叫」賭模型會交物件。最終答覆如果也要進程式,用 Structured Output,不要再解析助手句子。見《Structured Output 是什麼》《JSON.parse 為什麼失敗》。

中途改工具 Schema,5.5 支援用 inline-tools-2026-09-15 在對話中途的 system 訊息裡帶完整定義,而不去改請求頂層的 tools——這和「thinking 塊綁字首」是一套:歷史只追加,不改已經發出去的合約快照。

Thinking 關不掉,回灌也不能改

5.5 上 adaptive thinking 常開。再寫 disabled 或手動 budget_tokens,400。深度、延遲、費用用 effort:low / medium / high / xhigh / max。以前關 thinking 省 token 的地方,改降 effort。同一檔 effort,5.5 往往比 Opus 5 想得更多,尤其 xhigh 和 max。給 max_tokens 留出 thinking 的空間。

每個 thinking 塊記下是哪一檔模型寫的。5.5 能讀 Opus 5 及更早的 Opus / Sonnet / Haiku 塊,不讀 Fable / Mythos。反向:Fable 5.1 與 Mythos 5.1 在 Claude API 上能讀 5.5 的塊,別的模型不行。讀不了的塊會被介面丟掉再送給模型,請求仍 200,丟棄的塊不計費。要看見這次丟了什麼,加 thinking-binding-controls-2026-08-01,看頂層 input_transformations。

更狠的是字首繫結。2026 年 8 月 31 日 00:00 UTC 及之後開的賬號,預設檢查 thinking 塊之前的 system、tools、更早訊息有沒有被改過。改過再回放,400。這是 Fable 5.1 帶過來的 preserved thinking。不要回頭改歷史裡的工具 Schema 來「修合約」——那會讓整段 thinking 作廢。新工具用中途 system 訊息加;回灌時 thinking 塊原樣傳回。

computer_20251124 與進度條變安靜

Claude API 和 Google Cloud 上,5.5 只收 computer_toolset_20260801。還帶著 computer-use-2025-11-24 beta 頭和舊工具型別,400。Bedrock 繼續收 computer_20251124。瀏覽器工具、已經在用 toolset 的整合不用改。迴圈一側要處理成員 tool_use 塊、批次動作、結果上的 toolset_name。

工具呼叫之間的短句不再是 text 塊。預設省略顯示後,進度流沒了,也沒有報錯。這不是 Schema 問題,是讀塊時按位置而不是按 type。先按型別分流,再決定要不要開 thinking.display。

價目表旁邊還站著 Sol / Luna

同一天 OpenAI 發布 GPT-6 Sol(gpt-6-sol,$2 / $10)和 GPT-6 Luna(gpt-6-luna,$0.10 / $0.50),大約是 GPT-5.6 同檔的一半。Astra 仍是 $10 / $50。Luna 官方場景就是高流量、目標清楚的抽取和摘要——正是 JSON 流水線愛用的那一檔。價低不等於 Schema 可以鬆。

選型不要只看標價。Opus 5.5 的 40% 省錢,一半來自快取和「每任務更少 token」,不是價目表上的 20%。預設 effort 從 high 降到 medium,帳單和延遲都會動。換模型之前用同一份 Schema 跑一遍抽取,比對著發布會數字改路由更有用。GPT-5.5 仍按計劃在 10 月 14 日退出 ChatGPT / Work / Codex(API 不受這次退役影響);那是另一條產品線,不要和 5.5 的 breaking change 混成一次「全盤升級」。

換模型字串之前先核的四件事

  1. 搜 tool_choice。任何 any / 點名 tool 都改成 auto。要穩定 JSON,開 strict 並收緊 input_schema。
  2. 搜 thinking。刪掉 disabled 和 budget_tokens。顯式寫 effort。按 type 讀塊,thinking 原樣回灌。
  3. 搜 computer_20251124。Claude API / Google Cloud 換成 toolset。Bedrock 可以暫時不動。
  4. 回放與快取。8 月 31 日後的賬號不要改歷史裡的 tools / system。中途改 Schema 走追加訊息。compaction(compact-2026-09-04)可以在保留 thinking 有效的前提下換摘要塊,條件見官方 Compaction 頁。

用本機 JSON 工具看 Schema

把模型 ID 改成 claude-opus-5-5 之前,先在瀏覽器裡攤開三份文字:舊的 input_schema、一條曾經靠 tool_choice 逼出來的 arguments、你準備改成 strict 的那份 Schema。

  • JSON 校驗 — 文法是否合法;有 Schema 就一起核必填和多餘鍵。
  • JSON 格式化 — 展開壓成一行的工具定義,看 additionalProperties 有沒有寫。
  • JSON Diff — 對比「強制呼叫時的樣本」和「strict Schema 允許的最小物件」。

資料不離開瀏覽器。合約穩定了,再改模型字串。5.5 會換 effort、會多想、會拒收舊 tool_choice;你的欄位名和 required 不應跟著一起鬆。

常見問題 FAQ

只改 model 為 claude-opus-5-5 能上線嗎?

不能當預設。只要請求裡還有 thinking.disabled、budget_tokens、tool_choice 的 any/tool,或 Claude API 上的 computer_20251124,就會 400。

沒有強制工具,還怎麼保證輸出是 JSON?

tool_choice 用 auto,工具開 strict,input_schema 寫滿 required 並關掉 additionalProperties。最終答覆走 Structured Output。不要 JSON.parse 聊天正文。

thinking 關不掉,是不是帳單一定更貴?

不一定。價目更低,快取讀更便宜,官方稱典型負載大約省 40%。預設 effort 是 medium。用 effort 換深度,不要用 disabled 換帳單。

Fable 5.1 要不要一起改?

thinking 常開、禁止強制工具、thinking 塊繫結,Fable 5.1 已經有。computer_20251124 這條主要打在 Claude API / Google Cloud 的 5.5 上。Bedrock 仍收舊計算機工具。

進度條為什麼突然沒了?

工具之間的短句改走 thinking 塊,預設 display 省略文字。按 type 讀塊,需要進度就設 thinking.display。這不是 Schema 校驗失敗。

和 10 月 14 日 GPT-5.5 退役是一回事嗎?

不是。GPT-5.5 退出的是 ChatGPT / Work / Codex,API 不受那次退役影響。Opus 5.5 是另一家的新模型加 breaking change。兩條線分開遷。

總結

Opus 5.5 把「強制工具呼叫」從合法柺杖收成了 400。價目表和 40% 的典型省錢,蓋不住四處硬失敗。要穩定 JSON,走 auto + strict + JSON Schema,或 Structured Output。thinking 常開、塊綁對話、舊計算機工具在部分平臺作廢——這些都是換字串之前的清單,不是上線之後的觀察。

先在本機校驗工具裡把 Schema、樣本 arguments、strict 合約看平,再改 claude-opus-5-5。模型會換,effort 會調;你的欄位合約不應跟著一起鬆。