部落格
可靠性與正式環境

發布於 更新於

Anshu 和 Arag

如何偵錯使用錯誤工具的 AI 代理

以 Markdown 閱讀

要偵錯 AI 代理使用錯誤工具的問題,先重建模型當時看見的確切工具清單與上下文,再於不執行任何內容的情況下測試選擇。許多失敗來自名稱、描述、引數結構重疊或缺少上下文,但追蹤也可能顯示工具選對了,只是結果有問題。

在能明確指出哪個階段失敗前,不要修改提示詞。

目前的 MCP 工具規格會向用戶端顯示名稱、描述、輸入結構描述及選用的輸出結構描述。這些都是可觀察的合約,因此在把問題歸因於模型內部推理前,應先檢查它們。

精確分類失敗

  1. 選擇錯誤: 另一項可見工具更符合工作。
  2. 引數錯誤: 選到正確工具,但 ID、enum、範圍或必填欄位錯誤。
  3. 過早呼叫: 代理在取得必要上下文或核准前,就使用了正確工具。
  4. 結果誤導: 工具正確呼叫後端,但回傳含糊、過期或格式不正確的回應。
  5. 執行不安全: 選擇有效,但工具背後的授權、冪等性或核准失敗。

這些問題需要不同的修正。當供應商在非同步工作完成前就回傳 ok,重新命名工具並不會解決問題。

取得確切追蹤與工具集

記錄模型及版本、系統提示詞、擷取的上下文、對話前綴、完整可見工具清單、工具定義、選定名稱、引數、結果、政策決策及下游成果。

完整清單很重要。只閱讀兩個可疑檔案,可能會漏掉由外掛或工作階段公開的第三項工具。失敗執行中根本無法使用的工具,不可能解釋這次選擇。

代理可觀察性指南說明如何使用追蹤連接工具選擇與後端副作用。

並列相似工具

[
  {
    "name": "list_files",
    "description": "List entries directly inside one directory.",
    "inputSchema": { "directory": "string" }
  },
  {
    "name": "search_files",
    "description": "Find files whose path or content matches a query across a directory tree.",
    "inputSchema": { "directory": "string", "query": "string" }
  }
]

這兩份描述說明不同的輸出與使用時機,結構描述也會強化差異。「處理檔案」與「尋找檔案」這類泛用描述,會讓模型自行猜測邊界。

檢查共用動詞、名詞、描述、範例、必填欄位及結果結構。如果兩項工具以不同供應商實作相同的使用者意圖,可行時應公開一項語意工具,再於後方選擇供應商。

讓引數符合工作語言

使用 order_id、customer_id 及 deployment_id,而不是三個毫無關聯的 id 欄位。加入 enum、格式、範圍與描述。從已驗證上下文取得租戶及使用者範圍,而不是要求模型提供。

如果工具需要代理不一定擁有的資訊,應說明先決條件,並回傳穩定的缺少上下文錯誤。可以考慮用另一項讀取工具取得識別碼,而不是接受猜測的自由文字值。

MCP 工具設計指南涵蓋有界限的輸入與結構化錯誤。

歸咎於選擇前先檢查結果

結果應告訴代理發生了什麼,以及下一步可以做什麼。回傳穩定狀態、資源或操作 ID,以及任何輪詢或核准要求。不要回傳完整供應商承載資料或泛用成功字串。

非同步工作應區分 accepted、running、completed 及 failed。建立仍在等待時回傳「已建立」,可能讓代理太早呼叫下一項工具。

建立選擇限定評估

凍結模型、提示詞、工具清單與相關上下文,只要求選擇工具及引數,不允許執行。測試包含:

  • 每項工具明確的正向案例;
  • 最接近兩項工具的易混淆案例;
  • 缺少必要上下文的請求;
  • 不該使用任何工具的請求;
  • 擷取內容中的惡意指示;
  • 原始失敗請求及去識別版本。

重複非確定性案例並回報試驗數。每次只修改一個合約元素,再重跑相同集合。如此才能判斷名稱、描述、結構描述或上下文變更是否改善選擇。

修改最小的失敗合約

重新命名含糊工具、縮小描述、加入先決條件、限制引數、拆開混合的讀寫操作,或合併無法區分的工具。當不相關工具造成衝突時,縮小該工作的可見集合。

真正跨越多項工具的工作流程政策,可使用系統提示詞指引。如果歧義存在合約內,就不要為每次過往錯誤不斷累積一次性規則。

只有選擇通過後才重新啟用執行

接著在隔離環境測試有效、無效、未授權、重複、中斷及政策控管的呼叫。模型選對工具,不代表工具本身安全。

下方提示詞會在建議變更前重建並分類失敗。它會關閉執行,因此可用來偵錯破壞性工具,而不會造成第二次事故。