你把 coding agent 設定檔裡的 model 欄位,從舊模型改成剛發表的新模型,其他一個字都沒動。跑原本那批任務,可能先看到編輯工具的呼叫被退回,接著是同一件事多繞了幾圈;規則檔裡當初為了壓住舊模型毛病而加的提醒,讀起來也像是多餘的。駕馭層(Harness,模型以外讓 agent 能做事並被控制的整套軟體)是照某個模型調出來的,換了模型,它不會自動跟上。
這篇整理四方的觀察:Cursor 的工程團隊、Flask 作者 Armin Ronacher、LangChain 的 Vivek Trivedy,以及 Anthropic。
快速回答 駕馭層(harness)是模型以外、讓 agent 能做事並被控制的整套軟體;換模型後,它可能在五處失靈:編輯工具的格式、工具參數的細節、對話中途切換、提示詞,以及替舊模型加的補丁。Cursor 給每個模型它訓練時用的工具格式;LangChain 2026 年 4 月報告,逐模型調整設定後,GPT 5.3 Codex 在多輪工具使用評測 tau2-bench 的一個子集上,成績從 33% 升到 53%。我的建議是把換模型當成一次發版:有可重跑的任務集,就逐處驗過再切換。
換模型後,駕馭層會在哪些地方失靈?
失靈集中在編輯工具的格式、工具參數的細節、對話中途換模型、提示詞與工具要逐模型調、舊補丁變成死重這五處。下表把四方的說法放在一起,每列的出處在後面各節。
- 模型訓練時用的編輯格式不同
- Cursor;LangChain
- 每個模型配它訓練時的工具格式
- 訓練環境養成的偏好(Armin 的假說)
- Armin Ronacher(調查 Pi 時)
- 開 strict 模式(平台強制參數合規格)
- 歷史由別的模型寫;快取按模型分開
- Cursor
- 一段對話固定一個模型,或交給子代理
- 各家提示指南的慣例不同
- LangChain;Cursor;Anthropic 文件
- LangChain 逐模型設定表(profile);Cursor 逐模型客製
- 補丁預設的模型缺陷後來消失
- Anthropic;Cursor
- 換模型時重新測試每個補丁
表 1 換模型時駕馭層的五種失靈(本站依下文來源歸納;「怎麼緩解」欄是各來源自己的做法,本站的建議在最後一節)。
圖 1 的四個實線接點,各有來源提到:編輯格式(Cursor、LangChain)、工具參數(Armin Ronacher)、提示詞(LangChain、Cursor、Anthropic 文件)、舊補丁(Anthropic、Cursor)。虛線的對話歷史只在同一段對話中途換模型時出現,說法來自 Cursor。
換模型後,編輯工具為什麼會出問題?
編輯格式和模型訓練時用的不同,就會多花 token、也多出錯,所以 Cursor 與 LangChain 都替每個模型換編輯工具。回到開頭那批任務,換完模型最先看到的,就是編輯工具的呼叫被退回。Cursor 在 2026 年 4 月 30 日的〈continually improving our agent harness〉(署名 Stefan Heule 與 Jediah Katz)裡寫:
"OpenAI's models are trained to edit files using a patch-based format"、"Anthropic's models are trained on string replacement." (Cursor, 2026-04-30)
文章接著說,兩種模型都能用兩種工具,但給它不熟的那種,會多花推理 token,也多出錯;所以 Cursor 的做法是 "we provision each model with the tool format it had during training."(給每個模型它訓練時用的工具格式)。
LangChain 的 Deep Agents 團隊在 2026 年 4 月 29 日的文章裡做了同一件事:替 GPT 5.3 Codex 的設定把預設的檔案編輯工具換成 apply_patch,並把 execute 工具改名叫 shell_command。
第二個例子來自 Armin Ronacher 2026 年 7 月 4 日的〈Better Models, Worse Tools〉。他從 coding agent Pi 的一則 issue 追查起,發現 Claude Opus 4.8 與 Sonnet 5 有時會在編輯工具的巢狀 edits[] 陣列裡,加進工具參數規格(schema)沒有定義的欄位,例如 requireUnique。編輯內容大多正確,但多出來的欄位讓 Pi 退回呼叫。他寫道,更舊的模型沒有這個現象。
在另一位使用者的一段對話紀錄(session)裡,他看到 Opus 4.8 約 20% 的呼叫失敗;把紀錄裡模型的思考區塊(thinking blocks)拿掉,失敗率降到一半。他對原因的說法是假說:
"My strongest hypothesis is that this is not random deterioration but a training artifact." (Armin Ronacher, 2026-07-04)
他的推測是,模型後訓練(post-training)時用的 harness 可能像 Claude Code 一樣,會悄悄吸收格式不對的呼叫,結果養成了鬆散的習慣;Claude Code 的編輯工具是扁平結構,Pi 的是巢狀。文中沒有證實這個因果。他實際有效的緩解是開啟 strict tool invocation(嚴格工具呼叫,由平台強制參數符合 schema),"eliminated it in my runs"(在我的測試裡消除了這個現象);他也提醒 strict 模式對工具定義的複雜度有上限。他並且說 "Fighting that prior is probably futile if you want to get the best model performance."(如果想讓模型發揮最佳表現,對抗它訓練養成的這種偏好大概白費力氣)。
工程上的意思: 這一類問題先從工具層排查,優先動的是工具定義與呼叫驗證。檢查方法是換模型後看工具呼叫的退回率,並且把「被退回的呼叫長什麼樣」存下來。
對話進行到一半換模型,會多付什麼代價?
中途換模型會遇到歷史不合與快取失效兩件事,Cursor 建議一段對話固定一個模型。這是開頭情境的分支:如果你在一段進行中的對話裡切換模型,而沒有去改設定檔,同一批任務會多付下面兩項代價。Cursor 的文章說,支援使用者在對話中途切換模型特別難,因為不同模型有不同的行為、提示詞與工具形狀。它列出的問題有兩個:
- 新模型得在另一個模型產生的對話歷史上使用工具,歷史對它來說 out of distribution(和訓練時看過的分布不同)。
- 快取按供應商與模型分開,換模型等於快取落空,第一輪又慢又貴。
摘要可以緩解,但文章指出,任務做到一半時摘要會漏掉重要細節。Cursor 的結論是:除非有理由,一段對話建議固定一個模型;需要另一個模型時,改派子代理,因為子代理從全新的 context 起頭。
提示詞也要逐模型調嗎?
提示詞與工具要逐模型調,LangChain 與 Anthropic 的文件都這樣說,Cursor 也說自己的做法包含逐供應商的提示詞。回到開頭的規則檔,當初為舊模型加重語氣的那幾句,換模型後就是要重新檢查的對象。LangChain 的 Vivek Trivedy 與 Mason Daugherty 在 2026 年 4 月 29 日的文章裡下結論:"A single harness can't be optimal for every model."(單一 harness 不可能對每個模型都最佳)。他們的做法叫 harness profile,像替每個模型各備一張設定表:可以覆寫 system prompt 的前後綴、工具的納入與命名,也能分別設定 middleware(夾在模型與工具之間的處理步驟)、子代理與 skills;換模型時,呼叫端的程式碼不必動。
他們在 tau2-bench(測多輪工具使用與遵循指令)的一個較難的子集上,報告了這組數字:
- 33%
- 53%
- 43%
- 53%
表 2 LangChain Deep Agents 的 profile 效果。來源:LangChain Blog, 2026-04-29。子集題數與重複次數文章未說明;profile 同時改了提示詞、工具與 middleware,無法分出哪一項貢獻最大。
Trivedy 在 2026 年 2 月 17 日另一篇文章裡寫過同樣方向的結果:模型固定為 gpt-5.2-codex,只改 harness,deepagents-cli 在 Terminal Bench 2.0 從 52.8 提高到 66.5。同一篇還提到,用 Claude Opus 4.6 測的是較早版本的 harness,得 59.6%,作者形容為「有競爭力但不如 Codex」,原因是沒有替 Claude 跑同一套改進迴圈。
Anthropic 這邊,文件頁(查閱於 2026-10-23)寫到 Claude Opus 4.5 與 4.6 對 system prompt 更敏感:
"If your prompts were designed to reduce undertriggering on tools or skills, these models might now overtrigger." (Anthropic, Prompting best practices,查閱於 2026-10-23)
建議是把 "CRITICAL: You MUST use this tool when..." 這類強硬措辭降級成一般語氣。換句話說,原本為了防止漏用工具而加重的語氣,換到 Opus 4.5 或 4.6 上,可能讓模型過度呼叫工具。Cursor 的文章也提到,OpenAI 的模型在遵循指令上傾向更字面、更精確,並說它曾替一個出現「context anxiety」(context 快滿時開始拒絕工作)的模型,用提示詞修改減輕這個行為。
工程上的意思: 提示詞與工具設定要能按模型分開存放。LangChain 把差異收進 profile,Cursor 說自己的 harness 抽象與模型無關,但可以逐模型客製;兩者的共通點是模型專屬的部分單獨一層,換模型時只換那一層。
舊補丁什麼時候該拆?
補丁針對的模型缺陷消失後,它就變成死重;Anthropic 建議在模型變強時重新檢驗每個補丁的假設。開頭說規則檔裡那些壓舊模型毛病的提醒讀起來多餘,原因就在這裡。Anthropic Claude Platform 團隊的 Lance Martin 在 2026 年 4 月 2 日的文章裡寫:
"Agent harnesses encode assumptions about what Claude can't do on its own, but those assumptions grow stale as Claude gets more capable." (Lance Martin, Anthropic, 2026-04-02)
他舉的例子是 context anxiety:Sonnet 4.5 感覺到 context 快到上限時會提早收尾,團隊因此加了清空 context 的重置機制;換成 Opus 4.5,這個行為不見了,原文說那些重置 "had become dead weight in the agent harness"。文章把「現在可以停止做什麼?」(what can I stop doing)列為修剪的問題。
Cursor 也在拆。2024 年底它花了很多功夫做護欄,例如每次編輯後把 lint 與型別錯誤丟給 agent、限制單輪最多可呼叫的工具數;文章說這是兩種護欄,前者是替模型事先備好的資訊,後者是限制。文章說,事先固定塞給模型的資訊現在 "mostly long gone"(多半已經不在),改成讓模型需要時自己去取。
工程上的意思: 每個補丁至少要記兩件事:它針對哪個模型、壓的是哪個失敗。沒有這兩個欄位,換模型時就無從判斷該不該拆。
四方的說法哪裡一致,哪裡不同?
四方一致的地方是駕馭層的某些部分和模型綁在一起,換模型要重新檢查;不同的地方是遇到綁定後的應對方向。
- 每個模型配它熟悉的工具與提示
- Cursor;LangChain
- 平台強制參數符合 schema,模型不動
- Armin Ronacher
- 模型變強後重測並移除舊補丁
- Anthropic;Cursor
表 3 遇到綁定後的三種應對方向(本站歸納)。Armin 也認為對抗訓練留下的偏好大概白費力氣,所以他的結論接近「順著走」再加保證。
文中引用的數字都來自各自的環境,沒有第三方重現。Armin 的因果說法是假說;LangChain 的數字來自單一子集;Cursor 的文章沒有給失敗率。研究文獻也開始碰這個問題:Kyungmin Kim 等人的〈The Interplay of Harness Design and Post-Training in LLM Agents〉(arXiv,2026 年 6 月 24 日投稿,9 月 28 日修訂 v2)在擴充過的 ALFWorld 環境裡把 harness 當成可調變數。摘要寫的結果是:後訓練時把駕馭層設計納入考量,能改善模型在熟悉設定下的表現,也有助於適應沒見過的設定;如果後訓練只用最低限度的駕馭層,之後工具變動較大時,表現會明顯下降。這個實驗環境和商用 coding agent 差得遠,只能當方向參考。
換模型之前先做什麼?
把換模型當成一次發版,先驗過編輯工具、提示詞與補丁再切換。我的建議分三步,前提是你的 agent 已經有一批可重跑的任務:
- 用自己的任務在新模型上跑一遍,記兩種比率:工具驗證退回呼叫的退回率(工具層的問題),以及模型拒絕做事的拒絕率(像 context anxiety 那類行為問題)。前者是 Cursor 與 Armin 的問題最先顯示的地方。
- 把模型專屬的提示詞與工具設定拆成獨立一層,照 LangChain 的 profile 或 Cursor 的逐模型客製的方式;一段對話中途不換。
- 給每個補丁標上針對的模型與失敗,換模型時逐一比較保留與移除補丁的結果,只留下仍能避免該失敗的補丁。
沒有可重跑的任務集時,第一步做不了,先補任務集比先讀完這四方的文章更有用。
回到開頭那一行 model 欄位:改一個字很快,驗證要跑一輪。新模型上線後,先問哪個補丁已經用不到,再問哪個接點開始出錯。
下一篇把 12 個 Agent 框架放進同一張表,看 Deep Agent 派與從基礎打造派各內建了哪些能力。
常見問題
換模型後 agent 變差,要先看哪裡?
先看工具呼叫有沒有被退回,再看提示詞。Cursor 說格式不熟的工具會多花推理 token、多出錯;Armin Ronacher 在 coding agent Pi 裡看到 Claude Opus 4.8 與 Sonnet 5 在巢狀編輯參數裡加了不存在的欄位。這兩類都能從工具呼叫紀錄看出來,不必先猜模型變笨。
Strict tool invocation 能解決工具參數亂加欄位的問題嗎?
Strict tool invocation 由平台強制工具參數符合規格。Armin Ronacher 表示,在他自己的 Pi 測試裡,開啟後消除了參數亂加欄位的現象;他同時指出 strict 模式對工具定義的複雜度有上限。文章只報告了他的環境,換成別的工具結構是否一樣有效,文章沒有說。
一段對話可以中途換模型嗎?
可以,但有代價。Cursor 指出,新模型要接手另一個模型留下的對話紀錄,快取也會落空,切換後第一輪更慢更貴。它建議除非有理由,一段對話固定一個模型;需要別的模型時改派子代理(另開、帶獨立對話內容的 agent),讓它從全新的 context(模型這次讀到的全部內容)開始工作。
為舊模型寫的提示詞,換新模型後還要留嗎?
要重新測。Anthropic 文件說,Opus 4.5 與 4.6 對 system prompt 更敏感,原本為了防止漏用工具而加的強硬語氣,現在可能造成過度觸發(模型在不需要時也呼叫工具)。LangChain 的做法是把模型專屬的提示詞與工具設定收進 profile(逐模型設定表),每個模型各用一份。
延伸閱讀
- 新模型出來了要不要換?AI 功能答錯時,換模型多半沒用(2026 除錯懶人包)
- AGENTS.md 怎麼寫?規則寫越多,Agent 反而越貴?(2026 完整教學+範例)
- Multi-Agent Coding 是什麼?同時開很多個 Agent,真的會比較快嗎?(2026 完整解析)
參考資料
- Stefan Heule, Jediah Katz, Cursor, continually improving our agent harness(2026-04-30) https://cursor.com/blog/continually-improving-agent-harness
- Armin Ronacher, Better Models, Worse Tools(2026-07-04) https://lucumr.pocoo.org/2026/7/4/better-models-worse-tools/
- Vivek Trivedy, Mason Daugherty, LangChain, Tuning Deep Agents to work well with different models(2026-04-29) https://www.langchain.com/blog/tuning-deep-agents-different-models
- Vivek Trivedy, LangChain, Improving Deep Agents with harness engineering(2026-02-17) https://langchain.com/blog/improving-deep-agents-with-harness-engineering
- Lance Martin, Anthropic, Harnessing Claude's intelligence(2026-04-02) https://claude.com/blog/harnessing-claudes-intelligence
- Anthropic, Prompting best practices(文件頁,查閱於 2026-10-23) https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices
- Kyungmin Kim 等, The Interplay of Harness Design and Post-Training in LLM Agents(arXiv 2606.25447,2026-06-24 投稿,v2 2026-09-28) https://arxiv.org/abs/2606.25447
留言0
登入後就能留言。
登入