第 3 章:ReAct 循环 —— Agent 的心脏
“LLM 天生是‘快思考’的直觉机器,而 ReAct 强行给它装上了‘慢思考’的刹车。”
🔖 商业洞察:从商科视角看,ReAct 是一场 ROI(投资回报率) 的博弈。没有 止损线 (Stop-Loss) 和 审计机制 (Audit) 的 Agent,终将成为吞噬算力的黑洞。
如果说 LLM(大语言模型)是 Agent 的大脑,那么 ReAct (Reasoning + Acting) 就是它的心跳。
诺贝尔奖得主丹尼尔·卡尼曼在《思考,快与慢》中提出双系统理论:
- System 1(快思考) :依赖直觉、联想,毫秒级反应,但容易掉入陷阱。
- System 2(慢思考) :依赖逻辑、推理,耗能高,但严谨精准。
LLM 是极致的“系统 1” 。它是一个概率预测机,能在瞬间接话,但它从不反思“我是对的吗”。 ReAct 的本质,就是通过代码工程,强行逼迫 LLM 开启“系统 2” 。
答案就在这个循环里:思考 (Reason) → 行动 (Act) → 观察 (Observe)。
3.1 逆向剖析:为什么 LLM 是“自信的骗子”?
心理学中的 达克效应 (Dunning-Kruger Effect) 指出:能力越低的人,往往越自信。LLM 完美符合这一特征——因为它不知道自己不知道。
🚫 Mode A:纯 LLM 模式(直觉陷阱)
任务: “帮我调查竞争对手 A 的企业版定价。”
如果你直接问 ChatGPT(无插件),它会启动“系统 1”,调用记忆中的概率分布:
用户:竞争对手 A 多少钱?
LLM (潜意识) : 我的权重里没有这个数字,但根据概率,这类问题通常这样回答...
LLM (输出) :竞争对手 A 采用灵活定价策略...据推测,其企业版约为 $19/月。 (纯属虚构)
📉 痛点诊断:
- 幻觉 (Hallucination) :缺乏 元认知 (Metacognition) ,无法区分“事实”与“想象”。
- 时效性熵增:训练数据截止的那一刻,它的世界就停止了转动。
✅ Mode B:ReAct 模式(慢思考循环)
ReAct 借鉴了科学实验的 “假设-验证” 逻辑,将一次性生成重构为 PDCA 循环 (Plan-Do-Check-Act) 。
🔄 Phase 1: Plan & Do (假设与行动)
- [Reason] 直觉告诉我直接搜名字可能不准。我需要先做一次 “尽职调查” (Due Diligence) ,确认官网。
- [Act]
GoogleSearch("竞争对手 A 官网") - [Observe] 找到官网链接
www.comp-a.com。
🔄 Phase 2: Check (验证与修正)
- [Reason] 官网找到了,通常定价在
/pricing。就像审计员查账一样,我要去读取源文件。 - [Act]
Browse("www.comp-a.com/pricing") - [Observe] 页面显示:Enterprise "Contact Sales"。
🔄 Phase 3: Deliver (交付)
- [Reason] 没有直接价格,不能瞎编。基于现有证据,给出定性分析,并标注“需询价”。
- [Act] 生成最终报告。
✨ 哲学升维 ReAct 不是让 AI 变聪明了,而是赋予了它 “审视自我” 的机会。从“猜答案”到“查证据”,这是从 文学创作 到 科学研究 的范式转移。
3.2 解剖 ReAct:控制论视角
ReAct 源自 Google Research 2022 年的论文。从 控制论 (Cybernetics) 的角度看,这是一个经典的 负反馈调节回路。
“脑子(推理)输出控制信号,手(行动)执行,眼睛(观察)提供反馈以修正误差。”
📐 循环的三大支柱
| 阶段 | 符号 | 职责 | 心理学/管理学隐喻 |
|---|---|---|---|
| Reason | 💭 | 决策中枢 | 元认知。思考“我在思考什么”,决定下一步策略。 |
| Act | ⚡ | 执行器 | MVP (最小可行性产品) 。一步一个脚印,避免大跃进。 |
| Observe | 📡 | 传感器 | 客观事实。不仅看成功的 log,更要看失败的 error。 |
3.3 商业风控:如何优雅地“止损”?
在生产环境里,ReAct 循环不仅仅是代码逻辑,更是 成本管理。 每一个 Token 都是真金白银。让 Agent 无限循环下去,就像让员工在零产出的项目上无限加班。
我们需要引入 金融交易中的“止损” (Stop-Loss) 思维。
🛡️ 风控仪表盘 (Risk Control)
我们将终止条件映射为不同的风控等级:
■ 硬风控:熔断机制 (Circuit Breaker)
- 硬预算耗尽:
Cost > Budget。就像股票跌破止损线,不管你觉得下把能赢,必须强制平仓。 - 超时 (Timeout) :服务 SLA 的绝对底线。
■ 软风控:边际效用递减
-
原地打转 (Looping) :连续 3 次观察结果相似。
- 心理学解释:功能性固着 (Functional Fixedness) 。Agent 陷入了思维死胡同,此时继续尝试的边际收益为零,必须打断。
-
Max Iterations:兜底策略。
💻 工程实现:把风控写进代码
func shouldStop(state *ReactState) bool {
// 1. [熔断] 严控沉没成本
if state.TokensUsed >= state.Config.TokenBudget {
return true // 止损离场
}
// 2. [检测] 防止思维死循环 (功能性固着)
if isResultConverged(state.Observations) {
return true // 承认失败,也是一种止损
}
// 3. [验收] 只有拿到结果才算赢
if containsCompletionSignal(state.LastThought) {
// 防惰性:至少得动过手 (MinIterations)
// 就像老板不仅看日报,还要看 Git 提交记录
if state.Iteration >= state.Config.MinIterations {
return true
}
}
return false
}
3.4 Shannon Lab:工程美学
在我们的开源框架 Shannon 中,我们采用 关注点分离 (Separation of Concerns) 的设计哲学来管理配置。
1️⃣ 战术层:ReactConfig
管这一仗怎么打
MaxIterations: 战役的持续时间上限。MinIterations: 反惰性机制。防止 LLM 还没干活就说“搞定了”。ObservationWindow: 认知带宽管理。人的工作记忆只能容纳 7±2 个单位,Agent 同理。我们只保留最近 N 轮观察,丢弃噪音。
2️⃣ 战略层:Options
管整个公司的资源
BudgetAgentMax: 全局预算。无论战术怎么变,财务底线不能破。
2.5 避坑指南:认知偏差的陷阱
开发 Agent 时遇到的 Bug,本质上是 人类认知偏差 在 AI 身上的投射。
🕳️ 陷阱 1:刻板印象 (Stereotype / Looping)
- 案发现场:Agent 反复搜同一个词,死不悔改。
- 诊断:确认偏误 (Confirmation Bias) 。它只在乎强化已有的想法,忽略报错信息。
- 解法:引入“批判性思维”。在 Prompt 中强制要求:“如果结果未变,必须改变策略”。
🕳️ 陷阱 2:达克效应复现 (Premature Completion)
- 案发现场:问“明天天气”,秒回“晴”。
- 诊断:过度自信。直接动用直觉 (System 1),跳过了查证 (System 2)。
- 解法:
MinIterations = 1。强制进入流程。
🕳️ 陷阱 3:遗忘曲线 (Context Amnesia)
- 案发现场:做到第 10 轮,忘了第 1 轮的目标。
- 诊断:工作记忆过载。
- 解法:外部脑 (Scratchpad) 。搞个独立变量区,把关键事实(KPI、Target URL)“纹”在身上,每轮都看一遍。
2.6 总结
ReAct 的成功,不是代码的胜利,而是 认知心理学 的胜利。
它承认了 LLM 作为“直觉机器”的缺陷,并通过工程手段强行插入了一个 “反思回路” 。
作为开发者,你的角色不再是写死逻辑的程序员,而是设计思考框架的 架构师。你需要在这个循环中,平衡 探索的收益 与 计算的成本。
⏭️ 下一章预告
ReAct 只是给了 Agent 一个“理性的脑子”。但光有脑子没有手,那就是个“瘫痪的哲学家”。 下一章,我们将深入 Agent 的手脚 —— 工具 (Tools) 。 怎么让 AI 学会使用人类创造的 API?这不仅是技术对接,更是 跨物种的语言教学。