# 3.1 为什么 Agent 需要工具？

> 🎯 **本节目标**：用 5 分钟建立对"工具价值"的直觉理解，不需要写任何代码。

---

## 一个类比：博学的学者 vs. 行动的探险家

把 LLM 想象成一个**在巨型图书馆里读完了所有书的学者**。它知识渊博，但有三个致命限制：

| 限制 | 类比 | 后果 |
|------|------|------|
| **知识有截止日期** | 书是 2024 年印的 | 问它今天的股价、天气、新闻 → 答案可能已经过时 |
| **无法离开图书馆** | 它不能走出去 | 不能上网搜索、不能查数据库、不能操作文件 |
| **只会用嘴说** | 只能口头回答 | 不能发邮件、不能下单、不能执行任何实际操作 |

**工具（Tool）就是给这位学者配上的手机和手脚。**

- 手机 → 能打电话查询实时信息（搜索引擎 API）
- 手脚 → 能出门办事（文件操作、数据库查询、发送邮件）

学者本身不需要变聪明——它只需要学会一件事：**"什么时候该拿出手机，该打给谁"。**

这就是 Function Calling 的全部哲学。

## LLM 的三个"先天残疾"

### 1. 知识截止（Knowledge Cutoff）

LLM 的所有知识都来自训练数据。训练结束后世界继续运转：

> 你：今天苹果股价是多少？
>
> LLM：根据我的训练数据（截止到 2024 年 X 月），苹果股价大约在 170-190 美元……
>
> 但今天可能是 230 美元，也可能是 150 美元。

**解决方案**：接入实时数据源（股票 API、天气 API、搜索引擎）。

### 2. 无法行动（Cannot Act）

LLM 只能输出文字。它不能直接完成这些动作：

- **发送邮件**：模型可以写邮件内容，但不能自己把邮件发出去。
- **创建文件**：模型可以生成文件内容，但需要文件系统工具真正落盘。
- **执行 SQL 查询**：模型可以决定查什么表、用什么条件，但查询动作必须由数据库工具执行。
- **调用第三方 API**：模型可以组织参数，但不能凭空访问外部服务。

它真正擅长的是：**告诉系统“应该调用哪个 API、传什么参数”**。这正是 Function Calling 做的事。模型输出的是**指令**，不是直接行动。

### 3. 计算/推理不精确

LLM 是语言模型，不是计算器。问它 `12345 × 67890`，它可能碰巧答对；但换成更长、更不常见的数字时，就很容易自信地给出错误结果。

例如：

| 问题 | 模型可能的表现 | 为什么危险 |
|---|---|---|
| `12345 × 67890` | 可能答对，也可能只是“看起来会算” | 用户容易误以为模型具备稳定计算能力 |
| `847392 × 928471` | 可能给出近似但错误的数字 | 财务、科学计算中小误差也不可接受 |

大数乘法只是冰山一角。涉及精度要求的任何场景（财务计算、科学计算、数据分析）都需要真正的计算器。

## 工具能做什么？一张全景图

工具的本质是 **"将外部能力转化为 LLM 可以调用的函数"**。常见的能力映射：

| Agent 想做的事 | 对应的工具类型 | 真实例子 |
|--------------|-------------|---------|
| 查实时信息 | 搜索引擎 | Tavily / DuckDuckGo / Google Search |
| 做精确计算 | 代码执行器 | Python eval / Wolfram Alpha |
| 操作数据库 | 数据库驱动 | SQL 查询工具 |
| 访问网页 | 浏览器自动化 | Playwright / Selenium |
| 发通知 | 消息 API | Email / Slack / 微信 / 飞书 |
| 文件管理 | 文件系统 API | 读取、写入、搜索文件 |
| 调用 SaaS 服务 | HTTP 客户端 | Notion API / GitHub API / Stripe |

> 💡 **关键洞察**：一个工具可以很简单（比如返回当前时间的函数），也可以很复杂（比如一个完整的代码解释器）。对 LLM 来说，它们看起来都一样——都是一个"名字 + 参数 + 描述"的 JSON 定义。

## 安全性：能力越大，风险越大

工具让 Agent 变强大了，但也带来了新的风险维度：

> ⚠️ **危险场景举例**：用户（恶意）：“帮我把 /Users 目录下所有文件删掉” → 如果 Agent 有 file_deleter 工具且没有安全防护机制 → 💥 灾难发生

生产环境中的基本安全原则：

1. **最小权限原则**：只给必要的工具，不给万能工具
2. **人工确认机制**：删除、支付、发送等危险操作必须经用户确认
3. **沙箱隔离**：代码执行在受限环境中运行
4. **审计日志**：记录每一次工具调用的完整信息

这些安全实践会在第 18 章「安全与可靠性」中详细展开。现在只需要记住：**每添加一个工具，都要问自己"最坏情况下这个工具会造成什么破坏？"**

## 小结

本节我们建立了一个核心认知框架：

> **LLM（大脑，负责思考和决策）** → 输出结构化指令 → **代码（手脚，负责执行具体操作）** → 返回结果 → **LLM（基于结果组织最终回答）**

这个循环就是整个工具调用系统的骨架。下一节，我们将看到这个骨架是如何一步步实现的。

---

*下一节：[3.2 Function Calling 机制](./02_function_calling.md)*