什么是函数调用?LLM工具架构解析

什么是函数调用?

无删除MCP服务器暴露网络和浏览器的能力,代理主机可以通过函数调用接口向模型呈现这些能力。

重点总结

  • 函数调用是结构化模型输出。 模型请求带参数的命名工具;应用代码验证并执行它。
  • 模型不运行该函数。 凭据、网络访问、副作用和结果处理保持在主机应用程序中。
  • 架构塑造可靠性。 清晰的名称、描述、必填字段、枚举和有界值减少模糊调用。
  • 仍然需要验证。 架构有效的参数可能是未经授权的、不安全的、过时的或对当前状态错误的。
  • 工具结果继续对话。 应用程序返回函数结果,以便模型可以回答或选择另一个允许的步骤。

为什么这个主题重要

函数调用是一种模式,允许应用程序向语言模型描述工具,并收到一个结构化的请求以使用其中之一。 OpenAI函数调用文档 解释工具定义使用架构,应用程序执行所选功能。模型生成一个提案;它无法直接访问服务器、数据库、浏览器或凭证。

这种分离使语言模型在软件内部变得有用。自然语言意图可以映射到类型操作,而现有的应用程序代码保留了授权和业务规则。函数调用可以支持只读搜索、计算、记录查找、浏览器操作或交易。所需的风险和验证取决于副作用,而不是JSON的外观有多干净。

函数调用生命周期

主机向模型发送用户请求和一组可用的工具定义。每个定义都有名称、描述和输入架构。模型可以直接回答或返回带结构化参数的工具调用。主机解析该调用,检查它,执行相应的代码,并以正确的调用身份发送结果。

模型然后可以使用结果生成最终答案或请求另一个工具。多步骤的工具使用创建了一个代理循环,但函数调用本身只是模型和主机之间的接口。规划、内存、授权、调度和错误策略是单独的应用程序问题。

一个设计良好的工具代表一种有意义的能力。模糊的工具如`do_anything`隐藏权限,并给模型太多的参数组合。狭窄的搜索功能、客户查找或浏览器导航操作更容易描述、验证、观察和独立授予。

什么是良好工具定义的标准

  • 清晰的名称。 使用动词和对象区分该能力与附近工具的不同。
  • 以决策为中心的描述。 解释该工具何时该使用,它返回什么,以及重要的排除。
  • 约束性架构。 要求必要字段,并故意使用枚举、格式、范围和嵌套对象。
  • 类型化的结果。 返回稳定字段、源证据、操作状态和机器可读的错误。
  • 明确的副作用。 让读取、写入、发送、删除、提交和购买的行为对主机和模型显而易见。

函数调用、API和MCP

这些概念在不同层次上运作,通常共同运作而非竞争。

概念角色关键边界
函数调用模型请求一个类型操作主机选择是否以及如何执行
API软件服务暴露一个操作认证和业务规则存在于服务中
MCP服务器向兼容主机宣传工具和数据主机决定哪些发现的能力可以到达模型
代理协调目标、状态、工具和评估自治受到政策和停止规则的限制
计算机使用操作图形界面操作需要当前的视觉或语义状态

实现安全的函数调用循环

将每个工具调用视为模型提出的不受信输入。应用与任何其他客户端期望的相同授权和验证。

  1. 库存能力。 按资源、副作用和权限拆分操作,这样每个工具都有一个易于理解的合同。
  2. 从实际函数设计模式。 匹配实际所需的输入和输出字段,而不是发明模型友好的参数,以至于代码无法支持。
  3. 验证上下文和权限。 检查身份、资源所有权、当前状态、允许的值、预算和批准,然后再执行。
  4. 返回精确结果。 包括稳定的标识符、证据和结构化错误类别,而不暴露秘密或内部堆栈跟踪。
  5. 记录完整的交换。 记录工具定义版本、请求参数、验证结果、执行结果和模型可见的响应。

评估工具使用

工具调用评估应区分选择、参数形成、执行和最终答案使用。

  • 选择准确性。 模型是否选择了正确的工具或正确地避免了工具使用?
  • 参数有效性。 调用是否满足模式和特定任务的语义限制?
  • 授权行为。 主机是否在正确的边界阻止了不允许的资源并要求了批准?
  • 结果使用。 模型是否在没有添加不支持的声明的情况下解释返回的字段和证据?
  • 循环控制。 多步骤使用是否在完成、未进展或预算耗尽时停止?

函数调用风险

结构化输出改善了解析,但本身并不能使模型决策值得信赖。 NIST人工智能风险管理框架 提供了治理框架,而 HTTP语义规范 提醒实现者网络响应具有主机必须解释的精确语义。安全仍然是应用程序的责任。

  • 过于宽泛的工具。 巨大的能力使得最小权限授权和有意义的评估变得困难。
  • 语义无效性。 参数可以通过JSON Schema,但可能指向错误账户、过时记录或禁止目标。
  • 通过工具结果的注入。 外部内容可以包含指令。将其作为数据返回,并保留系统政策优先级。
  • 秘密泄漏。 工具定义和结果不应暴露凭证、私人路由或不必要的个人数据。
  • 重复副作用。 主机应使用操作身份和当前状态检查,以便重复的模型调用不会产生意外的写入。

函数调用使用案例

当前信息

让模型请求搜索或检索,并接收带有来源的结果。

业务查找

将用户问题转换为针对批准服务的验证查询。

网络操作

将浏览器操作作为带有会话和域策略的狭窄能力进行暴露。

工作流助手

准备结构化的写入操作,并在提交之前要求应用程序或人工审批。

从试点到生产

一个有用的函数调用试点应足够小,以便逐条检查记录。从 库存能力开始:按资源、副作用和权限拆分操作,以便每个工具都有一个可理解的合同。然后应用 真实函数的设计模式:匹配实际所需的输入和输出字段,而不是发明模型友好的参数,代码无法予以遵守。保持第一个评估集故意混合,包括普通情况、模糊情况、缺失证据和系统必须拒绝或转交的操作。这表明工作流在高级别隐藏设计错误之前是否了解其边界。

生产就绪需要为每个度量和工件指定一个所有者。跟踪 选择准确性 以回答模型是否选择了正确的工具或正确避免了工具的使用?跟踪 参数有效性 以确定调用是否满足模式和任务特定的语义约束?添加 授权行为 以便团队可以查看主机是否阻止了不允许的资源,并在正确的边界处要求审批?这些措施应链接到基础记录,而不是仅仅作为仪表板总数存在。审核者需要从变更的度量移动到产生它的确切查询、来源、观察或操作。

操作控制应针对最有可能改变商业决策的失败模式。第一个审查规则应涵盖 过于宽泛的工具:大型能力使得最小权限授权和有意义的评估变得困难。退出审查应涵盖 重复副作用:主机应使用操作身份和当前状态检查,以便重复的模型调用不会产生意外的写入。分配响应所有者,定义解决问题的证据,并记录结果是否更改数据、提示、工具、权限或来源政策。该记录防止同一缺陷被重新发现为未解释的质量波动。

仅在试点行为可预测后扩展。团队可以从当前信息开始,任务是让模型请求搜索或检索,并接收带有来源的结果。第二阶段可以添加业务查找,其中工作流必须将用户问题转换为针对批准服务的验证查询。随着范围的扩大,保持原始测试集的运行。新的来源、市场、工具和权限应逐一引入边界,以便可归因于特定变更,而不是同时平台重写。

结论

函数调用为语言模型提供了一种类型化请求软件能力的方式。其可靠性来自于周围的主机:准确的模式、语义验证、最小权限、确定性授权、稳定的结果和完整的痕迹。模型选择;应用程序保持负责。

从只读工具和短能力集开始。在添加副作用之前,对真实任务评估选择和参数。该序列将自然语言的灵活性转化为受控软件行为。

准备向代理主机暴露网络工具?

使用无抓取的MCP服务器和代理浏览器,通过结构化工具接口提供有限的网络能力。

今天注册并获得 5美元的免费信用无需信用卡.

领取您的5美元信用→

常见问题

函数调用是否在LLM内部执行代码?

不。模型发出结构化的工具请求。主机应用验证它,执行自己的代码或服务调用,并将结果返回给模型。

函数调用是否与API相同?

不。API暴露软件操作。函数调用是请求操作时面向模型的模式。应用程序代码通常将函数调用映射到一个或多个API。

MCP是否与函数调用相同?

不。MCP标准化主机如何连接到能力服务器并发现工具或资源。主机可以通过其函数调用接口向模型呈现选定的MCP工具。

JSON模式是否使工具调用安全?

不。模式验证检查结构和某些值约束。主机仍然必须验证身份、所有权、授权、业务规则、当前状态和副作用审批。

模型应该接收多少个函数?

使用与任务相关的最小集合。过多重叠的工具增加选择模糊性,并使权限更难以推理。工具路由可以在模型选择之前缩小更大的目录。

参考文献