什么是工具调用?Function Calling 通俗解读

工具调用让大模型不再只会说话——它可以搜索网页、读写文件、调用 API,把「想法」变成「行动」。

通俗理解

想象你在用外卖 App 点餐:你告诉 App "我想要一份宫保鸡丁",App 不会自己做饭,而是调用餐厅的 API——下单、付款、追踪配送——最后把结果告诉你。

工具调用让 LLM 从"只能说话"变成"能动手"。

纯语言模型配备工具的模型
能力生成文本生成文本 + 执行动作
实时信息训练数据截止日期可调用搜索、查询数据库
计算精度容易出错调用计算器/代码解释器
外部集成无法访问可调用任意 API
典型场景写作、翻译订机票、查股价、改代码

纯大模型

只能生成文本回复,无法执行任何操作。说得再好也只是嘴上功夫。

只能说无法做

带工具的大模型

能搜索网页、读写文件、调用 API,把想法变成行动。

搜索查询读写文件API 调用

核心机制

Function Calling 的工作流程分四步:

code
1. 定义工具 Schema(JSON)→ 2. 模型决定调用哪个工具 → 3. 你的代码执行工具 → 4. 结果返回给模型

关键点:模型只负责"决定调用什么",实际执行永远在你的代码里。LLM 不会直接访问网络或文件系统,它只输出结构化的调用指令。

工具调用四步流程
定义工具
模型决策
执行调用
返回结果

工程实践

用 Anthropic Python SDK 实现工具调用:

python
import anthropic

client = anthropic.Anthropic()

# Step 1: define tool schema
tools = [
    {
        "name": "get_weather",
        "description": "Get current weather for a given city",
        "input_schema": {
            "type": "object",
            "properties": {
                "city": {"type": "string", "description": "City name, e.g. Beijing"}
            },
            "required": ["city"],
        },
    }
]

# Step 2: model decides which tool to call
response = client.messages.create(
    model="claude-opus-4-5",
    max_tokens=1024,
    tools=tools,
    messages=[{"role": "user", "content": "北京今天天气怎么样?"}],
)

# Step 3: your code executes the tool
if response.stop_reason == "tool_use":
    tool_use = next(b for b in response.content if b.type == "tool_use")
    result = fetch_weather(tool_use.input["city"])  # your implementation

    # Step 4: return result to model
    final = client.messages.create(
        model="claude-opus-4-5",
        max_tokens=1024,
        tools=tools,
        messages=[
            {"role": "user", "content": "北京今天天气怎么样?"},
            {"role": "assistant", "content": response.content},
            {"role": "user", "content": [{"type": "tool_result", "tool_use_id": tool_use.id, "content": result}]},
        ],
    )

Tool Use vs MCP

两个概念经常混用,实际上层次不同:

Tool Use(工具调用)MCP(模型上下文协议)
是什么LLM 的核心能力工具集成的标准协议
层次能力层协议层
类比打电话的能力电话网络的标准
作用让模型可以调用函数统一工具的描述和调用格式

MCP 是在 Tool Use 能力基础上建立的标准——有了 MCP,工具开发者只需写一次,所有支持 MCP 的模型都能调用。

常见误区

  • "工具调用就是让 AI 上网"——不准确。联网只是一种工具,工具调用是一种通用机制,可以调用任何函数:数据库查询、文件读写、发邮件、执行代码等
  • "模型会自己执行工具"——不会。模型只输出"我想调用 X 工具,参数是 Y",真正执行的是你的应用代码,这也是安全边界的关键所在
  • "工具越多越好"——错。工具过多会稀释模型的注意力,通常建议单次调用不超过 20 个工具,优先提供精准、描述清晰的工具

相关概念