前面两篇我们看到了 ReAct 循环如何让 LLM 从"一次回答完就停"变成"持续执行直到完成"。但如果你动手试过给智能体一个真正复杂的任务——比如"帮我调研三家云服务商的定价,对比后推荐最优方案,并生成一份报告"——你可能会发现:它做着做着就开始"忘事"了,或者在一个子任务上反复打转,或者干脆偏离了最初的目标。

这不是模型不够聪明,而是两个更根本的问题在起作用:上下文窗口有限缺乏规划。这一篇我们就来拆解这两个问题,以及当前的解决方案。

上下文窗口是一堵墙

无论模型宣称的上下文窗口有多大(4K、128K 还是 200K tokens),它都是 有限且昂贵的。每一次工具调用的结果、每一轮对话的历史,都会消耗这个窗口里的空间。

假设智能体在做一个多步骤任务:

  1. 调用搜索工具,返回 3 篇长文章 → 消耗 8K tokens
  2. 调用读取工具,逐篇阅读 → 消耗 15K tokens
  3. 调用对比工具,提取差异 → 消耗 5K tokens
  4. 调用生成报告工具 → 消耗 3K tokens

到第 4 步时,上下文里已经塞满了第 1、2 步的原始材料。模型需要从这几万 tokens 里找到"用户最初的目标是什么、已经确认了哪些事实、还差什么没做"——但最早的信息已经被挤到了窗口的边缘,甚至已经被截断了。

结果就是:模型变得"健忘"。 它可能记不住用户最初的要求,可能重复已经做过的步骤,也可能在无关的细节上钻牛角尖。这不是幻觉,这是上下文溢出导致的注意力稀释1

短期记忆:把关键信息留在上下文中

解决"健忘"的第一个思路是 管理好上下文里的内容——不让它无限制地膨胀。

最常用的两种策略是 修剪(Trimming)摘要(Summarization)2

修剪:只保留最近 N 轮对话。更早的全部丢弃。优点是简单、零额外开销;缺点是信息被硬截断——如果用户在第 5 轮说过"我的预算是 500 美元以内",到了第 20 轮这个约束就丢了。

摘要:当上下文接近上限时,把较旧的内容用 LLM 压缩成一段摘要,替换掉原始内容。比如把 10 轮对话压缩成一段 200 字的"到目前为止的进展"。优点是保留了关键信息,缺点是摘要可能会丢失细节或引入偏差。

这两种方法都属于 短期记忆——它们管理的是"当前上下文里能放下什么"。但无论怎么修剪和摘要,上下文窗口终究是有限的。当一个任务横跨多个会话、持续数小时甚至数天时,短期记忆就撑不住了。

长期记忆:外部存储,按需召回

长期记忆的思路和短期记忆完全不同:不把所有信息都塞进上下文,而是把信息存到外部,需要时再检索回来。

最常用的实现是 向量数据库 + 检索增强生成(RAG)。每次智能体完成一个子任务,就把关键信息(做了什么、发现了什么、决定了什么)编码成向量存到数据库里。后续需要时,用当前问题去检索最相关的记忆片段,只把这几段放回上下文。

更前沿的做法是把记忆操作本身做成工具——让智能体自己决定什么时候存、什么时候取、什么时候删。比如 Agentic Memory(AgeMem)框架就把"存储""检索""更新""摘要""丢弃"都暴露为工具调用,模型可以自主管理自己的记忆3

这听起来像给智能体装了一个外置硬盘。但硬盘本身不解决另一个问题:智能体知道下一步该做什么吗?

多步规划:记住"下一步"和"为什么"

没有规划能力的智能体,就像一个没有地图的探险家——每一步都基于当前视野做决定,但走几步之后可能已经偏离了目标。

ReAct 的原始设计是"一思考一行动"的循环:模型看到当前状态,决定下一步动作,执行,观察,再决定。这在短任务上工作得很好,但在长链条任务上,模型容易陷入局部最优——它看到当前这一步需要查资料,查完后又看到需要再查一个细节,再查完又发现需要确认一个事实……很快它就进入了"不停查资料、从不整合"的死循环4

多步规划解决这个问题的方法是:在执行之前,先让模型生成一个完整的子任务列表,然后按顺序执行,每完成一步就更新剩余计划。

比如用户说"帮我对比三家云服务商的定价",模型先生成一个计划:

  1. 搜索 AWS 定价页 → 提取关键数据
  2. 搜索 Azure 定价页 → 提取关键数据
  3. 搜索 GCP 定价页 → 提取关键数据
  4. 对比三者的价格差异
  5. 生成推荐报告

每执行完一步,模型就检查结果、更新后续步骤(比如发现某家没有按需定价,需要调整对比方式),然后继续。这个"先计划、再执行、每步后更新计划"的机制,就是 Pre-Act 和 ReCAP 等框架的核心思想5

记忆与规划是一体两面

把记忆和规划放在一起看,你会发现它们解决的是同一个问题的两面:

  • 记忆 解决的是"我做过什么,发现了什么"——保持状态的连续性
  • 规划 解决的是"我接下来要做什么,为什么"——保持目标的连续性

没有记忆,规划会丢失上下文——模型记不住自己已经查到了什么,就会重复查同样的东西。没有规划,记忆会变成一团乱麻——模型记住了大量碎片信息,但不知道哪些是下一步需要的、哪些是已经过时的。

一个健壮的智能体需要两者兼备:用短期记忆维护当前会话的连贯性,用长期记忆跨会话保留关键信息,用多步规划确保每一步都朝着最终目标前进,而不是在细节里打转。

小结

这篇之后,你对智能体的理解应该从"模型 + 循环 + 工具"升级到更完整的图景:

  • 上下文窗口是硬约束——无论模型多强,它能一次"看到"的信息是有限的
  • 短期记忆(修剪/摘要) 让窗口内的信息更精炼
  • 长期记忆(向量检索/外部存储) 让重要信息跨会话持久化
  • 多步规划 让智能体不迷失在局部细节中,保持对最终目标的跟踪

下一期我们会进入一个更实操的话题:当你注册多个工具时,模型怎么决定"该用哪个"?工具描述(tool schema)的写法会如何影响模型的选择——以及一些常见的翻车案例。