Tool Calling Protocol 的核心架构包含四个关键层次,每个层次都有其独特的职责和功能:
工具描述是协议的入口点,使用结构化格式(通常是 JSON Schema)来精确描述每个工具的功能、输入参数、返回值类型和使用约束。一个完整的工具描述通常包含工具名称、功能说明、参数定义(包括类型、描述、默认值、是否必填)以及可能的错误情况。良好的工具描述使模型能够准确理解何时应该调用哪个工具以及如何构造调用参数。
调用序列化负责将模型生成的调用意图转换为标准化的函数调用格式。这一层需要处理多种任务:参数类型转换(例如将模型生成的文本转换为正确的数值类型)、默认值填充、必填参数校验、以及调用上下文(例如认证信息、时间戳)的添加。序列化层的质量直接影响调用能否被目标系统正确解析和执行。
执行层负责在沙箱或受控环境中实际运行调用请求,并捕获执行结果。这一层需要处理超时控制、权限验证、错误处理和资源管理。结果处理层则将返回数据转换为模型可以理解的格式,同时处理可能的异常情况、网络错误和重试逻辑。
最后,协议定义了如何将调用结果(无论是成功数据还是错误信息)注入到模型的后续上下文中。这一层需要考虑如何有效压缩结果信息以节省上下文窗口、如何标记成功与失败状态、以及如何让模型根据结果进行下一步推理和决策。
以下展示了一个完整的工具调用协议交互流程,涵盖从工具描述到结果处理的全过程:
// 步骤1: 工具注册与描述
{
"name": "get_weather",
"description": "获取指定城市的当前天气信息,包括温度、湿度和天气状况",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名称,如北京、上海"},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"], "default": "celsius"}
},
"required": ["city"]
}
}
// 步骤2: 模型生成的调用请求
{
"name": "get_weather",
"arguments": {"city": "上海", "unit": "celsius"}
}
// 步骤3: 执行后返回的结果
{
"name": "get_weather",
"result": {
"temperature": 28,
"condition": "晴",
"humidity": 65,
"wind_speed": 12
},
"success": true
}
Tool Calling Protocol 是更广泛概念的基础。在不同的上下文和实现中,这个概念有以下常见变体:
工具调用协议的出现标志着 LLM 从「被动回答问题」向「主动执行任务」的范式转变。在传统模式下,LLM 只能基于其训练数据和当前上下文生成文本回复;而通过协议化的工具交互,AI 系统获得了执行实际操作的能力——这包括查询实时数据、调用外部服务、操作信息系统等。这种转变使得构建真正自主的 AI Agent、复杂自动化工作流和企业级智能应用成为可能,是 AI 技术从「智能对话」走向「智能执行」的关键里程碑。
本文档最后更新于 2026年7月