你让 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 比作一个实习生,你交给他的任务不会一步完成:

  1. 你:”帮我查一下上周的销售数据”
  2. 实习生思考(Think):”我需要先找到数据库地址和表结构”
  3. 实习生执行(Act):打开数据库客户端,查看表结构
  4. 实习生观察(Observe):”哦,有个 sales 表,字段是……”
  5. 继续思考:”那我需要写个 SQL 查询”
  6. 继续执行:写 SQL → 运行 → 看结果
  7. 满意了,整理答案交给你

Agent 的工作方式完全一样。它就是在一个循环里不断思考、执行、观察,直到任务完成。

这就是著名的 ReAct(Reasoning + Acting)模式。其中 Think 对应 Reasoning(推理),Act 对应 Acting(行动),而 Observe(观察)是环境返回的结果,它会触发下一轮 Think,这样就形成了闭环。


ReAct 循环详解

让我们用”帮我统计目录下 .py 文件的行数”这个任务,完整走一遍 ReAct 循环。

步骤角色内容
ThinkAgent“我需要先知道目标目录下有哪些 Python 文件”
ActAgent执行 ls *.py
Observe环境a.py, b.py, utils.py
ThinkAgent“有 3 个文件,现在统计每个文件的行数”
ActAgent执行 wc -l *.py
Observe环境45 a.py, 102 b.py, 67 utils.py
ThinkAgent“信息足够了,整理一下输出给用户”
AnswerAgent“共 3 个 Python 文件,合计 214 行代码”

注意这个过程的核心特征:

  • 每步有明确目标:不盲猜,每一步都建立在观察结果之上
  • 结果可验证:工具的返回结果是真实的、可追溯的,不是 LLM 编造的
  • 循环可中断:一旦信息足够,就停止循环给出答案

这和人类处理任务的方式几乎没有区别——你不可能看到问题就直接写出答案,你也是”想一想→查一查→看一看→再想想”。


Agent 的自我纠错

Agent 最厉害的地方,不是它能用工具,而是犯错了能自己发现并修复。这恰恰是普通 LLM 做不到的。

举个例子:

用户:”帮我连上公司的数据库,查一下今天的订单量。”

  1. Agent 写了连接代码,执行 → Connection refused
  2. Agent 思考:”连接被拒绝,可能是端口号写错了?或者是数据库没启动?”
  3. Agent 读配置文件 → 发现写的端口是 3307,实际应该是 3306
  4. Agent 修正端口 → 重新连接 → 成功
  5. Agent 查询订单量 → 返回结果

整个过程不需要用户插手。Agent 自己发现问题、自己排查原因、自己修复、继续执行。

普通 LLM 遇到同样的情况,只能输出一段 SQL 给你,然后说”你自己试试看能不能连上”。至于连接失败怎么办——它不知道,也不关心。

这个差异的本质在于:Agent 有一个反馈环,LLM 没有。

反馈环让 Agent 的行为从”一次性的文本生成”变成了”持续的、可纠错的执行过程”。这也是 Agent 能做复杂任务的根本原因。


Agent 能做什么

用一张表对比 LLM 和 Agent 的能力差异:

能力普通 LLMAgent
生成文本
获取实时信息
执行代码
读写文件
调用 API
多步推理有限
自我纠错
持续执行任务

一句话总结:

LLM 只能”告诉你”怎么做,Agent 可以”帮你去”做。


下篇预告

本文用大白话讲清楚了 Agent 的三个核心概念:

  1. LLM 的局限——有大脑没身体
  2. Agent = LLM + 工具 + 决策循环——给大脑装上身体
  3. ReAct 循环——Think → Act → Observe 的持续执行模式

但概念弄清楚之后,下一个问题自然就是——LangChain 是如何实现这套机制的?

LangChain Agent 的架构可以拆成三层:核心引擎、工具生态、记忆系统。下一篇我们就拆开这座金字塔,看清每一层是怎么运转的。


LangChain Agent 系列文章: