為決策寫 schema,不為裝飾
每個 function 都要有明確名稱、能幫助決策的描述,以及可拒絕模糊輸入的 JSON Schema。描述要說明何時該呼叫,也要說明何時不該呼叫。
讓暴露的 tool name 與實作之間保持有版本的 mapping。沒有獨立 validation 前,絕不把模型文字當作 module name、command、URL 或 database query。
處理每一個請求的 call
單一 response 可能要求多個 function。逐一驗證、套用授權、在 timeout 內執行,並以原始 call identifier 回傳結果。只有副作用彼此獨立時才平行執行。
回傳精簡且有型別的結果。工具失敗時,提供模型能理解的受控錯誤;不要把 stack trace 或憑證貼回對話。
- 未知工具:拒絕。
- 無效參數:回報 schema failure。
- 重複請求:使用 idempotency record。
- 逾時:停止並暴露可復原狀態。
限制 continuation loop
提供 tool result 後,模型可能再要求呼叫或產生最終答案。限制總 turn、tool invocation、經過時間與成本。到達上限時,應回傳可用的部分結果並明確說明原因。
dispatcher 應獨立於模型行為測試。單元測試要證明授權、schema rejection、重複處理、timeout 與 redaction。