GPT-6 Astra 函数调用指南:模式、验证、重试与工具结果
实现可靠的GPT-6 Astra函数调用,支持严格的JSON模式、参数验证、幂等执行、重试、并行调用以及结构化结果。

函数调用允许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,
输入:输出
});
绝不执行模型中的任意名称。应依据固定注册表进行解析。即使在严格模式下,也需在应用程序代码中再次验证:模式有效性并不能证明授权、记录存在性、业务规则合规性或安全性。
设计有用的工具结果
返回最小的完整结果。包含稳定的标识符、状态、类型化字段和机器可读的错误代码。避免转储整个数据库行或堆栈跟踪。
{
"headers": {
"row1": "列1",
"row2": "列2",
"row3": "列3"
},
"rows": [
{
"row1": "数据1",
"row2": "数据2",
"row3": "数据3"
}
],
"videourl": "https://example.com/video.mp4"
}
{ "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 能自己执行我的函数吗?
不。它发出调用请求;你的应用程序执行该函数并返回结果。
## 结论
可靠函数调用是一种协议:严格模式、固定注册表、应用验证、授权、受控执行、结构化结果和已验证的延续。在启用写入操作前,需添加幂等性和重试分类。模型提出建议,但您的系统需对每个效果负责。






























































































