工具调用的本质:智能体如何从"说"到"做"?

从 ReAct 范式到 OpenAI/Anthropic/Gemini 三平台统一实现,讲透 LLM 工具调用的原理、代码与边界

你问 ChatGPT「今天北京天气如何?」它能直接回答。但如果你问「帮我查一下刚刚发布的 GPT-5 有什么新功能」,它却卡住了——要么摊手说「我的知识截止于 2026 年」,要么自信地编造一个不存在的特性。为什么同一个模型,判断力判若云泥?答案藏在「工具调用」里。


§1 痛点:LLM 的「能力天花板」与工具调用的诞生

LLM 虽然展现了惊人的零样本推理能力,但有三项缺陷光靠堆参数解决不了。

第一个是 知识截断。GPT-4 的知识截止于 2023 年底,Claude 3.5 停在 2025 年初——问「今天新闻」或「刚刚发布的旗舰手机」,模型只能礼貌地说「我无法访问实时信息」。如果这是一套客服系统,这条回复就等于把用户推到竞品门口。

第二个是 事实幻觉。面对它不知道的知识点,LLM 倾向于「自信地编造」而非「承认不知道」。这种「流畅但错误」的回复比「不知道」更让用户困惑,也更难纠正——因为表面看不出哪里可疑。

第三个是 基础运算与检索。最强大的 LLM 做两位数乘法都可能出错,更无法执行搜索、查数据库或调用 API。而这些问题,一个小计算器或一个搜索 API 就能完美解决。

Toolformer 论文[摘要说得很直白:「LLM 解决新任务的能力令人惊叹,但连基本算术和事实查找都做不好——而这方面更小更简单的工具反而出色。」Agent Survey 论文[更进一步,将 Action Module 定位为智能体四大模块的最下游:profile / memory / planning 共同影响 action,而 action 的行动空间明确分为「外部工具」与「内部知识」。调不调工具,本身就是智能体在「信赖参数记忆」与「求助外部世界」之间的根本决策。

解法很直观:给 LLM 配「工具」——天气 API、搜索 API、计算器。但关键问题在于:LLM 如何自己决定「什么时候该调工具、调哪个、怎么调」? 这正是本文要展开的核心议题。


§2 原理:ReAct 范式——「思考→行动→观察」闭环

原理

ReAct(Reasoning + Acting)是工具调用的奠基性范式,由 Princeton & Google 于 2022 年提出。核心想法很简洁:把 LLM 的动作空间从「纯动作」扩展为「语言 + 动作」,在动作序列中插入自由形式的「思考(Thought)」步骤。

典型闭环如下。用户问「Arthur’s Magazine 和 First for Women 哪个创刊更早?」:

Thought 1: 我需要先查 Arthur's Magazine 的创刊年份
Action 1: Search[Arthur's Magazine]
Observation 1: Arthur's Magazine (1844–1846) 是费城的美国文学期刊

Thought 2: 1844 年创刊。再查 First for Women
Action 2: Search[First for Women]
Observation 2: First for Women 1989 年创刊

Thought 3: 1844 < 1989,所以 Arthur's Magazine 更早
Action 3: Finish[Arthur's Magazine]

思考指导行动(知道搜什么),行动反馈滋养思考(看结果决定下一步)——这和人类查快递的过程同构:想「快递到哪了」(Thought)→ 打开 App 输入单号查询(Action)→ 看到「派送中」(Observation)→决定「再等等还是出门取」(下一个 Thought→Action)。

ReAct 的两个核心对比定位了它的独特价值:

  • 与纯推理 CoT(Chain-of-Thought)对比:CoT 只在内部参数里推理,暴露在幻觉和错误传播的风险中——失败的案例里 56% 来自幻觉,假阳性率 14%。ReAct 每步都落地外部搜索,假阳性率仅 6%。
  • 与纯行动(Act-only)对比:Act-only 不做中间推理,遇到复杂分支容易迷失。在 HotpotQA 上 ReAct 准确率 27.4% vs Act 25.7%,更重要的是 ReAct 的推理过程让开发者可以追踪和纠正。

配图

图片

代码

# ReAct 循环骨架:Thought → Action → Observation → Finish

def react_loop(llm, tools, max_steps=5):
    """
    演示 ReAct 核心循环逻辑。
    真实实现中 LLM 的生成和工具调用交错进行。
    """
    context = []
    step = 0

    while step < max_steps:
        step += 1
        response = llm.generate(context)

        if response["type"] == "thought":
            # Thought 只更新上下文,不调用外部工具
            context.append(("thought", response["content"]))

        elif response["type"] == "action":
            tool_name = response["tool_name"]
            tool_args = response["tool_args"]
            # Action 落地到外部世界
            observation = tools[tool_name](tool_args)
            context.append(("observation",
                            f"{tool_name} 返回: {observation}"))

        elif response["type"] == "finish":
            return response["answer"]

    return "超出最大步数"

# 用论文示例说明闭环
tools = {
    "search": lambda q: f"关于'{q}'的摘要信息",
    "calculator": lambda expr: eval(expr),
}

数据来源:ReAct 论文 §3.3 Table 2[3]


§3 Toolformer 的另一条路:自监督学习「何时调工具」

原理

如果说 ReAct 告诉 LLM 怎么调工具(循环结构),Toolformer(Meta AI, 2023)则解决的是该不该调的自主决策问题——让 LLM 通过自监督学习,自己学会在计算器、搜索、翻译等工具中选择并调用。

方法不依赖大量人工标注:用少量示例让 LLM 在文本中标注候选 API 调用位置,通过对比「调工具后的预测损失是否降低」来筛选有价值调用,再微调模型。核心判断公式很直接:

保留条件: L_i^- - L_i^+ ≥ τ_f

其中 L_i^+ 是带上 API 调用和结果后模型对后续 token 的预测损失,L_i^- 是不做调用(或用调用但不给结果)的损失。损失降低 >= 阈值 → 这个调用有价值,保留。

实验结果印证了这个方法的有效性:

  • 数学题上模型 97.9% 自动调用计算器(ASDiv/SVAMP/MAWPS 性能翻倍)
  • 事实题上 98. % 调用 QA 工具
  • 带工具微调后的 6.7B GPT-J 模型,多项 benchmark 超越 175B GPT-3

关键发现:工具调用能力在约 7.75 亿参数时涌现——更小的模型即使给了工具也未见到提升。这意味着工具调用不是「学会的语法」,而是规模达到一定阈值后涌现出的高阶能力。

配图

图片

代码

# Toolformer 核心滤波逻辑(简化示意)

def filter_api_call(model, text, api_call, api_result,
                    token_pos, tau_f=0.5):
    """
    判断一个 API 调用是否值得保留。
    若调用后对后续 token 的预测损失降低 >= tau_f,则保留。
    """
    # L_i^+ : 带上 API 调用和结果的加权损失
    prefix_with_result = f"{api_call} -> {api_result}"
    loss_with_api = model.predict_loss(
        text, prefix=prefix_with_result, start=token_pos
    )

    # L_i^- : 不做调用 vs 调用但无结果的损失,取 min
    loss_no_call = model.predict_loss(text, prefix="", start=token_pos)
    loss_call_no_result = model.predict_loss(
        text, prefix=f"{api_call} -> ", start=token_pos
    )
    loss_without_api = min(loss_no_call, loss_call_no_result)

    # 损失降低量 = 基线 - 带 API
    improvement = loss_without_api - loss_with_api

    # 只有调用后确实帮助预测的才保留
    return improvement >= tau_f

数据来源:Toolformer 论文 §4.2[4](97.9%/98.1%)、§4.4[5](7.75B 涌现阈值)


§4 生产化落地:三大平台统一了「ReAct 闭环」

原理

OpenAI(2023.06 Function Calling)、Anthropic(2023.11 Tool Use)、Google Gemini(2023.12 Function Calling)——三家不约而同地在 API 中实现了同一件事:将 ReAct 的 Thought→Action→Observation 闭环工程化为一个 5 步 API 合约。

共性流程清晰一致:

  1. 定义工具 schema——每个工具用 JSON 或兼容格式描述名称、参数、使用场景

  2. 请求时带上工具定义——一个 tools=[...] 参数完成接入

  3. LLM 自主决策,返回结构化调用——返回 function_call / tool_use 块(含 name + arguments)

  4. 应用侧执行工具——解析参数,调用真实逻辑,获得结果

  5. 结果回传,LLM 生成回答——将工具结果拼接回对话上下文,LLM 生成最终自然语言回复

本质上,你写一行 tools=[...] 就是在实例化一个 ReAct 循环——工具调用已从论文概念变成 API 标配。

配图

图片

代码

# === 三平台最小 get_weather 示例:展示同构的 5 步闭环 ===

# --- OpenAI: function_call + JSON Schema ---
from openai import OpenAI
client = OpenAI()

tools = [{
    "type": "function",
    "name": "get_weather",
    "description": "获取指定位置的当前天气",
    "parameters": {
        "type": "object",
        "properties": {
            "location": {"type": "string",
                         "description": "城市和国家,如 Beijing, China"},
            "units": {"type": "string",
                      "enum": ["celsius", "fahrenheit"]},
        },
        "required": ["location"],
    },
}]

response = client.responses.create(
    model="gpt-5.6",
    tools=tools,
    input=[{"role": "user",
            "content": "What's the weather in Beijing today?"}],
)
# response.output 中包含 type="function_call" 的条目

# --- Anthropic: tool_use + input_schema ---
import anthropic
client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=1024,
    tools=[{
        "name": "get_weather",
        "description": "获取指定位置的当前天气",
        "input_schema": {
            "type": "object",
            "properties": {
                "location": {"type": "string"},
            },
            "required": ["location"],
        },
    }],
    messages=[{"role": "user",
               "content": "What's the weather in Beijing today?"}],
)
# response.content 中包含 type="tool_use" 的块

# --- Gemini: function_call + JSON Schema ---
from google import genai
client = genai.Client()

interaction = client.interactions.create(
    model="gemini-3.5-flash",
    tools=[{
        "type": "function",
        "name": "get_weather",
        "description": "获取指定位置的当前天气",
        "parameters": {
            "type": "object",
            "properties": {
                "location": {"type": "string"},
                "units": {"type": "string",
                          "enum": ["celsius", "fahrenheit"]},
            },
            "required": ["location"],
        },
    }],
    input="What's the weather in Beijing today?",
)
# interaction.steps 中包含 type="function_call" 的步骤

参考:OpenAI Function Calling[6]、Anthropic Tool Use[7]、Gemini Function Calling[8]


§5 横向对比:OpenAI vs Anthropic vs Gemini

统一评判维度

Schema 结构 / 决策模式 / 并行调用 / Strict 模式 / Tool Discovery 机制

维度 OpenAI Anthropic Gemini
Schema 结构 JSON Schematype: function, parameters, strict input_schema(兼容 JSON Schema)+ 可选 strict: true JSON Schematype: function, parameters
决策模式 tool_choice: "auto"/"required"/"none" tool_choice: {type: "auto"/"any"/"tool", name:...} tool_choice: "auto"/"any"/"none" + validated(preview)
并行调用 原生支持(单轮可返回多个 tool_call 支持,disable_parallel_tool_use: True 可选限制 原生支持,一次返回多个调用
Strict 模式 strict: true 保证 schema 合规 strict: true 保证 schema 合规 validated mode(preview)
Tool Discovery 需显式列出全部工具 tool_search 支持从上千工具检索 建议 10–20 个
Server/Client 工具 全 client 侧执行 Client tools + Server tools(Anthropic 执行 search/fetch/code) 全 client 侧执行

一句结论

三平台核心范式完全一致(ReAct Thought→Action→Observation 闭环),差异主要在工程实现细节——追求极致简洁选 Gemini(代码最少),需要 server-side 工具(内置搜索/代码执行)选 Anthropic,生态最成熟、社区资源最丰富选 OpenAI。

来源:OpenAI Function Calling[9]、Anthropic Tool Use[10]、Gemini Function Calling[11]


§6 边界与局限

原理

工具调用虽强大,但并非万能。现有实现有几个明确的边界,理解它们能帮你避免在生产中踩坑。

第一条:工具不能链式调用。 Toolformer 论文明确指出了这一局限:一次 API 调用产生的工具输出不能被直接传给另一个工具。例如模型不能先调搜索 API 获取用户 ID,再自动用此 ID 调另一个 API 拉详情——你需要应用层手动编排多步 Pipeline。这也是为什么 ReAct 论文中每步搜索都是一个独立的 Thought→Action→Observation 循环,而不是由模型自主组合工具链。

第二条:工具选择精度受数量影响。 三平台一致建议同时暴露的工具控制在 10–20 个,超过此阈值模型选择正确工具的准确率显著下降。OpenAI 文档称之为「软建议」、Gemini 文档列为「最佳实践」。Anthropic 的 tool_search 提供了一种按需检索思路——先从上千工具中搜索缩小候选集,再让模型选择——但该机制仍处于建设阶段。

第三条:外部搜索质量决定成败。 ReAct 论文的失败模式分析显示:23% 的失败案例来自搜索结果不具信息量(搜索 API 返回了不相关摘要),47% 来自推理循环死锁/无法恢复。这意味着 工具调用的成败不只在「调用」本身,更在于「调用了什么、结果怎么用」。同时,Toolformer 对输入措辞敏感(换一种问法可能就不调工具了),并且在当前实现中不计 API 调用成本——这在生产环境中是需要关注的工程权衡。

配图

图片

来源:ReAct §3.3 Table 2[12]、Toolformer §7[13]、Gemini 最佳实践[14](10-20 tools)、Anthropic tool_search[


§7 最小实现:亲手跑通一个工具调用闭环

本节用 OpenAI SDK 实现一个完整的 Tool Calling 闭环。改用 Anthropic / Gemini 只需替换 API 调用部分,结构完全一致。

from openai import OpenAI
import json

client = OpenAI()

# 1. 定义工具 schema
tools = [{
    "type": "function",
    "name": "get_weather",
    "description": "获取指定位置的当前天气信息",
    "parameters": {
        "type": "object",
        "properties": {
            "location": {
                "type": "string",
                "description": "城市和国家,如 Beijing, China",
            },
            "units": {
                "type": "string",
                "enum": ["celsius", "fahrenheit"],
            },
        },
        "required": ["location", "units"],
    },
}]



  ### “最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,故此将并将重要的AI大模型资料包括**AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。【保证100%免费】🆓**

# <font color = red>CSDN粉丝独家福利</font>

这份完整版的 AI 大模型学习资料已经上传CSDN,朋友们如果需要可以**扫描下方二维码**&**点击下方CSDN官方认证链接**免费领取 <font color = red>**【保证100%免费】**
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/714ce74fe7f042a29f09774f30798ca5.png)


<center> (👆👆👆安全链接,放心点击)</center>


对于0基础小白入门:

> 如果你是零基础小白,想快速入门大模型是可以考虑的。
> 
> 一方面是学习时间相对较短,学习内容更全面更集中。
>  二方面是可以根据这些资料规划好学习计划和方向。



### 👉1.大模型入门学习思维导图👈
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。

对于从来没有接触过AI大模型的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。<font color="red">**(全套教程文末领取哈)**
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/3d7ec2d63c034c6688a27dddfa4aaa1b.png#pic_center)



### 👉2.AGI大模型配套视频👈
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,每个章节都是当前板块的精华浓缩。
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/5bf7c813498b48a3b18e8d5e3fe1eb86.jpeg#pic_center)


![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/bd4618f1675b4870a7299d0212047e25.png)

### 👉3.大模型实际应用报告合集👈

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。<font color="red">**(全套教程文末领取哈)**

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/dc21268d8e9c4bda953ab1687bbca43d.png#pic_center)
### 👉4.大模型实战项目&项目源码👈
光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战项目来学习。<font color="red">**(全套教程文末领取哈)**
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/50e86face40947a0a8aff5fff7bd8144.png#pic_center)


### 👉5.大模型经典学习电子书👈
 随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。<font color="red">**(全套教程文末领取哈)**
 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/3a56d43cee7148fc8632e0a35ae74317.png#pic_center)



### 👉6.大模型面试题&答案👈

截至目前大模型已经超过200个,在大模型纵横的时代,不仅大模型技术越来越卷,就连大模型相关的岗位和面试也开始越来越卷了。为了让大家更容易上车大模型算法赛道,我总结了大模型常考的面试题。<font color="red">**(全套教程文末领取哈)**
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/2dec120ebc3f4c348816bf2ce38dfc84.png#pic_center)




## 为什么分享这些资料?

只要你是真心想学AI大模型,我这份资料就可以**无偿分享**给你学习,我国在这方面的相关人才比较紧缺,大模型行业确实也需要更多的有志之士加入进来,我也真心希望帮助大家学好这门技术,如果日后有什么学习上的问题,欢迎找我交流,有技术上面的问题,我是很愿意去帮助大家的!

## 这些资料真的有用吗?

**这份资料由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。**

资料内容涵盖了**从入门到进阶的各类视频教程和实战项目**,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你**提升薪资待遇,转行大模型岗位。**

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e8b051ce960d4d86aa31faa4ceb95adb.png#pic_center)
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/01c8d6cbd2fe455da34b0d10b53dfbc5.jpeg#pic_center)


# <font color = red>CSDN粉丝独家福利</font>

这份完整版的 AI 大模型学习资料已经上传CSDN,朋友们如果需要可以**扫描下方二维码&点击下方CSDN官方认证链接免费领取** <font color = red>**【保证100%免费】**![</font>
这份资料都绝对能帮助你**提升薪资待遇,转行大模型岗位。**

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e8b051ce960d4d86aa31faa4ceb95adb.png#pic_center)
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/01c8d6cbd2fe455da34b0d10b53dfbc5.jpeg#pic_center)


# <font color = red>CSDN粉丝独家福利</font>

这份完整版的 AI 大模型学习资料已经上传CSDN,朋友们如果需要可以**扫描下方二维码&点击下方CSDN官方认证链接免费领取** <font color = red>**【保证100%免费】**![</font>
&点击下方CSDN官方认证链接免费领取** <font color = red>**【保证100%免费】**![</font>
这份资料都绝对能帮助你**提升薪资待遇,转行大模型岗位。**

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e8b051ce960d4d86aa31faa4ceb95adb.png#pic_center)
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/01c8d6cbd2fe455da34b0d10b53dfbc5.jpeg#pic_center)


# <font color = red>CSDN粉丝独家福利</font>

这份完整版的 AI 大模型学习资料已经上传CSDN,朋友们如果需要可以**扫描下方二维码&点击下方CSDN官方认证链接免费领取** <font color = red>**【保证100%免费】**![</font>
<img src="https://img-blog.csdnimg.cn/img_convert/889b2f9e52944e7410c04936159de6cb.jpeg" style="margin: auto" />](https://i-blog.csdnimg.cn/direct/f03154a5a425481db465120332c8d3dd.png)
Logo

AtomGit AI 社区提供模型库、数据集、Agent、Token等资源

更多推荐