工具调用
模型提出结构化工具调用,应用负责验证、授权、执行并返回结果。
学习目标
- 能说明工具调用解决什么问题,以及何时适用。
- 能解释为什么“把 Schema 当授权”是误区。
学习前需要掌握
背景与问题
当答案需要当前价格、用户文件或实际执行结果时,模型需要请求外部能力。工具调用把模型建议转换成应用可以验证和执行的接口请求,再把真实观察反馈给模型。
这个过程包含至少两个不同角色:模型决定候选动作,应用控制动作是否执行。把模型返回的调用 JSON 直接视作授权,会混淆决策与权限。
概念定义
工具调用是一种控制循环:模型依据工具描述生成名称与参数,宿主应用执行真实函数,再把结果返回模型。
直观理解
模型填写申请单,应用检查申请、执行操作并给回执;申请单不是操作本身。
核心原理
应用先向模型提供允许使用的工具定义。模型可以生成工具名与参数,也可能无需工具直接回答;是否需要调用应由任务信息需求决定,不是每次都强制使用全部工具。
运行器解析参数,检查结构、语义和权限。检查不通过时返回明确错误或要求修正,而不是尽量猜测用户原意后执行;对有副作用的动作,还要满足对应审批与幂等条件。
工具执行后,结果通过调用标识与原请求关联,再进入后续上下文。一个回合可能有多个调用,结果不能错配;错误、部分结果与正常数据应显式区分,避免模型把失败消息当成业务事实。
最后由模型或确定性逻辑综合观察,并再次验收用户目标。如果结果仍不足,可以继续调用;但要有预算与进展检查,防止用无限检索代替清楚说明无法完成的部分。
案例:查快递状态的完整往返
用户提供包裹编号,模型请求物流查询工具。运行器检查编号格式和当前账户可访问的范围,服务返回“已到分拨中心”及更新时间,结果绑定到对应调用后再交给模型答复。
若服务返回“编号不存在”,模型应核对输入或说明未找到,不能把它改写成“尚未发货”。若查询成功但用户问的是预计到达时间,而结果没有预测字段,工具往返虽已完成,原问题仍缺少证据,应继续查有权限的数据源或明确不确定性。
理解与实践步骤
- 向模型暴露最小工具描述
- 接收名称与参数
- 验证 Schema 和业务权限
- 必要时请求审批
- 执行并记录幂等键
- 返回结构化结果
- 由 Agent 使用结果继续
实际应用
- 读取文件
- 查询数据
- 受控业务操作
常见错误
- 模型生成了调用就宣称外部操作成功,跳过真正执行与返回验证。
- 参数符合 Schema 就直接执行,忽略账户、对象范围与业务约束。
- 多个调用的结果标识错配,或把错误消息作为正常数据传入下一轮。
输入、输出与执行边界
输入
- 工具名
- 参数对象
- 调用者与授权上下文
输出
- 结构化结果
- 错误分类
- 审计记录
能力
- 读取文件
- 查询数据
- 受控业务操作
安全风险与信任边界
工具选择、参数生成和结果使用是三个独立检查点。返回文本可能出错或含诱导内容,写调用超时也可能已改变外部状态;后续行动应依赖可核对结果,而不是把一次调用完成通知当成所有业务条件都已满足。
性能与失败模式
一次目标可能展开多次发现、调用、验证与重试,端到端费用不等于一次模型推理。应统计无用调用和依赖等待;缓存只适合允许陈旧的读取,不能为了加速复用已经过期的状态或重复写操作结果。
推荐学习资料
OpenAI Tools Guide
说明模型如何调用函数、搜索、计算机操作及其他工具,并展示结构化参数。
OpenAI · OpenAI Platform