Claude API 預填充(prefill)不能用了怎麼辦:替代寫法改造提示詞(結構化輸出、直接指令、XML 標籤、續寫)
老代碼裏用「預填充 assistant 消息」來強制 JSON 開頭、跳過開場白或續寫被截斷的回答,升級到 Claude 4.6 及之後的模型後請求報 400 時用:把調用代碼貼給 Claude,讓它判斷每處預填充屬於哪種用途,並按官方給的替代方案逐處改寫。
Claude 對話模型通用
我的代碼在調用 Claude API 時使用了預填充(在 messages 最後放一條 assistant 消息,讓模型接着寫)。升級模型後需要去掉這種用法。請幫我逐處改造。 <code> [粘貼調用代碼] </code> 目標模型:[目標模型] 使用的 SDK 與語言:[SDK 與語言] 下游怎麼用返回結果:[下游如何使用結果] 請按下面的對照關係處理每一處預填充: <migration_map> A. 用來強制輸出格式(如以左花括號開頭逼出 JSON、限定分類標籤) → 優先改用結構化輸出(給定 schema);分類任務可改用帶枚舉字段的工具或結構化輸出;也可以先直接要求按指定結構輸出,並在代碼裏加校驗和重試。 B. 用來去掉開場白(如預填「以下是摘要:」) → 在 system 提示詞裏直接說明:直接給出結果,不要以「以下是」「根據」之類的話開頭;或要求把結果放進指定的 XML 標籤,由代碼截取;偶爾漏網的開場白在後處理裏去掉。 C. 用來接着寫被截斷的內容或續寫 → 把續寫要求放進 user 消息,並附上被截斷回答的結尾原文,說明「上一次回答在這裏中斷,請從這裏繼續」;如果只是錯誤重試、對體驗無影響,直接重新請求。 D. 用來在長對話裏反覆提醒角色或注入上下文 → 把提醒內容放進 user 消息,或通過工具、上下文整理機制提供。 E. 用來規避不必要的拒答 → 去掉預填充,在 user 消息裏把任務背景和合理用途寫清楚即可。 </migration_map> 輸出: 一、清單:代碼位置 | 原預填充內容 | 屬於 A–E 哪一類 | 採用的替代方案 | 改動風險。 二、改造後的完整代碼(保持原有業務邏輯,只改與預填充相關的部分),以及需要同步修改的 system 提示詞。 三、下游解析代碼需要相應調整的地方(例如原來靠拼接預填充的左花括號才能解析)。 四、建議的迴歸測試:用哪些輸入驗證改造前後輸出一致。 不確定某處預填充的意圖時,先問我,不要猜。
高亮處換成你自己的內容:[粘貼調用代碼]、[目標模型]、[SDK 與語言]、[下游如何使用結果]
Claude Pro 充值
已被複製 0 次
使用說明
背景事實(據 Anthropic 官方提示詞最佳實踐頁面,資料核對於 2026-10-10):從 Claude 4.6 系列模型開始,不再支持在最後一條 assistant 消息上做預填充,帶這種預填充的請求會返回 400 錯誤;更早的模型仍然支持,對話中間位置的 assistant 消息不受影響。官方的解釋是模型的指令遵循能力已經提高,多數預填充場景不再需要它,並給出了按用途分類的替代辦法——提示詞裏 <migration_map> 的五類就是據此整理的。
怎麼填變量:[下游如何使用結果] 很關鍵。很多老代碼會把預填充的 { 和模型輸出拼起來再解析,去掉預填充後這段拼接也得刪,否則會多出一個括號。[目標模型] 寫你要升級到的型號名,結構化輸出等功能的可用範圍以官方文檔對該型號的說明為準。
常見問題與調整:
- 改成直接指令後偶爾還有一句開場白 → 這是官方也提到的情況,穩妥的做法是讓結果進 XML 標籤或用結構化輸出,再加一層後處理。
- 分類任務輸出了標籤以外的詞 → 改用帶枚舉的工具定義或結構化輸出,比提示詞約束可靠。
- 只是想快速確認問題 → 先搜尋代碼裏 messages 數組末尾
role為assistant的地方,這些就是需要改的位置。
示例輸出
示例,僅供參考(Python,原代碼用預填充左花括號強制 JSON)
| 代碼位置 | 原預填充 | 類別 | 替代方案 | 風險 |
|---|---|---|---|---|
| extract.py 第 41 行 | {"role": "assistant", "content": "{"} | A | 改用結構化輸出並提供 schema;刪除末尾 assistant 消息 | 低;需同步改解析 |
下游調整:第 47 行 json.loads("{" + resp_text) 改為直接解析返回內容,不再手動補左花括號。
迴歸測試:取 30 條歷史輸入,比較改造前後各字段的取值是否一致,重點看缺失字段的表示方式有沒有變化。
同款作品
用這條提示詞做出來的作品;原作者會因此獲得積分
還沒有同款,來做第一個。


0 條評論
還沒有評論,來搶沙發~