客戶端工具(Client Tools)
讓 AI 助理呼叫由你的應用程式自行執行的工具(例如查詢只在內網可達的系統):如何在對話 API 宣告客戶端工具、辨識模型的呼叫要求、把執行結果送回並讓模型繼續完成任務
客戶端工具讓 AI 助理可以呼叫「在你的應用程式裡執行」的工具。你在每次呼叫對話 API 時宣告工具清單;模型判斷需要用到某個工具時,MaiAgent 不會自己執行,而是把「要呼叫哪個工具、帶什麼參數」回傳給你,由你的應用程式在本機執行後,再把結果送回對話,模型會依結果繼續回答或呼叫下一個工具。
適合只有你的應用程式才能執行的動作,例如查詢只在公司內網可達的系統、瀏覽器擴充功能操作目前開啟的網頁、App 存取使用者裝置上的資源。
使用情境
一家電商的工程師把 AI 助理接進公司內部的客服工作台,訂單系統只開放在內網。客服人員在工作台輸入「客人問訂單 A1024 什麼時候到貨」,工作台呼叫對話 API 時一併宣告了「查詢訂單」工具。模型回覆要查哪一筆訂單,工作台在內網查到出貨狀態後送回同一段對話,模型據此寫出回覆客人的說明。訂單系統不必對外開放,工作台只送出模型需要的資料。
使用條件
客戶端工具已對所有組織開放,不需要另外申請。要讓模型能呼叫,需同時符合:
AI 助理的 回答模式 為 Agent 模式
AI 助理使用的模型支援工具呼叫
運作流程
宣告工具
{
"conversation": "<對話 ID,第一則訊息可省略>",
"isStreaming": false,
"message": {
"content": "客人問訂單 A1024 什麼時候到貨?",
"clientTools": [
{
"name": "get_order",
"description": "依訂單編號查詢訂單的出貨狀態與預計到貨日",
"inputSchema": {
"type": "object",
"properties": {
"order": { "type": "string", "description": "訂單編號" }
},
"required": ["order"]
}
}
]
}
}name
string
工具名稱,僅限英數字、底線 _、連字號 -,長度 1–64,同一次請求內不可重複
description
string
工具用途說明,模型依此判斷何時使用,請寫清楚
inputSchema
object
工具參數的 JSON Schema,序列化後不可超過 4,000 字元
工具呼叫要求的格式
模型要求呼叫工具時,contentPayload.items 會包含如下項目,一次可能有多個:
type
string
固定為 client_tool_call
toolCallId
string | null
模型產生的呼叫識別碼
name
string
要執行的工具名稱,對應你宣告的 name
input
object
模型帶入的參數,對應你宣告的 inputSchema
startTimestamp
string | null
呼叫開始時間
非串流與串流的差異
非串流(
isStreaming: false):工具呼叫項目在回應本體(done: true)的contentPayload.items中。串流(
isStreaming: true):工具呼叫項目會以獨立事件送出,該事件done為false、content為空字串、contentPayload.items內含client_tool_call。最後的done: true事件不會再重複這些項目,請在串流過程中收集。
送回執行結果
目前沒有專用的「提交工具結果」端點。請在同一段對話送出下一則一般訊息,把結果寫在 message.content:
一次多個工具呼叫:全部執行完後,把各工具的結果合併在同一則訊息送回。
寫上工具名稱與
toolCallId:後端不會用toolCallId比對,但寫在結果文字中能幫助模型對應是哪一次呼叫。執行失敗或使用者拒絕:同樣用文字說明,例如「get_order 執行失敗:查無此訂單」或「使用者拒絕執行此操作」,模型會據此調整回答或改用其他方式。
結果內容長度:送回的內容會計入模型輸入,資料量大時請先截取需要的部分。
連續呼叫多個工具
每一次「模型要求呼叫 → 你送回結果」就是一個回合。模型可以在多個回合中連續呼叫工具,直到回應中不再出現 client_tool_call、改為回傳最終文字。建議在你的應用程式設定回合上限,避免異常情況下無限循環。
常見問題
最後更新於
這有幫助嗎?