Skip to main content
函数调用(Function Calling,亦称工具调用 / Tool Calling)允许模型判断需要调用哪个外部函数,并生成相应的参数。模型本身不执行函数,而是将调用意图与参数返回给调用方,由调用方执行后再将结果回传给模型,以生成最终响应。 这是构建「能查询天气、查询数据库、执行操作」的 AI 助手的核心机制。

工作流程

函数调用是多轮往返的过程:
  1. 用户向模型发送问题,并提供可用工具列表。
  2. 模型返回需调用的函数及参数。
  3. 调用方在本地执行该函数,获得结果。
  4. 调用方将执行结果回传给模型。
  5. 模型基于执行结果生成最终响应。

步骤一:定义工具并发起请求

在请求中通过 tools 字段声明可用函数。每个函数使用 JSON Schema 描述其名称、用途与参数。
  • tools:可用工具数组。
  • tool_choice:控制工具选择策略。可选值包括:
    • "auto"(默认):模型自行决定是否调用及调用哪个。
    • "none":禁止调用工具,强制普通响应。
    • {"type": "function", "function": {"name": "get_weather"}}:强制调用指定函数。

步骤二:模型返回调用意图

模型不会直接回答天气,而是返回 tool_calls,说明需调用 get_weather 及参数:
  • finish_reasontool_calls,表示模型请求调用工具。
  • arguments 为 JSON 字符串,需解析为对象。
  • idcall_abc123)需在步骤四回传结果时使用。

步骤三:执行函数

在本地代码中执行 get_weather("北京"),假设得到结果:{"temp": "25℃", "condition": "晴"}

步骤四:回传执行结果

将对话历史、模型的 tool_calls 及执行结果一并发送。执行结果使用 role: "tool" 的消息表示,并通过 tool_call_id 对应步骤二的 id

步骤五:模型生成最终响应

模型基于天气数据返回自然语言响应:

完整 Python 示例

API_KEY 中的 你的密钥 替换为实际密钥即可运行。示例会绕过系统代理环境变量,直接请求 Moxus AI。

完整 Node.js 示例

API_KEY 中的 你的密钥 替换为实际密钥。示例只执行已声明的 get_weather,不要直接执行模型返回的任意函数名或参数。

并行调用多个工具

模型可能一次请求调用多个工具(tool_calls 数组包含多项)。需全部执行,并为每个 id 各回传一条 role: "tool" 消息。可通过 parallel_tool_calls 参数控制是否允许并行(默认允许)。

注意事项

  • 并非所有模型均支持函数调用,请在模型广场确认所选模型的能力。
  • arguments 为 JSON 字符串,需先解析。
  • 工具执行结果须转为字符串(通常为 JSON 字符串)再回传。
  • 每轮往返均消耗 Token(历史越长消耗越多),应注意成本。
  • 模型生成的参数可能不完全符合预期,执行前应进行校验与容错。

后续步骤