什么是 函数调用?

函数调用是让模型输出带工具名称和参数的结构化调用提议的接口;是否执行、如何执行以及结果能否被信任,仍由应用或供应商运行时决定。

快速了解

全称大语言模型函数调用
创建时间2023 年由 OpenAI 推出
规范文档官方规范

工作原理

请求、执行与结果回传

应用把用户上下文和经过筛选的工具目录发给模型。模型返回工具名称、Call ID 与参数;运行时解析已注册实现,完成校验和执行,再把绑定同一 Call ID 的结果返回模型。模型随后可以回答或继续请求工具。不同供应商的消息格式并不相同,因此必须完整保留有序的模型调用和工具结果,不能只拼接自由文本。

Schema 能保证什么

JSON Schema 可以约束类型、必填字段、枚举、范围、嵌套结构和额外属性,供应商的 Strict 模式可提高对其支持子集的符合度。但 Schema 无法证明订单属于当前用户、日期仍可预约、报价仍有效或某项写操作已经获准。解析后仍要执行应用级校验,身份、租户、角色与策略必须来自可信运行时上下文,而不是模型参数。

鉴权与副作用

优先暴露范围窄的业务操作,而不是通用 Shell、SQL 或任意 HTTP 请求。执行前应针对具体资源和影响重新鉴权。退款、下单、发送等重要写操作需要预览或确认、幂等键、超时、审计记录,以及结果未知时的对账路径。只有读写范围、依赖与配额真正独立时才能并发;模型在一条响应里返回多个调用,不等于并发安全。

评测与可观测

应在代表性完整轨迹上评测工具选择、参数有效性、信息缺失时的追问、鉴权拒绝、结果引用、停止决策、重复调用、延迟、成本与最终任务成功。日志至少保留模型与工具集版本、Call ID、决策结果、耗时、规范化错误类型和脱敏后的结果元数据。工具结果本身也是不可信内容,外部文本可能影响模型后续行为。

主要特点

  • 返回结构化工具提议,而不是由模型直接执行应用代码
  • 通过名称、说明和 Schema 暴露边界明确的能力目录
  • 需要运行时维护请求、执行、结果与继续推理闭环
  • 把结构校验与身份、鉴权和业务校验明确分开
  • 对副作用操作要求幂等、确认、截止时间和结果对账
  • 通过完整轨迹评测工具选择、参数、结果与停止条件

常见用途

  1. 通过最小权限服务读取账户、库存、天气或搜索数据
  2. 预览并确认退款、预约、消息发送等重要写操作
  3. 为应用拥有的工作流步骤生成类型化参数
  4. 把 Agent 运行时连接到供应商工具、自定义工具或 MCP 工具
  5. 使用录制用例评测工具选择与参数构造

示例

loading...
Loading code...

常见问题

函数调用会在模型内部直接执行函数吗?

通常不会。对于客户端自定义工具,模型只输出结构化请求,由应用决定是否运行。部分供应商还提供服务端工具,但执行仍发生在供应商运行时,而不是语言模型内部。必须明确执行主体,因为它决定凭证、策略、日志和失败处理责任。

严格符合 Schema 就代表工具调用安全吗?

不代表。严格 Schema 可以拒绝结构错误或不支持的值,但不能证明资源所有权、用户同意、当前业务状态、语义真实性或操作权限。运行时必须使用可信上下文和权威数据源,在真正执行前重新验证这些条件。

函数调用与结构化输出、MCP 有什么区别?

结构化输出只约束模型响应的数据形状,不隐含可执行操作;函数调用表达模型希望使用某项命名能力;MCP 则标准化远程工具与资源的发现和调用。应用可以通过函数调用暴露 MCP 工具,但策略和执行责任仍在 Host 或运行时。

多个工具调用什么时候可以并发执行?

只有调用彼此独立,且读写范围、依赖、配额和顺序不会冲突时才适合并发。共享可变状态、依赖前序输出、消耗有限资源或产生副作用的调用需要确定性调度。还要保留每个 Call ID,防止把结果绑定到错误请求。

生产环境应如何评测函数调用?

使用代表性完整任务评测工具选择、参数正确性、字段缺失时的追问、鉴权行为、最终结果、重复调用、停止决策、延迟和成本。测试集还应包含非法参数、对抗输入、状态过期、超时、部分失败和写入结果未知等情况,不能只覆盖 Schema 合法的顺利路径。

相关工具

相关术语

相关文章