生产系统里几乎不存在纯粹的单路线架构。Anthropic 自己的表述也是"用即时上下文策略增强既有检索系统",而非替代。下面三种组合覆盖了绝大多数实际形态,每种都有一个特定的失效模式。
组合一:检索 + 长上下文路由(Self-Route 形态)。 便宜通道先跑,模型自评材料是否充分,不足才升级到直塞。这是第二节那组数字直接推出来的架构。
它的失效模式是自评不可靠:模型在材料不足时倾向硬答而不是回退,尤其是被 prompt 暗示"你应该能回答"的时候。所以这套架构必须单独埋一个指标——回退率,并且定期人工抽查"没回退但答错"的样本。第二个失效模式是路由判据不会自动重新校准:你按当时的语料分布调好了阈值,半年后语料漂移,路由还在按老阈值走,而这件事不会有任何报警。
组合二:记忆存指针 + 检索取内容(即时上下文形态)。 记忆里只放"这个用户关心 X、相关文档在 path Y、上次结论见 commit Z"这类轻量标识符,内容现场取回。这是避开记忆库变成语料陈旧副本的标准做法,收益也是可量的:Anthropic 那组代码执行调 MCP 的实测里,把工具定义全量前置加载需约 150,000 token,改成文件系统按需读取后降到约 2,000 token,省 98.7%。
它的失效模式是指针失效变成静默失败:文件改名、文档下线、commit 被 rebase 掉,记忆说"有",取回来是空。危险之处在于这是静默的——agent 不会说"我的记忆坏了",它会当作"这件事不存在"继续往下走。处置很具体:把"按指针取不到"当成一个失效信号回写记忆,而不是当成一次普通的空结果。另一个前提条件是标识符本身必须可读——如果指针是 UUID 这种不可读串,agent 无法从标识符判断该不该拉取,这套组合就退化成盲目试探。
组合三:会话内长上下文 + 跨会话记忆摘要。 单次会话内不裁剪,结束时压成摘要写进记忆,下次会话加载摘要。这是最省事、也最常见的做法。
它的失效模式是有损压缩的错误会跨会话固化。摘要天然丢掉精确计数和清单——"改了哪 7 个文件""还剩哪 3 项没做"这类信息压完就没了,而且模型不知道自己丢了什么。更麻烦的是这个损失不可逆:下一轮基于错误摘要产生的新摘要会把错误继承下去,变成一条谁也追不回源头的记忆过期。处置是把精确状态外置成结构化笔记,不要指望摘要保住它;并且给摘要留一条回原始记录的指针。
三者全上的平台还有一个合成失效模式值得单列。 当程序记忆常驻(CLAUDE.md 之类)、agentic 检索按需注入、会话内长上下文自然增长这三条通道同时向窗口灌内容时,典型情况是每条通道单看都没超预算,合起来超了,而且没有任何一层知道总预算是多少。这是上下文腐烂在混合系统里最常见的入口。唯一有效的处置是把"窗口预算"当成一个显式的、被 harness 度量的量——Claude Code 的 /context 按来源拆分占比就是为了这个;记忆侧的处置则是分层加载,索引常驻、细节按需(注意 @path 导入只帮助组织,不减少上下文,被导入文件启动时一样全量加载)。