欢迎光临
我们一直在努力

大模型工具调用与 Function Calling 技术深度解析:从 JSON Schema 定义到多工具并行调度的 AI Agent 交互范式

  • 大模型工具调用与 Function Calling 技术深度解析:从 JSON Schema 定义到多工具并行调度的 AI Agent 交互范式

    • 核心痛点:大模型能力再强也无法直接操作数据库、调用 API 或执行代码——如何让 LLM 精准「说出」要调用什么工具、传什么参数、处理什么结果?
    • 适配人群:正在构建 AI Agent、RAG 系统或 LLM 应用的后端工程师和 AI 架构师
    • 收获能力:掌握 Function Calling 的底层机制、主流 API 差异、结构化输出原理、多工具编排模式与生产级最佳实践
    • 技术背景与演进逻辑

      • 从纯文本生成到工具增强的范式跃迁
        • 早期 LLM -> 纯文本输入/输出 -> 无法与外部世界交互 -> 答案只能来自训练数据
        • 2023 年 6 月 -> OpenAI 发布 Function Calling -> LLM 第一次能「说出」要调用什么函数 -> 开启 Agent 时代
        • 2023 年 11 月 -> Anthropic Claude 引入 Tool Use -> 支持多工具并行调用 + 计算机操作
        • 2024 年 2 月 -> Google Gemini 支持 Function Calling -> Schema-first 设计哲学
        • 2024 年 11 月 -> Anthropic 发布 MCP 协议 -> 工具定义从 API 层下沉到协议层
        • 2025 年 -> OpenAI 发布 Structured Outputs -> Function Calling + JSON Schema 强制约束 = 100% 合法输出
        • 2026 年 -> Function Calling 成为所有主流 LLM 的标配能力 -> 从单工具到多工具并行 -> 从简单调用到复杂编排
      • Function Calling 的本质 -> LLM 不执行任何函数 -> LLM 输出结构化的 JSON 参数 -> 宿主应用执行函数 -> 将结果回传给 LLM -> LLM 基于结果继续推理
      • 演进时间线(text 树):Function Calling 技术演进
        ├── 2023-06 -> OpenAI GPT-3.5/4 Function Calling:首次支持结构化工具调用
        ├── 2023-11 -> Anthropic Claude Tool Use:多工具并行 + 计算机操作
        ├── 2024-02 -> Google Gemini Function Calling:Schema-first + grounding
        ├── 2024-06 -> OpenAI parallel function calling:单轮多工具并行
        ├── 2024-10 -> Anthropic MCP 协议:工具定义标准化为 JSON-RPC 2.0
        ├── 2024-11 -> OpenAI Structured Outputs:JSON Schema 强制约束输出
        ├── 2025-03 -> OpenAI Agents SDK:Tool Runner 内置 agentic loop
        ├── 2025-06 -> Gemini 2.5 自动工具发现:模型可自主决定何时调用
        └── 2026-Q1 -> 全主流 LLM Function Calling 标准化 -> MCP/A2A 协议生态成熟
    • 核心原理深度解析

      • Function Calling 的工作原理

        • Function Calling 的核心是一个多轮对话循环,而非单次请求-响应
        • 完整调用流程(text 树 + 箭头):Function Calling 完整流程
          ├── 第 1 轮: 用户请求 + 工具定义 -> LLM
          │ ├── 用户消息: \”北京今天天气怎么样?\”
          │ ├── 工具定义: { name: \”get_weather\”, parameters: { city: string } }
          │ └── LLM 决策: 分析用户意图 -> 匹配可用工具 -> 生成调用参数

          ├── 第 2 轮: LLM 输出工具调用请求
          │ ├── LLM 输出: { tool_call: { name: \”get_weather\”, arguments: { city: \”北京\” } } }
          │ ├── 宿主应用: 解析 tool_call JSON -> 执行实际函数
          │ ├── 实际函数: 调用天气 API -> 返回 { temp: \”28°C\”, weather: \”晴\” }
          │ └── 注意: LLM 本身不执行任何外部操作 -> 只是「说出」要调用什么

          ├── 第 3 轮: 工具结果回传 -> LLM 继续推理
          │ ├── 工具结果: { role: \”tool\”, content: \'{\”temp\”:\”28°C\”,\”weather\”:\”晴\”}\’ }
          │ ├── LLM 推理: 基于工具返回结果生成自然语言回答
          │ └── 最终输出: \”北京今天天气晴朗,气温 28°C,适合户外活动。\”

          └── 关键设计思想:
          ├── LLM 是「决策者」不是「执行者」-> 安全边界清晰
          ├── 工具定义是「说明书」不是「代码」-> LLM 通过 JSON Schema 理解能力边界
          └── 宿主应用是「执行者」-> 控制实际 API 调用、权限校验、结果过滤
      • 工具定义的 JSON Schema 规范

        • 工具定义告诉 LLM 三件事 -> 工具叫什么名字(name)-> 工具做什么(description)-> 工具需要什么参数(parameters + JSON Schema)
        • 三大厂商工具定义格式对比(text 树):三大厂商工具定义格式对比
          ├── OpenAI(Chat Completions API):
          │ ├── 位置: tools[] 数组中每个元素
          │ ├── 结构: { type: \”function\”, function: { name, description, parameters } }
          │ ├── parameters: 标准 JSON Schema 对象
          │ ├── 特点: 工具和函数是同一个概念(function calling)
          │ └── 限制: parameters 必须是 object 类型

          ├── Anthropic(Messages API):
          │ ├── 位置: tools[] 数组中每个元素
          │ ├── 结构: { name, description, input_schema }
          │ ├── input_schema: 标准 JSON Schema 对象
          │ ├── 特点: 工具(tool)和函数(function)统一为 tool
          │ └── 扩展: 支持 computer_use / bash / text_editor 内置工具

          └── Google(Gemini API):
          ├── 位置: tools[] 中的 function_declarations[]
          ├── 结构: { name, description, parameters }
          ├── parameters: JSON Schema 对象
          ├── 特点: Schema-first 设计,强类型约束
          └── 扩展: 支持 grounding(Google Search / 代码执行)
      • 结构化输出 vs Function Calling

        • Structured Outputs 是 Function Calling 的特化形式 -> Function Calling 让模型「选择调用什么工具」-> Structured Outputs 让模型「输出符合 Schema 的 JSON」-> 两者共享相同的 JSON Schema 约束机制
        • 关键区别(text 树):Function Calling vs Structured Outputs vs JSON Mode
          ├── Function Calling(工具调用):
          │ ├── 目的: 让 LLM 决定调用哪个工具 + 生成参数
          │ ├── 模型行为: 可能调用 0 个、1 个或多个工具
          │ ├── 输出格式: tool_calls[] 数组
          │ ├── 执行: 宿主应用解析 tool_calls 并执行
          │ └── 适用: AI Agent、RAG、API 编排

          ├── Structured Outputs(结构化输出):
          │ ├── 目的: 让 LLM
赞(0)
未经允许不得转载:171主机测评 » 大模型工具调用与 Function Calling 技术深度解析:从 JSON Schema 定义到多工具并行调度的 AI Agent 交互范式
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址