LangChain Agent 系列(一):Agent 是什么?

LangChain Agent 系列(一):Agent 是什么?
你让 ChatGPT 帮你统计项目代码行数,它说”抱歉,我做不到”这是普通 LLM 最尴尬的时刻——它很聪明,但被困在训练数据的牢笼里。 你或许有过这样的体验:问 ChatGPT 一个问题,它滔滔不绝,逻辑清晰;可一旦让它帮你查一下今天的天
你让 ChatGPT 帮你统计项目代码行数,它说”抱歉,我做不到”
这是普通 LLM 最尴尬的时刻——它很聪明,但被困在训练数据的牢笼里。
你或许有过这样的体验:问 ChatGPT 一个问题,它滔滔不绝,逻辑清晰;可一旦让它帮你查一下今天的天气、读一下你桌面上的文件、或者帮你调一下公司的 API——它立刻摊手:”抱歉,我无法访问外部信息。”
这不是它不想帮你,而是它没有手,也没有眼睛。
本文是 LangChain Agent 系列的第一篇。我们先用大白话讲清楚 Agent 到底是什么、为什么需要它,不写一行代码。读完你会理解 Agent 的核心思想,为后面的实战打好基础。
普通 LLM 的局限
普通 LLM(大语言模型)本质上是一个”超级知识库 + 文本生成器”。它读过的所有东西都压缩在模型参数里,但它有三个致命短板:
1. 无法触及真实世界
LLM 的知识截止于训练数据日期。它不能查文件、不能调 API、不能看天气、不能读数据库——因为它的输入只有一段文本,输出也只有一段文本。
你问它”帮我统计一下当前目录下所有 .py 文件的行数”,它只能说:
“我无法读取你的文件系统。你可以用
wc -l *.py命令来统计。”
它能告诉你怎么做,但不能帮你做。
2. 复杂任务一步到位出错率高
对于需要多步推理的任务,LLM 必须一次性输出完整答案。没有中间检查,没有回调,没有试错——一步到位。就像让你闭着眼睛解一道数学大题,中间过程全在脑子里算,写错了也没机会改。
结果就是:问题越复杂,正确率越低。
3. 无法自我修正——错了就错了
当你指出 LLM 的错误,它可以道歉然后重新输出。但它不会主动发现自己错了,更不会自己去排查哪里出了问题。它只会根据你的反馈生成新回答,而不是像人一样回过头去检查自己的推理过程。
这三个局限性,用一句话总结就是:
LLM 有大脑,但没有身体。
Agent 的核心思想
那有没有办法给 LLM 装上”身体”?这就是 Agent 的由来。
Agent 的核心定义非常简单:
Agent = LLM + 工具 + 决策循环 可以类比成一个while循环♻️
类比一下:如果 LLM 是大脑,那工具就是手和眼睛,决策循环就是”先想、再做、再观察、再调整”的行为模式。
工具:Agent 的”手和眼睛”
工具赋予了 Agent 与外部世界交互的能力:
- 搜网页:获取最新信息
- 读文件:访问本地文件系统
- 执行代码:跑 Python、Shell 等脚本
- 调用 API:查天气、发邮件、操作数据库
有了工具,Agent 不再是被困在训练数据里的”嘴强王者”,而是能真正干活的执行者。
决策循环:Think → Act → Observe
如果把 Agent 比作一个实习生,你交给他的任务不会一步完成:
- 你:”帮我查一下上周的销售数据”
- 实习生思考(Think):”我需要先找到数据库地址和表结构”
- 实习生执行(Act):打开数据库客户端,查看表结构
- 实习生观察(Observe):”哦,有个
sales表,字段是……” - 继续思考:”那我需要写个 SQL 查询”
- 继续执行:写 SQL → 运行 → 看结果
- 满意了,整理答案交给你
Agent 的工作方式完全一样。它就是在一个循环里不断思考、执行、观察,直到任务完成。
这就是著名的 ReAct(Reasoning + Acting)模式。其中 Think 对应 Reasoning(推理),Act 对应 Acting(行动),而 Observe(观察)是环境返回的结果,它会触发下一轮 Think,这样就形成了闭环。
ReAct 循环详解
让我们用”帮我统计目录下 .py 文件的行数”这个任务,完整走一遍 ReAct 循环。
| 步骤 | 角色 | 内容 |
|---|---|---|
| Think | Agent | “我需要先知道目标目录下有哪些 Python 文件” |
| Act | Agent | 执行 ls *.py |
| Observe | 环境 | a.py, b.py, utils.py |
| Think | Agent | “有 3 个文件,现在统计每个文件的行数” |
| Act | Agent | 执行 wc -l *.py |
| Observe | 环境 | 45 a.py, 102 b.py, 67 utils.py |
| Think | Agent | “信息足够了,整理一下输出给用户” |
| Answer | Agent | “共 3 个 Python 文件,合计 214 行代码” |
注意这个过程的核心特征:
- 每步有明确目标:不盲猜,每一步都建立在观察结果之上
- 结果可验证:工具的返回结果是真实的、可追溯的,不是 LLM 编造的
- 循环可中断:一旦信息足够,就停止循环给出答案
这和人类处理任务的方式几乎没有区别——你不可能看到问题就直接写出答案,你也是”想一想→查一查→看一看→再想想”。
Agent 的自我纠错
Agent 最厉害的地方,不是它能用工具,而是犯错了能自己发现并修复。这恰恰是普通 LLM 做不到的。
举个例子:
用户:”帮我连上公司的数据库,查一下今天的订单量。”
- Agent 写了连接代码,执行 →
Connection refused - Agent 思考:”连接被拒绝,可能是端口号写错了?或者是数据库没启动?”
- Agent 读配置文件 → 发现写的端口是 3307,实际应该是 3306
- Agent 修正端口 → 重新连接 → 成功
- Agent 查询订单量 → 返回结果
整个过程不需要用户插手。Agent 自己发现问题、自己排查原因、自己修复、继续执行。
普通 LLM 遇到同样的情况,只能输出一段 SQL 给你,然后说”你自己试试看能不能连上”。至于连接失败怎么办——它不知道,也不关心。
这个差异的本质在于:Agent 有一个反馈环,LLM 没有。
反馈环让 Agent 的行为从”一次性的文本生成”变成了”持续的、可纠错的执行过程”。这也是 Agent 能做复杂任务的根本原因。
Agent 能做什么
用一张表对比 LLM 和 Agent 的能力差异:
| 能力 | 普通 LLM | Agent |
|---|---|---|
| 生成文本 | 是 | 是 |
| 获取实时信息 | 否 | 是 |
| 执行代码 | 否 | 是 |
| 读写文件 | 否 | 是 |
| 调用 API | 否 | 是 |
| 多步推理 | 有限 | 是 |
| 自我纠错 | 否 | 是 |
| 持续执行任务 | 否 | 是 |
一句话总结:
LLM 只能”告诉你”怎么做,Agent 可以”帮你去”做。
下篇预告
本文用大白话讲清楚了 Agent 的三个核心概念:
- LLM 的局限——有大脑没身体
- Agent = LLM + 工具 + 决策循环——给大脑装上身体
- ReAct 循环——Think → Act → Observe 的持续执行模式
但概念弄清楚之后,下一个问题自然就是——LangChain 是如何实现这套机制的?
LangChain Agent 的架构可以拆成三层:核心引擎、工具生态、记忆系统。下一篇我们就拆开这座金字塔,看清每一层是怎么运转的。
LangChain Agent 系列文章:
- (一) Agent 是什么?(本文)
- (二) LangChain Agent 内部怎么转的?
- (三) 从零搭建代码助手 Agent













