一个悖论
前两章我们建立了一个认知:LLM是概率预测引擎,没有“事实”概念,输出天然不可靠。
现在我们要面对一个悖论:
如果AI的输出天然不可靠,为什么还要让它去做事?
答案藏在“做事”这个词里。
当AI只能“说话”时,它的错误是不可验证的:一段文字里有没有编造的数据,你只能靠自己的知识来判断。但当AI能“做事”时,很多错误会立刻暴露:调用的API返回了错误码,执行代码抛出了异常,生成的SQL语法错误导致数据库拒绝执行。
让AI“做事”,反而让它变得更可靠。
因为“做事”引入了现实世界的反馈。反馈让不可验证变成了可验证。这就是本章的核心:不是让AI更聪明,是给它一套“手脚”(工具),让它得到更多上下文、输出可以被检验。
只会说话的AI,上限在哪
一个纯文本的AI,不管你Prompt写得多么精巧,它有几件事永远做不到:
- 它不能查今天的天气。因为它的训练数据截止到某个日期。
- 它不能读你公司的数据库。因为你的销售数据不在它的训练数据里。
- 它不能发邮件、不能操作文件、不能运行代码、不能调用其他软件。
- 它不能“做完了再检查一遍”,因为它是单次生成。
本质上,一个文本生成式AI是一个被关在“语言房间”里的人。 这个房间里只有书,它靠这些书学会了说话,但它看不到房间外面正在发生什么。
你问它“今天上海天气怎么样”,它只能从书里找到关于上海气候的描述,综合出一个“看起来像天气预报”的回答。因为它推不开窗户“看天气”。
给AI工具,就是给这间房开一扇窗。
AI Agent是什么
定义是:
AI Agent = LLM + 工具 + 决策循环 + 其他约束
如果还需要更简洁:
AI Agent = LLM + Harness
“Harness”指的是一个为Agent设计的控制、编排与治理框架,核心思想是“以约束换能力”。但为了让你更清楚到底怎么“约束”,我们先来看前一个定义:
LLM:负责理解任务、规划步骤、生成操作。它是“大脑”。
工具:让LLM能做的事情。搜索互联网、查询数据库、读写文件、调用API、执行代码,每一类“能做的事”就是一个工具。
决策循环:让Agent不只是“回答一次”,而是“观察→思考→行动→观察结果→继续行动”,像人一样在循环中推进任务。
一个典型的Agent执行过程是这样的:
图1:一个典型的Agent执行过程
注意这个过程中的关键环节:Agent不是一次生成答案。 它在“思考-行动-观察”之间循环了好几次。每次调用工具,都是一次和真实世界的交互。每次交互的返回结果,都在修正它下一步的决策。
这和纯文本生成有本质区别:纯文本AI的输出只能“看起来对”。Agent的输出可以“通过事实反馈来验证”。
Function Calling:工具调用的底层机制
Agent调用工具,在工程上通常通过Function Calling(函数调用)实现。这是最早的Agent调用工具的方式。不需要你会写代码,你只需要理解它的逻辑。
工作原理:
- 定义工具。 开发者告诉模型:“你可以调用这些函数。这是函数名,这是参数列表,这是功能描述。”
- 模型决策。 在处理用户请求时,模型判断是否需要调用工具。如果需要,它生成一个结构化的调用指令,并不是自然语言,而是精确的函数名+参数值。
- 系统执行。 Agent的脚手架代码截获这个调用指令,真正执行对应的函数(比如真的去调用一个天气API)。
- 结果返回。 函数执行的返回结果,被追加到上下文中。模型在下一轮生成时,基于这个真实结果来回答。
关键在第4步:工具的返回结果是“事实”,不是“预测”。 天气API返回了25°C,这个25°C不是概率采样出来的,是真实的传感器读数。当这个“事实”进入上下文,它就像一个锚,把后续预测的概率分布牢牢锁在真实数据附近。
这就是为什么工具能提高可靠性的根本原因:它把真实世界的信号注入了AI的概率引擎。
MCP:让模型和工具说同一种语言
AI行业有一个尴尬的问题:每家模型公司的工具调用格式都不一样。OpenAI公司的函数调用是一套JSON Schema。Anthropic公司的工具定义是另一套。开源模型的格式又不一样。开发者为每个模型重写一遍工具接口,这是Agent生态最大的摩擦。2024年底,Anthropic提出了MCP(Model Context Protocol),这是一个开放协议,定义了模型和工具之间的标准通信格式。
类比一下:MCP之于AI工具调用,就像USB-C之于充电。以前每个手机有自己的充电口,出门要带一堆线。USB-C统一了物理接口。MCP想做的是统一“模型-工具”之间的逻辑接口。
你不用关心具体的技术细节。你只需要知道:MCP正在成为行业标准,它让“换模型”不再需要“重写所有工具”。这很重要,因为它意味着你的Agent系统可以不绑定具体模型,这对长期维护和成本控制都至关重要。
工具设计的四个原则
不是给AI一堆工具就叫Agent。糟糕的工具设计,会让Agent比纯文本AI更危险。
四个基本原则:
1. 原子性——一个工具只做一件事
“搜索互联网”和“发送邮件”不应该在同一个工具里。为什么?因为AI可能“误解”任务,在你想让它搜索的时候,它调用了“发送邮件”。
每个工具应该有明确、单一的功能边界。功能越单一,调用越可预测,错误的影响范围越小。
2. 可验证性——工具的返回结果必须能被判断对错
一个工具返回了“操作成功”,这够不够?不够。
你需要返回可验证的信息:操作了什么、结果是什么、有没有异常。比如一个文件写入工具,不应该只返回“写入完成”,还应该返回“写入了多少字节、文件的哈希值、是否有权限错误”。
因为Agent需要这些信息来判断“下一步该做什么”。模糊的返回值等于没返回,因为AI会“猜”操作结果,然后基于猜测继续行动。这就回到了老问题。
3. 安全性——工具的操作范围必须有硬约束
一个文件操作工具,不应该能访问整个硬盘。它应该被限制在特定目录下。
一个网络请求工具,不应该能访问内网地址。它应该有一个白名单。
这些约束应该在工具层面实现,不仅是靠Prompt里写“请不要访问XX”,还要在代码层面硬限制。因为你永远不知道AI什么时候会“忽略”这个约束,因为它随时会“忘记”。
4. 幂等性——同一个操作执行多次,结果应该一致
“发送邮件”不是幂等的,因为发两次,收件人会收到两封。
“查询天气”是幂等的,短时间内查两次,结果应该一样。
在设计工具时,尽量让工具幂等。这样当Agent因为不确定性重试一个操作时,不会造成重复的副作用。
从单个工具到工具链
一个工具能做的事有限。真正的能力来自工具链,即前一个工具的输出成为后一个工具的输入。
举例来说:
搜索工具 → 找到相关网页链接
↓
爬取工具 → 提取网页正文
↓
摘要工具 → 将正文压缩为500字
↓
翻译工具 → 译为中文(用户语言)
↓
输出给用户
但工具链也放大了风险。
如果“搜索工具”返回了一个不相关的链接,“爬取工具”提取了错误的内容,“摘要工具”在错误内容上做了摘要,“翻译工具”忠实地翻译了一个错误的摘要。错误在每一步都被忠实地传递,最终用户看到的是一段翻译流畅但内容完全不对的文字。
这就是工具链的雪崩效应:上游的一个小错误,在经历了多次“忠实处理”后,变成了下游的一个大错误。
解法不在“让每个工具更聪明”,解法在每一步都加入验证。搜索结果的URL是否来自可信源?爬取的内容是否和搜索关键词相关?摘要是否保留了关键事实?这需要约束与评估体系。
Agent从“说错”变成了“做错”
我们在前面已经点过这个问题。这里展开。
LLM最坏的情况是输出一段错误信息。Agent做错事,后果可能是:
- 删除了不该删除的数据
- 向所有客户发送了错误的邮件
- 在服务器上执行了一段有问题的脚本
- 调用了付费API循环消耗预算
有研究机构对OpenClaw(2026年初爆火的AI Agent框架)的公网部署实例进行安全分析后发现,超过46万个公网实例中约27%存在高危安全漏洞,可能被远程接管。这不是“AI说了不该说的话”,这是“AI拥有了一个可以被攻击的操作系统级入口”。
所以,当你给AI“手脚”时,你必须同时给它“护栏”。
每一个工具,都应该有一个对应的安全策略:什么情况下可以调用?什么情况下需要人类确认?什么情况下自动拒绝?这是下一章的核心内容。
目标驱动循环:Agent开始“自己干活”
工具调用的一个重大进化,是“目标驱动循环”。
传统模式:你给一个任务 → AI调一个工具 → 返回结果 → 你来判断下一步。
目标驱动模式:你给一个目标 → AI自己规划步骤 → 循环调用工具 → 自己验证结果 → 直到目标达成。
2026年初,有开发者提出了一个概念:让AI编程工具持续工作直到任务完成,而不是每次都要你手动确认下一步。这个想法在不到两周内被多家公司实现:OpenAI的Codex和Anthropic的Claude Code都上线了类似功能。Claude Code甚至引入了一个独立的小模型做“裁判”——在工具链的每一步自动验证输出是否符合预期。
目标驱动循环是Agent从“工具”变成“同事”的关键一步。但它也带来了新风险:如果目标定义不够精确,Agent可能在某个子步骤陷入死循环,反复消耗Token和算力却没有任何进展。
解决这个问题的关键是:给Agent一个明确的“结束条件”和“失败条件”。
本章小结
从“只会说”到“会做”,不是能力的渐进提升,是一次质变。
- 纯文本生成式AI(LLM):输出不可验证,质量靠“感觉”
- 有工具的AI:输出可以被现实反馈验证
- 工具链AI:能力复合增长,但错误也复合增长
- 目标驱动Agent:AI开始自主干活,但需要护栏
这次质变的核心,不是“模型更强了”。是你给了它一个和真实世界交互的接口。但接口越大,失控的可能性越大。
自查清单
- 我能说出Agent的三个重要组件
- 我理解Function Calling的基本流程
- 我知道MCP要解决什么问题
- 我能列出工具设计的四个原则
- 我理解为什么Agent比聊天机器人更危险
参考链接
- "Model Context Protocol (MCP) Specification". https://modelcontextprotocol.io/
- Anthropic, "Best Practices for Computer and Browser Use with Claude". https://docs.anthropic.com/en/docs/build-with-claude/tool-use/computer-use
- OpenClaw公网实例安全分析, arXiv:2604.04759. https://arxiv.org/abs/2604.04759
- Shunyu Yao et al., "ReAct: Synergizing Reasoning and Acting in Language Models", ICLR 2023. https://arxiv.org/abs/2210.03629
有了手脚的AI,能力暴涨,但翻车方式也暴涨。怎么让它不乱来?我们要讲约束、校验和上下文工程。
