通过一个简单游戏理解 ReAct(Reasoning + Action)
Source: Dev.to
当我第一次从纽约市搬到费城时,我渴望社交互动。于是我做了任何成年人都会做的事:下载了 Meetup。我的第一次社交活动是一场作家聚会,破冰游戏是一个叫 “传递故事” 的童年游戏。
“传递故事” 游戏
- 一张纸在大家之间传递。
- 有人写下一行文字,然后把纸传给下一个人。
- 每位新参与者阅读已经写好的内容,补上下一行,再传下去。
- 这一过程持续进行,直到小组共同完成一个故事。
将游戏映射到 ReAct
ReAct(观察 + 推理 + 行动)可以用游戏的步骤来说明:
| ReAct 组件 | 游戏动作 |
|---|---|
| 观察 | 参与者阅读目前为止的故事。 |
| 推理 | 参与者思考如何继续故事。 |
| 行动 | 参与者写下下一行并把纸传出去。 |
页面上的第一行是 查询。每位后续参与者重复观察 → 推理 → 行动的循环,直至故事完成。
语言模型的无状态性
就像下一个玩家在阅读纸张之前对故事一无所知,LLM 也是 无状态 的:它们不会在 API 调用或对话轮次之间保留记忆。每一次请求都是全新的——这点类似于宝莱坞同名电影《Ghajini》中的角色。
把完整的故事向前传递相当于在下一次 API 调用时把对话历史发送回 LLM。累计的故事就成为模型的 上下文。
限制与实际解决方案
无限循环
如果参与者(或模型)的“词汇量”非常有限,可能会一直重复同一句话:
“猫和狗都是动物。动物就是猫和狗。”
在 AI 中,这表现为 无限循环——观察没有提供新信息,推理重复,行动一次又一次地相同。
解决方案: 对迭代次数设定硬性上限(例如“仅允许 5 次迭代”)。
上下文窗口限制
当故事变得很大(比如 100 页)时,后面的参与者实际上不可能阅读全部内容。LLM 也面临同样的问题:每一次观察 → 推理 → 行动循环都会增加更多 token,这会:
- 增加成本
- 放慢响应时间
- 有触及模型上下文上限的风险
解决方案: 上下文裁剪——不必每次都发送完整历史,只保留最近的几步,并对更早的步骤保持一个高层次的摘要。
ReAct 与 ReWOO 的比较
- ReAct:每一步后都思考(即兴)。
- ReWOO:先深思熟虑,生成结构化计划,再执行(策略性)。
这相当于:
- 即兴 地逐行编写故事, versus
- 先商定 故事大纲再写章节。
两种方法各有用处:一种是反应式的,另一种是策略性的。
观点
我认为 ReWOO 正是 IBM 视频中提到的“2026 年是多代理时代”所指的内容。到今年年底,这篇博客可能已经过时,但我希望它能清晰地阐释 ReAct 循环的工作原理,并鼓励大家分享自己的想法。
感谢费城出色的作家团体对我的热情接纳!
Reddit | 大语言模型