我最早用 ChatGPT 的时候,很自然地让它帮我查一下明天北京的天气。它说:“对不起,我无法获取实时信息。”后来我试了让它订机票、发邮件,答案都是“我做不到”。那一刻我意识到,这个模型就像一个有学问但瘫痪在床的人——脑子转得飞快,可就是动不了手。直到 2023 年,当我读到 Lilian Weng 的那篇 LLM Powered Autonomous Agents,然后亲手用 LangChain 搭了一个能自动查天气、总结新闻的 Agent 时,才真正想通:原来大模型缺的不是智商,而是一套能让它“长出手脚”的框架。这个框架,就是 Agent。而“操作系统”的比喻,恰好抓住了它的核心定位。

模型是大脑,可它一伸手就抓空
大语言模型被训练来预测下一个词,这使它极度擅长基于内部知识做推理和生成。但世界是动态的,知识是过时的,计算需要外部工具。你让 GPT-4 算 12345 × 67890,它可能给你一个近似值,甚至编一个。不是它不想算,而是它根本没法调用计算器。它没有“手”去按下计算器的按钮,也没有“脚”去访问实时的数据库。模型与外部世界的交互,完全被切断在文本输入输出的狭窄通道里。这就是为什么 ChatGPT 插件、Function Calling、Claude 的 Tool Use 一出现,大家就兴奋了——它们给模型接上了第一根神经末梢。
但接上 API 只是第一步。我一开始以为,只要把函数定义丢给模型,它就会自动调用,可实际上它经常乱调——该用搜索的时候它硬算,该用计算器的时候它瞎猜。原因在于,模型缺乏一套决策框架:什么时候该用工具?用哪个工具?参数怎么填?拿到返回结果后下一步做什么?这些决策,正是 Agent 框架要解决的问题。
一个 Agent 的“一天”:从指令到结果的全过程
假设你对 Agent 说:“帮我查一下今天北京的温度,然后根据温度推荐合适的衣服,用中文写一封邮件给我。” Agent 不会直接回答,而是像人一样开始规划:
- 理解意图:需要温度数据,然后推理穿衣建议,最后生成邮件。
- 调用工具:识别出需要天气 API,填入参数“北京”和“今天”,调用。
- 接收结果:拿到 JSON 数据,温度 25°C,晴。
- 推理并行动:根据温度,推荐短袖和薄外套。
- 生成最终回复:整合成邮件格式,输出给用户。
这个过程里,Agent 框架充当了“调度中心”:它管理每一步的上下文(记忆),决定何时调用工具,处理工具返回的信息,并判断任务是否完成。大模型只负责推理和生成的部分,但整个执行流程由 Agent 框架编排。这非常像操作系统为应用程序提供进程调度、内存管理、文件系统接口——Agent 框架就是大模型的运行时环境。
Agent 框架的三大核心组件:规划、记忆、工具
Lilian Weng 在博文中把 Agent 组件拆解为规划(Planning)、记忆(Memory)、工具使用(Tool Use),这几乎成了行业共识。每个组件都对应着操作系统的一个经典功能,但又不完全一样。
| Agent 组件 | 作用 | 类比 OS 功能 | 关键差异 |
|---|---|---|---|
| 规划(Planning) | 把复杂任务分解为子任务,决定执行顺序,自我反思纠正 | 进程调度与任务分解 | OS 调度是确定性的,Agent 规划依赖模型推理,容易出错 |
| 记忆(Memory) | 短期记忆(对话上下文)、长期记忆(外部向量数据库) | 内存管理与磁盘存储 | Agent 的记忆需要语义检索,OS 是精确寻址 |
| 工具使用(Tool Use) | 调用外部 API、数据库、代码执行器 | 系统调用与设备驱动 | Agent 的工具调用需要模型生成正确的指令,OS 是程序直接调用 |
很多人把 Agent 和微调对立起来,其实它们是互补的。微调相当于给大脑装了一个专用技能模块,比如让模型学会用特定格式输出 JSON;Agent 则是给了大脑一个工具箱,需要什么拿什么。我试过用 ReAct 模式让一个未微调的模型调用多个 API,效果比微调过的模型更灵活,但稳定性差一些。后来我理解了,微调解决的是“会不会”的问题,Agent 解决的是“能不能”的问题——前者需要模型内部有足够强的能力,后者需要好的编排。
ReAct 模式:让模型边想边做
2022 年,普林斯顿和 Google 的团队提出了 ReAct(Reasoning and Acting in Language Models),核心思想是让模型交替进行推理和行动,而不是一次性输出答案。典型的提示词结构长这样:
Question: 北京今天天气怎么样?适合穿什么衣服?
Thought: 我需要先获取北京今天的天气信息。
Action: get_weather(city="Beijing", date="today")
Observation: { "temperature": 25, "condition": "晴" }
Thought: 温度 25 度,比较暖和,推荐短袖和薄外套。
Final Answer: 今天北京天气晴,温度 25°C,建议穿短袖,带一件薄外套。
这个形式很巧妙:模型在生成 Action 时,输出的是一个被约定的格式,外部解析器拦截并执行,然后把结果塞回 Observation。模型看到 Observation 再继续 Thought。这就像人类一边做一边念叨:“我该查天气了,好,查到了,接下来该推荐衣服了。” 我最早以为 ReAct 只是让模型输出工具调用,后来才发现,它的精髓在于“Thought”环节——这给了模型一个自我纠错的机会。 比如它发现天气 API 返回错误,可以重新调整参数。这种反思能力,是 Agent 可靠性的基础。
为什么说它是“操作系统”,而不是“应用”?
有一个关键区别:应用软件解决特定领域的问题,而操作系统提供一个通用平台,让各种软件运行。Agent 框架也是这样——它不预设你做什么,而是提供一套通用的组件,让开发者根据需求构建不同的 Agent 应用。比如 LangChain 的 Agent 抽象,你可以用同一个框架搭建客服机器人、数据分析助手、自动化测试工具,就像你可以在同一个 Linux 内核上跑 Web 服务器、数据库、游戏。框架负责管理模型调用、工具注册、记忆持久化,你只需要定义工具和提示词。这种“平台化”的定位,直接催生了 AutoGPT、BabyAGI 这类自主 Agent 的爆发。
但类比不能过度延伸。操作系统管理硬件资源,Agent 框架管理的是软件抽象;OS 的内核是确定性的,Agent 的推理是概率性的。所以 Agent 框架更像一个“认知操作系统”——它管理的是注意力、知识和行动,而不是寄存器。我踩过的一个坑是:用 AutoGPT 去做一个简单的数据清洗任务,它不断生成新计划,调用 Python 解释器,陷入循环,最后烧掉了我几十美元的 API 费用。后来我明白,Agent 框架只是提供了手脚,但大脑本身的不确定性会让手脚乱动。
Agent 框架的现实困境:幻觉、循环、安全性
任何吹捧 Agent 的声音都无法回避三大问题:
- 幻觉导致错误行动:模型可能编造一个不存在的工具调用,或者对工具返回结果做出错误解读,然后执行有害操作。比如误以为某个文件可以删除。
- 无限循环:模型在规划时可能不断生成新任务,永远不触发终止条件。LangChain 的早期版本就经常出现 Agent 反复调用搜索工具,却找不到答案,陷入死循环。
- 安全边界模糊:给模型执行代码、访问网络的能力,意味着它可能被注入恶意指令,或者访问不该访问的资源。Anthropic 在 Tool Use 文档中特别强调了需要对工具调用进行沙箱化。
这些困境的根源在于:大模型本身不是可靠的计算引擎,而 Agent 框架目前还缺乏足够的“监管”机制。这就像给一个三岁小孩配了一条机械臂,他能拿起杯子,也可能打碎杯子。
我的判断:Agent 不是万能的,但它是大模型落地的必经之路
很多人问:Agent 能替代 RAG 吗?能替代微调吗?其实它们解决的是不同层面的问题。RAG 给模型一个“外挂知识库”,微调教会模型特定技能,Agent 则让模型能动态组合这些能力。在一个成熟的 AI 应用中,三者往往同时存在:RAG 提供实时信息,微调优化输出格式,Agent 编排多步任务。未来,Agent 框架会越来越像真正的操作系统:提供标准化的“系统调用”接口(工具注册)、内存管理(记忆层)、进程调度(规划器),并逐步添加安全沙箱和权限控制。到那时,我们可能真的会像部署应用一样部署 AI Agent。
但回到当下,别被“操作系统”的比喻冲昏头。Agent 框架还远没有成熟到开箱即用,它需要你精心设计提示词、明确退出条件、限制工具范围。我的建议是:从简单任务开始,用 ReAct 模式手动控制,别一上来就搞全自动代理。毕竟,手脚再灵活,也得听大脑指挥。
FAQ:关于 Agent 的几个常见误解
- Agent 是不是就是插件?
- 插件是工具,Agent 是使用工具的决策体系。模型+插件可以看作一个最简 Agent,但缺少规划与记忆管理。
- Agent 和 RAG 有什么区别?
- RAG 解决知识陈旧问题,Agent 解决行动能力问题。RAG 可以作为一个工具被 Agent 调用。
- 微调后还需要 Agent 吗?
- 需要。微调让模型更擅长某类任务,但无法让它学会动态调用工具和规划多步任务。
- 为什么我的 Agent 总在循环?
- 很可能是提示词中没有明确终止条件,或者工具返回的结果让模型无法做出判断。需要设置最大步数,并引导模型在无法获取有效信息时主动放弃。
这篇文章的很多认知,来自于我反复阅读 Lilian Weng 的博客、ReAct 论文,以及用 LangChain 和 OpenAI 函数调用做了十几个 Agent 原型的真实体验。如果你对 Agent 框架的底层实现感兴趣,我强烈推荐从 LangChain Agent 文档入手,跟着 Quickstart 跑一遍,再去回看 ReAct 论文,会发现一切都连起来了。
原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/59.html