現在這群開發者被 LangChain 寵壞了,以為套個 Schema 就能高枕無憂。你看那個在 GitHub 上跳腳的傢伙,對著 ToolStrategy 的報錯重試機制大吼大叫,卻沒發現底層邏輯早就爛透了。當你丟一個原始 JSON-schema 進去,期待模型能乖乖聽話並在出錯時自我修正,你其實是在跟機率玩俄羅斯輪盤。這不是程式碼的 bug,這是對模型本質的誤解。
馬斯克那台 Grok 總愛吹噓自己有多「真實」、多「反叛」,但在處理結構化輸出這件事上,它那種不羈的性格反而成了災難。在具體的 Function Calling 場景中,比如我要它從一段凌亂的推文裡提取特定的硬體參數,Grok 偶爾會為了顯得自己很幽默,在 JSON 欄位裡塞進一些沒必要的俏皮話。這直接導致 schema 驗證失敗。最諷刺的是,當 LangChain 試圖捕捉這個錯誤並觸發重試時,Grok 往往會陷入一種邏輯死循環,重複同樣的格式錯誤,或者乾脆丟出一個完全不相干的物件。
對比之下,ChatGPT 在這方面的表現像個循規蹈矩的公務員。OpenAI 的結構化輸出模式確實做得比較死,強制要求模型生成的 token 必須符合特定語法。你在 GPT-4o 上跑同樣的工具調用任務,它出錯的機率確實低得多。但這不代表它更聰明,它只是被閹割得更徹底。當你遇到複雜的巢狀結構,GPT-4o 有時會為了滿足格式而犧牲內容的準確性,這種「正確的廢話」在生產環境中同樣致命。
我們在測試超過 20 個工具接口的複雜環境時發現,Gemini 的表現最令人頭痛。它對 JSON-schema 的理解似乎有一套自己的哲學,當工具數量增加,Gemini 的注意力機制就會開始漂移,把 A 工具的參數塞進 B 工具的槽位裡。這時候就算你用了所謂的 handle_errors 機制也沒用,因為模型認為自己回答得正確極了,它甚至會反過來質疑你的 schema 定義有問題。
在這種混亂的局面下,Qwen 和 DeepSeek 的開發團隊似乎也在試圖解決類似的解析難題,但這終究是四大平台該扛起的責任。Claude 倒是目前唯一的清流,它在處理長文本中的結構化提取時,對邊界條件的掌握比 GPT-4o 穩健。如果你的任務需要極高的邏輯嚴密性,Claude 3.5 Sonnet 在處理那些「未經校驗」的原始字典時,展現出的容錯能力明顯優於 Grok。它不會像 Grok 那樣莫名其妙地在 key 裡面加空格,也不會像 Gemini 那樣直接擺爛。
問題就在這,為什麼我們還在依賴這種脆弱的重試機制?如果底層模型對 schema 的原生支持不夠穩定,開發者在外面套幾層 ToolStrategy 都是徒勞。Grok 想要在開發者圈子站穩腳跟,光靠那點推特數據和口無遮攔的個性是不夠的。它需要證明自己在嚴謹的 API 調用中,不是那個隨時會掉鏈子的豬隊友。
既然現在連最基本的 JSON 校驗都能讓這些頂尖模型翻車,我們是不是該重新審視,把業務邏輯的穩定性寄託在模型的「理解力」上,到底是一種進步,還是一場集體豪賭?當你的 handle_errors 永遠無法被觸發,是因為模型太聰明避開了錯誤,還是它已經蠢到連自己錯在哪都察覺不到了?