Agent 是什么——LLM 只是“嘴”,Agent 才有“手”
Agent 是什么——LLM 只是"嘴",Agent 才有"手"
这是「Agent 工程化」系列的第一篇。本系列从概念讲到生产落地,每篇都能独立阅读。
这篇我们用最朴素的方式把"Agent 到底是什么"讲清楚,不需要任何前置知识。
标签:#AI智能体 #Agent工程化 #大语言模型 #LLM #人工智能 #AI开发 #ReAct #LangChain #AI应用 #技术博客
从一个真实场景说起
先看一句话需求:
“帮我订一张下周五上海飞北京的机票,要早班机。”
把它分别丢给三种"AI",看看它们各自的表现。
第一种:普通 LLM(比如打开 ChatGPT 直接聊)
LLM 很聪明,它会告诉你:“建议选早上 8 点前的航班,比如东航 MU5101,07:00 起飞。” 它甚至能帮你列出推荐清单、避坑指南。
但然后呢?没有了。它不会真的去订。因为它只是个"聊天大脑"——只会输出文字,没有手、没有腿,碰不到真实的订票系统。
第二种:RAG 应用(比如一个"懂行"的旅游知识助手)
它比普通 LLM 强一点:可以接入最新的航班信息、机场攻略,回答里带着来源,看起来更可靠。
但同样是只动嘴不动手。你问它"哪班最早",它答得头头是道;你说"帮我下单",它只能摊手。
第三种:Agent(一个真正的 AI 旅行助手)
它收到这句话后,会自己展开一连串动作:
- 调"查航班"工具:下周五上海→北京有哪些早班机?
- 对比几个候选航班的价格和时间
- 调"下单"工具帮你订票
- 返回订单号:“已订好,东航 MU5101,07:00 起飞”
中间不用你操心,它自己决定下一步干什么、什么时候结束。
这三种 AI 的区别在哪?
普通 LLM / RAG 回答的是"知道",Agent 干的是"做到"。
差距不在"懂不懂",在"能不能动手"。
Agent 到底是什么
一句话定义:
Agent = LLM(大脑)+ 工具(手脚)+ 自主决策循环(灵魂)
拆开看:
- LLM(大脑):负责理解你说的话、推理、做决策。但它有个天生的限制——只会输出文字,碰不到真实世界。
- 工具(手脚):查航班、查天气、下单、发消息……把 LLM 的"想法"变成对外界的"行动"。这是 Agent 和聊天机器人的分水岭。
- 自主决策循环(灵魂):思考 → 行动 → 观察结果 → 再思考。任务没完成就继续循环,直到做完为止。
这里多说一句:工具并不神秘。它就是一个普通的函数或 API,比如search_flight(出发城市, 到达城市, 日期)返回航班列表,book_ticket(航班号, 人数)返回订单号。你天天写的那种。Agent 做的事情,就是"让 LLM 来决定在什么时候、用什么样的参数,去调用这些函数"。
用一张表看普通 LLM 和 Agent 的区别:
| 普通 LLM | Agent | |
|---|---|---|
| 输入 | 一句话 | 一个目标 |
| 过程 | 一次推理就回答 | 多步推理 + 反复调用工具 |
| 输出 | 一段文字 | 完成任务的最终结果(订单号、诊断结论……) |
| 能力边界 | 只有训练时见过的知识 | 训练知识 + 实时查数据 + 动手操作 |
还有个常被问的问题:Agent 和 RAG 是什么关系?
- RAG(检索增强生成)解决的是"带资料回答":LLM 回答前先查资料库,引用着说。
- Agent 解决的是"动手解决问题":调工具、做动作。
两者不冲突,经常一起用。一个 AI 旅行助手,既需要 RAG 去查"退改签政策"这类文档,也需要工具去真正下单。后面系列会展开讲。
Agent 的"自主性"是分级的
很多人以为 Agent 等于"全自动",其实"自主"是有梯度的。业界通常分 L0-L5:
| 级别 | 名称 | 例子(旅行助手) |
|---|---|---|
| L0 | 无自主 | 纯聊天,只会回答"北京几点有早班机" |
| L1 | 工具调用 | 会调"查天气"工具,但只做这一件事 |
| L2 | 链式调用 | 查完机票,接着查酒店,按固定顺序走 |
| L3 | 条件分支 | 看价格:贵的走"推荐经济舱"分支,便宜的走"直接订"分支 |
| L4 | 自主规划 | 自己把"订机票+订酒店+排行程"拆成计划再执行 |
| L5 | 多 Agent 协作 | 机票助手、酒店助手、行程助手分工合作 |
现实是:大多数产品停留在 L1/L2。越往上越强大,也越需要工程化手段兜底(后面系列会讲)。下次看到"自主智能体"这种词,先问一句:它到 L 几了?
Agent 的核心架构:就一个循环
无论多复杂的 Agent,核心骨架都是同一个循环:
用伪代码看更直白:
while任务未完成:llm 输出{思考,要调用的工具,参数}执行工具调用 把结果放回对话历史 判断任务是否完成回到订机票的例子,这个循环大概长这样:
| 轮次 | 思考(thought) | 行动(action) | 观察(observation) |
|---|---|---|---|
| 1 | 得先查下周五有哪些航班 | 查航班(上海→北京, 下周五) | 3 个早班机候选 |
| 2 | 挑最早的,看下价格和余票 | 查票价(东航MU5101) | 经济舱 ¥890,有票 |
| 3 | 信息齐了,直接下单 | 下单(东航MU5101, 1人) | 订单号 TD2026XXXX |
| 4 | 完成了,告诉用户 | 结束 | — |
就这么简单。所谓 Agent,本质就是"让 LLM 在一个循环里反复思考、动手、看结果"。第二篇我们会手写一个最小可运行的 Agent(50 行代码),到时候你会发现它真的就只有一个 while 循环。
但生产环境的 Agent,没那么简单
上面的循环能跑通 Demo,但离"好用"还很远。我拆了 6 个实际问题——它们正好是本系列的骨架:
- 怎么防止 Agent 乱来?万一它把"下单"工具连点十次,或者花光你的预算还在循环——需要护栏(第 9 篇)
- 怎么知道它干了什么、花了多少钱?每次调工具、每次消耗 token,都要记账和可观测(第 9、10 篇)
- 聊着聊着就"失忆"了?上下文窗口装不下太多内容——需要上下文管理(第 4 篇)
- 怎么让它记住上次聊过的事?今天说的,明天还认得——需要记忆系统 Memory(第 5 篇)
- 怎么让它懂"退改签政策"?这些不在训练数据里——需要RAG 知识库(第 6 篇)
- 复杂行程一个循环搞不定?规划 5 日游要拆步骤、能并行——需要编排模式与多 Agent(第 8 篇)
三个常见误区
误区一:Agent = 调大模型 API
不少人觉得"我接了大模型接口,我就在做 Agent 了"。不是的。只做"你说一句,它答一句",那是聊天机器人;有了工具、有了循环,能真正动手完成任务,才叫 Agent。
误区二:Agent 必须用 LangChain 这类框架
框架只是实现方式之一。50 行手写代码也能跑一个像样的 Agent,而且能让你真正理解原理。用框架不等于懂 Agent(第 2 篇会现场演示手写版)。
误区三:Agent 是万能的
它有幻觉,可能一本正经胡说;上下文窗口有限,聊太多会"失忆";给它的工具如果没护栏,它可能真的给你乱下单。越能干的 Agent,越需要工程化手段兜底——这是整个系列最想传达的一件事。
下篇预告
下一篇我们不再讲概念,直接动手:用 50 行 Python 手写一个最小可运行的 ReAct Agent。
它只有一个 while 循环 + 几个简单的"工具",却能自己完成这个任务:
“帮我看看北京明天天气,下雨的话提醒我带伞。”
到时候你会发现,它跑起来的每一步,都能对上今天讲的循环:
| 轮次 | 思考 | 行动 | 观察 |
|---|---|---|---|
| 1 | 先查北京明天的天气 | 查天气(北京, 明天) | 小雨,18-22℃ |
| 2 | 要下雨,提醒用户带伞 | 结束 | — |
框架只是包装,循环才是原理——下一篇我们亲手把它写出来。
本系列路线(从 0 到 1):Agent 是什么 → 手写最小 ReAct → Function Calling 与工具设计 → 上下文管理 → Memory 记忆系统 → RAG 知识库 → Skill 自学习 → 编排模式与多 Agent → 给 Agent 装护栏 → 生产部署与可观测 → 评测与回归
