GPT-6 Astra 函數呼叫指南:結構定義、驗證、重試與工具結果
使用嚴格的 JSON 架構、參數驗證、冪等執行、重試機制、平行呼叫與結構化結果,實現可靠的 GPT-6 Astra 函式呼叫。

函式呼叫讓 GPT-6 Astra 能請求您應用程式所控制的程式碼。模型會選擇一個函式並提出參數;您的執行環境會驗證這些參數、執行操作,然後將結果回傳。可靠性與其說取決於巧妙的工具描述,不如說是靠一套嚴謹的執行迴圈。
制定嚴格的合約
OpenAI 建議使用 strict: true。嚴格的結構要求 additionalProperties: false,且每個屬性都必須出現在 required 中。若要表示可選值,請使用包含 null 的聯集類型。
const tools = [{
type: "function",
name: "查詢訂單",
description: "返回用戶可見的單一訂單的當前狀態。",
strict: true,
parameters: {
type: "object",
properties: {
order_id: { type: "string", description: "標準訂單 ID" },
include_events: { type: ["布林值", "null"] }
},
必要: ["order_id", "include_events"],
additionalProperties: false
}
}];
保持函數小巧且命名具體。大型的 manage_account 工具帶有多種模式容易引發無效組合並隱藏風險。建議偏好使用 get_account、update_shipping_address 和 close_account,並在關鍵操作周圍設置核准機制。
執行循環
在 Responses API 中,請求的呼叫會以 type: "function_call"、call_id、name 和 JSON 字串 arguments 的項目出現在 response.output 中。應用程式會解析並驗證參數、執行受信任的程式碼,然後以相符的 function_call_output 繼續。
const first = await client.responses.create({ model: "gpt-6-astra", 工具, 「訂單 ORD-1042 在哪裡?」 });
const outputs = []; for (const item of first.output) { if (item.type !== "function_call") continue; const args = JSON.parse(item.arguments); const result = await lookupOrder(args); outputs.push({ type: "function_call_output", call_id: item.call_id, output: JSON.stringify(result) }); }
const final = await client.responses.create({ model: "gpt-6-astra", previous_response_id: first.id, 輸出 });
絕不執行模型中的任意名稱。需對照固定註冊表進行解析。即使在嚴格模式下,也應在應用程式碼中再次驗證:綱要有效性無法證明授權、記錄存在性、業務規則合規性或安全性。
## 設計實用的工具結果
回傳最小的完整結果。包含穩定的識別碼、狀態、型別欄位以及機器可讀的錯誤代碼。避免傾印整個資料庫列或堆疊追蹤。
```json
{
"headers": {
"rows": "列數",
"videourl": "影片網址"
}
}
{ "ok": false, "error": { "code": "ORDER_NOT_VISIBLE", "message": "在呼叫者的帳戶中找不到該訂單。", "retryable": false } }
訊息幫助模型進行解釋;程式碼幫助編排層做出決定。請勿揭露其他租戶是否擁有隱藏識別碼。
## 重試需要兩個策略
傳輸重試處理 API 超時、429 錯誤及暫時性 5xx 失敗。工具重試處理您自身的依賴失敗。請將兩者分開。
安全讀取通常可以透過指數退避和抖動進行重試。寫入操作則需要冪等鍵和協調機制。若在 `create_refund` 後連線中斷,應先檢查退款是否存在再重新呼叫。為每個邏輯動作賦予穩定的操作 ID,並將工具呼叫 ID 與結果一同儲存。
切勿單獨詢問模型重試是否安全。工具註冊表應宣告重試類別、逾時時間及副作用等級。
## 並行呼叫與排序
模型可能會要求多次函數呼叫。並行執行對於獨立的讀取操作很有用,例如查詢三個城市的天氣。但當呼叫B依賴於呼叫A,或兩個寫入操作觸及同一筆記錄時,則不安全。
收集每個函式呼叫項目;不要假設只有一個。建立一個具備依賴感知能力的執行器,或在順序重要時停用/避免並行行為。使用各自的 `call_id` 回傳每個結果。
## 控制工具選擇
`tool_choice` 可允許自動選擇、要求使用工具、禁止工具,或強制指定某個具名函式。對於開放式代理使用 `auto`,當 API 操作是端點的明確目的時強制使用某個工具,而在處理必須僅由模型完成時選擇 `none`。
對於使用者面向的操作,採用兩階段模式較為穩健:首先準備並顯示建議的變更;然後執行一個獨立確認的工具。這樣可以避免一句友善的句子變成隱含的授權。
## 測試合約
針對缺失欄位、空值選項、無效列舉、未授權ID、逾時、重複提交、部分失敗、多次呼叫、龐大輸出,以及工具結果中的惡意字串建立測試案例。評估最終答案是否準確反映失敗,而非宣稱成功。
記錄架構版本、呼叫 ID、工具名稱、已清理的引數、持續時間、結果及重試次數。請將機密與敏感內容排除於遙測資料之外。
## Schema 設計審查檢查清單
將每個工具視為公開 API 進行審查。列舉值應反映實際支援的值,而非要求模型自行發明字串。日期需明確宣告格式與時區。數值欄位需標明單位與範圍。識別碼應採用標準格式,而非自由輸入的客戶名稱,當查詢步驟能解決歧義時尤應如此。描述應說明前置條件及該功能不涵蓋的範圍。
避免布林陷阱,例如 `force`、`override` 或 `skip_checks`。這些會將重要的政策決策壓縮成一個模型產生的位元。如果某個例外操作是合理的,應將其作為一個獨立的高風險工具來提供,並搭配更嚴格的授權與核准機制。
版本不相容的合約。正在執行的回應鏈可能仍包含由較舊架構所塑造的呼叫或結果。您的執行器應明確拒絕不支援的版本,並回傳可復原的錯誤,而非猜測如何轉譯敏感請求。
最後,將函式結果與使用者可見的宣稱進行比對。回傳 `{ok:false}` 的工具絕不能變成「完成」。自動化評估應同時檢查呼叫追蹤與最終文字,因為操作上正確的工具層仍可能被模型錯誤陳述。
## 常見問題
### 嚴格模式是否消除了驗證程式碼?
不。它改善了結構遵循性。您的應用程式仍會強制執行權限、範圍、不變量及業務政策。
### 工具輸出必須是 JSON 嗎?
輸出欄位是字串,因此 JSON 是結構化結果的實用慣例。請保持合約一致。
### 何時應該強制使用工具?
若端點用途需要該操作且使用者已授權,請勿強制執行不必要的呼叫,僅為使行為看似具確定性。
### GPT-6 Astra 能自行執行我的函式嗎?
不。它發出呼叫請求;您的應用程式執行該函式並回傳結果。
## 結論
可靠函式呼叫是一種協定:嚴謹的結構定義、固定的註冊表、應用程式驗證、授權、受控執行、結構化結果,以及經過驗證的延續。在啟用寫入操作前,需加入冪等性與重試分類機制。模型提出建議,但您的系統仍需對每一項影響負責。






























































































