AI Agent(三):工具调用

AI Agent / 工具调用 / MCP2026.10.099 分钟阅读

工具参数、返回结果、函数调用与 MCP 接入。

工具职责与参数设计

工具接口决定模型能调用哪些能力,以及需要提供哪些参数。get_order 返回一张订单的关键字段,search_delivery_policy 查找配送政策,create_investigation 创建调查单,各自具有明确职责。execute 这类接受任意命令的工具难以选择和校验,尽量拆成具体业务操作。

粒度过细同样有成本。如果模型必须先查询表名、再查字段、再拼接数据库查询,完成一次简单业务读取就需要多轮不必要推断。优先暴露稳定业务能力,返回足以支持下一步判断的结果;将有业务意义的过滤条件设为显式参数,减少下载和筛选全量数据的开销。

{
  "type": "object",
  "properties": {
    "order_id": {"type": "string", "pattern": "^O-[0-9]{1,8}$"}
  },
  "required": ["order_id"],
  "additionalProperties": false
}

该 JSON Schema 限定唯一业务参数为 order_id,拒绝额外字段。处理器随后在可信会话范围内查询订单,检查存在性与访问权限。不同供应商的受约束生成支持不同 Schema 子集,服务端仍应执行完整业务校验。

返回结果包含状态、必要字段和证据标识,例如订单版本与更新时间。列表工具提供分页和截断标志,错误返回使用单独的状态与错误字段。

函数调用协议

函数调用把工具定义交给模型,使模型输出结构化提议;应用执行后将结果送回,再请求后续输出。应用通过调用标识关联结果,并推进任务状态。

以 OpenAI Responses 的函数调用为例,输出中可以包含 function_call 项,应用按 name 分发并解析 arguments,再使用对应 call_id 回传 function_call_output。strict 模式约束参数生成结构;业务规则仍由应用校验。实现时按采用的 API 与 SDK 版本处理完整响应,保留后续请求需要的状态。

模型一次可能提出零个、一个或多个调用。获取配送政策与读取订单可以并行;按运单号查询物流,要等订单返回关联信息。执行器按这些依赖调度调用,并协调写操作的冲突。

对每个调用保存原始调用 ID、规范化参数、执行状态和结果关联。重试模型请求与重试业务工具是两个不同层次:重新向模型请求可能产生新的调用 ID,而同一业务意图的写操作仍应复用业务幂等键。

MCP 的结构与能力

Model Context Protocol(MCP)定义应用与能力服务之间的交互协议。Host 是面向用户的宿主应用,Client 是宿主内连接服务端的协议组件,Server 暴露工具或资料。MCP 服务端可以包装现有订单 API,但协议本身不负责理解用户任务或替业务系统作出授权决定。

工具、资源和提示模板具有不同用途。工具表示可调用操作;资源提供可读取材料;提示模板提供可复用的交互内容。接入方决定调用方式,并在内容进入模型时标记来源。

MCP 2026-07-28 修订移除旧的初始化握手与协议级会话,改为在每个请求中携带版本及客户端能力,并增加 server/discover。接入时按双方支持的修订版本实现连接与请求。

采用 MCP 2025-11-25 规范时,工具发现使用 tools/list,调用使用 tools/call,工具可声明输入与输出结构。连接时协商双方支持的扩展,服务端另行校验权限。

MCP 调用与授权

{
  "jsonrpc": "2.0",
  "id": 7,
  "method": "tools/call",
  "params": {
    "name": "get_order",
    "arguments": {"order_id": "O-1042"}
  }
}

这个 MCP 2025-11-25 请求表示调用已发现的 get_order 工具;id=7 关联协议响应,与订单号没有关系。在该旧版协议下,宿主还需要完成初始化、能力协商和适用的认证流程,随后再发送工具请求。工具名称与输入结构来自已建立连接的服务目录。

协议错误表示请求无法按协议处理,业务执行错误表示工具已接收调用但业务未成功。MCP 工具结果可用 isError 表明执行失败,适配器分别保留这两类错误。

远程接入要验证服务身份、用户授权和令牌的目标受众,并按下游要求取得凭证。MCP 安全指南规定了令牌透传的限制。凭证由应用保管,进入日志和模型上下文前过滤掉。

接口演进与兼容性

协议修订连接与能力信息迁移检查
2025-11-25初始化握手协商能力按该版本的生命周期接入
2026-07-28请求携带版本与客户端能力;支持 server/discover检查请求元数据、结果类型与扩展支持

工具描述也是行为接口的一部分。将“查询当前物流”改成“查询全部历史物流”,即使 JSON 字段未变,也可能改变模型的选择与费用。发布时应一起记录工具说明、Schema、实现和权限策略版本,并用既有任务回放验证。

字段新增需要兼容计划。严格拒绝未知字段的客户端遇到服务端扩展可能失败;放任任意字段又可能隐藏拼写错误。可以通过版本化工具名、协议协商或明确的可扩展结果区域处理,并把变更规则写入契约。

接入验收应覆盖合法输入、缺失字段、额外字段、超长结果、分页、服务升级和权限撤销。分别测试模型的工具选择和执行器对错误输入的拒绝行为。

— 本页完 —
← 返回文章列表

搜索内容

输入关键词搜索文章、笔记与随笔。