Agent 协议:工具与编排

智能体(Agent)让大模型在生成文本之外调用工具、读写外部系统并分步完成目标。主流做法是把工具描述成结构化 schema,由模型决定何时调用,再由运行时执行并回传结果,形成「思考、执行、观察」的循环。相比单纯提示词工程,协议化的工具接入让能力可复用、可组合,也更易于调试、限流与审计。当任务涉及查数据库、发消息、调用 API 时,协议层把不确定性的「模型猜」变成确定的「程序做」。

工具调用是什么

工具调用把函数名与参数以结构化形式返回,而不是把结果写进自然语言。模型只负责产出调用意图,具体执行由宿主程序完成,这样能避免模型「编造」工具返回值。对调用方而言,拿到的是可直接执行的 JSON,而非需要再解析的自然语言句子。模型在此过程中扮演「调度员」角色,是否调用、调用哪个、传什么参数都由它决定。

为什么需要编排协议

单个工具调用无法处理多步骤任务。编排协议约定:如何暴露工具、如何回传结果、如何在多轮中维护上下文。标准化之后,同一套工具描述可以被不同模型复用,降低接入成本。没有协议时,每个应用都要自己定义调用格式、自己写解析器,重复劳动且难以互通。有了协议,社区还能共享现成的服务器实现。

怎么接一个工具

以 OpenAI 风格的函数调用为例,先声明工具,再在对话里让模型选择调用:

{
  "name": "get_weather",
  "description": "查询某城市的当前天气",
  "parameters": {
    "type": "object",
    "properties": { "city": { "type": "string" } },
    "required": ["city"]
  }
}

宿主在收到 get_weather 调用后执行真实查询,把结果以消息回传给模型继续推理。多步任务则反复执行「模型决策、运行时执行、结果回传」的循环,直到模型判断任务完成或触发终止条件。

注意点

  • 工具描述要清晰,参数 schema 需可校验,避免模型传错类型。
  • 工具执行结果必须可信,不要让模型自行生成「假装」的返回值。
  • 多步编排需维护状态与终止条件,防止无限循环。
  • 敏感操作应加人工确认或权限校验,避免模型越权。
  • 调用失败要有兜底,把错误作为观察反馈给模型让其重试。
  • 记录每次调用的出入参,便于复盘与合规留痕。

实践建议

落地时建议先把工具按「只读查询」与「写操作」分级,只读类可直接放行,写操作类加确认。对延迟敏感场景,可把常用工具的返回做缓存,避免重复调用。编排层最好提供超时与重试上限,并在超限时让模型切换到更稳妥的策略,而不是卡死在循环中。

小结

Agent 协议的核心是把「做什么」交给模型、「怎么做」交给运行时:模型产出结构化调用意图,编排层负责执行与回传。清晰的工具 schema、可靠的执行结果与明确的终止条件,是搭建可靠智能体的关键。

参考与延伸阅读

本文累计阅读