05 - Tool 工具调用:让 AI “长出双手“
这是"从 LLM 到 Agent Skill"系列的第五篇。前面四篇我们一直在聊模型本身——它怎么运作、怎么读文字、怎么"记住"对话、怎么接收指令。但有一个根本的局限始终没有解决:模型只能输出文本,无法感知和影响外部世界。这一篇,我们来聊聊它是怎么"长出双手"的——Tool(工具调用)。
一、LLM 的天然局限
回顾第一篇的核心认知:大语言模型唯一的能力,就是输出文本。
这意味着什么?
-
❌ 它不知道今天天气如何(训练数据截止到某个时间点)
-
❌ 它不知道此时此刻的股价
-
❌ 它不能帮你发一封邮件
-
❌ 它不能在你的日历里创建一个日程
-
❌ 它不能读取你本地的文件
你问它"今天北京天气怎么样",如果只靠模型本身,它要么回答不上来,要么瞎编。
这就是 LLM 的核心局限:封闭的知识边界。
二、Tool(工具):给模型装"假肢"
2.1 工具的本质是什么?
Tool(工具) 本质上就是一个函数(Function)。
def get_weather(city: str, date: str) -> str: # 调用天气 API,返回天气信息 return "北京今天晴,22°C"
这个函数接收城市名和日期,返回天气信息。模型不认识天气,但它知道:当用户问天气时,有一个叫 get_weather 的工具能用。
2.2 工具的描述(Function Definition)
给模型看的不是代码,而是工具的描述:
{
"name": "get_weather",
"description": "查询指定城市的天气信息",
"parameters": {
"city": "城市名称,如'北京'",
"date": "日期,如'2025-05-24'"
}
}
这个描述本身会被放入 Context(作为 System Prompt 或工具列表的一部分)。模型读取后就知道:当我遇到天气相关的问题,可以"调用"这个工具。
三、工具调用的完整流程(四个角色)
这是本文最核心的一张流程图:
用户:"今天北京天气怎么样?"
│
▼
┌──────────────────────────────────────┐
│ 平台(Platform) │
│ │
│ 将「用户问题 + 可用工具列表」打包 │
│ 发给大模型 │
└──────────────────────────────────────┘
│
▼
┌──────────────────────────────────────┐
│ 大模型(LLM) │
│ │
│ 分析问题 → 决定调用 get_weather │
│ 输出:【调用指令】 │
│ { │
│ "tool": "get_weather", │
│ "params": { │
│ "city": "北京", │
│ "date": "2025-05-24" │
│ } │
│ } │
└──────────────────────────────────────┘
│
▼
┌──────────────────────────────────────┐
│ 平台(Platform) │
│ │
│ 接收指令 → 实际执行函数 → 获取结果 │
│ "北京今天晴,22°C,北风3级" │
└──────────────────────────────────────┘
│
▼
┌──────────────────────────────────────┐
│ 大模型(LLM) │
│ │
│ 接收工具返回的数据 → 整合生成回答 │
│ "北京今天天气晴朗,气温22°C, │
│ 吹北风3级,适合出门。" │
└──────────────────────────────────────┘
│
▼
用户看到回答
四、四个角色的职责
| 角色 | 做什么 |
|---|---|
| 用户(User) | 提出问题或任务 |
| 平台(Platform) | 传话筒 + 协调者 + 执行器。管理 Context,把工具列表告诉模型,真正执行函数,回传结果 |
| 大模型(LLM) | 分析问题,决策调用哪个工具、填什么参数。只输出"调用指令"文本 |
| 工具(Tool) | 被平台调用,执行实际逻辑(调 API、读文件等),返回结果 |
五、最重要的认知:模型不执行工具
大模型只是输出了一段文本——一个包含"工具名"和"参数值"的 JSON 字符串。
它不执行任何东西。
真正去调天气 API 的,是外部的"平台"。模型说"帮我查一下北京天气"→ 平台听到后去查 → 把结果贴回来 → 模型看着结果说"哦,北京晴天"。
就像一个人被锁在房间里,面前只有一个打字机。他打字说"请帮我看看窗外有没有下雨"。外面的人看了纸条,去窗口看了看,塞回来另一张纸条:"没下雨,晴天。"房间里的人于是打字回复:"外面是晴天,可以出门。"
模型就是那个锁在房间里的人。他从来没有真正看见过窗外。
六、工具调用的实际应用场景
6.1 实时信息获取
-
天气查询
-
股票价格
-
新闻搜索
-
航班状态
6.2 外部系统操作
-
发送邮件
-
创建日历事件
-
操作数据库(增删改查)
-
调用企业内部 API
6.3 本地环境交互
-
读写文件
-
执行 Shell 命令
-
操作浏览器
-
控制本地软件
在 Claude Code 这个产品里,工具就是代码编辑、文件读写、命令执行等能力——模型"说"要改哪一行,平台帮它改。
七、工具调用的进阶形式
7.1 多工具并行调用
模型可以一次性输出多个工具调用指令,没有依赖关系的工具可以并行执行:
[
{"tool": "get_weather", "params": {"city": "北京"}},
{"tool": "get_weather", "params": {"city": "上海"}}
]
7.2 工具调用链
一个工具的结果可以作为另一个工具的输入:
用户:"帮我查一下北京天气,要是下雨就帮我找最近的雨伞店"
→ 调 get_weather("北京") → "下雨"
→ 调 search_nearby("雨伞店", "北京") → "XX路12号"
→ 回复用户
这其实就是 Agent 的雏形了——我们第七篇会详细讲。
八、总结
Tool 是 LLM 从"嘴"到"手"的关键一步:
-
工具本质上是函数,平台给模型看的只是函数的"描述"(名称、参数、用途)。
-
模型只输出调用指令(JSON 文本),不真正执行。平台负责执行并回传结果。
-
工具让模型获得了感知实时信息和影响外部世界的能力,是所有 AI 应用的基础能力。
下一篇,我们来聊工具接入的标准化问题——MCP(模型上下文协议),看看怎么避免为每个平台重复造轮子。
本系列文章:
-
LLM 大语言模型
-
Token 与 Tokenizer
-
Context 与 Context Window
-
Prompt 提示词
-
Tool 工具调用 ← 你在这里
-
MCP 模型上下文协议(待发布)
-
Agent 智能体(待发布)
-
Agent Skill(待发布)
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)