AI Agent 工程课程

上下文溢出、腐化与重建

一句话收获:上下文管理既控制容量,也保护目标、状态和证据。

这个场景在解决什么问题

这个场景要区分两种听起来很像、其实完全不同的毛病:一种是"装不下"(溢出),一种是"装得下但越来越难用"(腐化)。原文的做法是持续往上下文里加日志、历史和工具结果,观察信息质量是怎么一步步变差的。它值得单独学,是因为很多人遇到 Agent 变笨,第一反应就是"加大窗口",但如果问题其实是腐化,加大窗口根本没用,反而更糟。

先理清这条判断链(文字版)

这个场景是一条"从量变到质变、再到重建"的链:先看信息怎么持续增长,再看它有没有超过容量(溢出),接着看装得下的时候信息质量有没有变差(腐化),最后看怎么从可靠源头重建一个干净的工作包。验收标准是——能不能分清"容量问题"和"质量问题",并给出对应的处理方式。

  1. 先看信息是否在持续增长、有没有开始重复和冲突。
  2. 再看是否超过窗口容量,导致关键材料装不全(溢出)。
  3. 接着看装得下的时候,旧状态、重复说明、错误历史是否在干扰判断(腐化)。
  4. 最后从稳定规则、权威状态、外部证据、未决项重建可信工作包。

逐层详解

第 1 步:信息持续增长

原文:日志、代码、工具返回和历史对话不断进入窗口。

白话:长任务跑着跑着,日志、代码片段、工具返回结果、历史对话这些东西会不断往上下文窗口(Context Window,模型一次能接收的输入上限)里堆。

类比:像一张越堆越满的办公桌——新文件不断往上放,一开始还能分清,放到一定程度就开始出现重复的纸、互相矛盾的字条。

举例:一个 Debug Agent 排查线上问题,每一轮都往上下文里加"报错日志、定位到的代码段、工具查数据库的返回、和用户的历史对话",跑十几轮后,上下文里已经攒了几十条日志和代码。

为什么重要:长任务天然会积累信息——只要任务没停,信息就往里涨,这是必然规律,不是设计失误。

怎么验证(证据点)

  • 内容增加
  • 重复增加
  • 冲突开始出现

别踩的坑(边界):窗口仍有容量不代表信息仍清晰——还剩空间不等于信息还干净,可能已经开始互相打架了。

落地检查:先检查信息价值和冲突——落地时先问"这些新加的内容有没有决策价值、有没有互相矛盾",而不是只看还装不装得下。

第 2 步:上下文溢出

原文:内容超过窗口或输出空间被挤压,关键材料无法完整装载。

白话:内容真的超过窗口上限,或者输出空间被挤没了,导致关键材料装不完整、被截断。

类比:像往已经满的行李箱里硬塞东西,结果箱盖合不上,最后只能把某几件重要的东西半截露在外面。

举例:Debug Agent 的日志越堆越多,超过窗口上限后,系统只能截断最早的内容,结果"最初的问题描述"被截掉了,模型失去了最关键的判断起点。

为什么重要:这是明确的容量问题——溢出的本质是"装不下",和"装得下但乱"是两回事,处理手段也不同。

怎么验证(证据点)

  • 窗口接近上限
  • 材料被截断
  • 输出空间不足

别踩的坑(边界):扩大窗口不能自动解决污染——把窗口从 32K 扩到 128K,污染(腐化)该有还是有,只是能晚一点爆。

落地检查:溢出首先需要裁剪和外存——落地时先做"裁剪"(丢掉无价值内容)和"外存"(把完整内容放到外部存储,需要时再检索),而不是直接花钱扩窗口。

第 3 步:上下文腐化

原文:内容仍装得下,但旧状态、重复说明和错误历史干扰判断。

白话:内容其实还装得下,但里面混着过期的旧状态、重复啰嗦的说明、犯过错的错误历史,这些在干扰模型的判断。

类比:像一张桌子还放得下东西,但桌上有一张"过期的地图"、三份内容不一样的"同一份说明"、一张"上次写错的答案",你照着它们做,就越来越容易跑偏。

举例:Debug Agent 上下文里还留着"数据库连接正常"这条十分钟前的旧状态,但数据库其实五分钟前就挂了,模型还照着旧状态推理,越走越错。

为什么重要:上下文腐化属于信息质量问题,而不是单纯容量不足——腐化是"信息不对/过时/矛盾",跟窗口大小无关,这才是最隐蔽、最伤人的地方。

怎么验证(证据点)

  • 旧状态仍在
  • 规则冲突
  • 局部回答漂移

别踩的坑(边界):看见所有材料不证明能正确取舍——材料全在眼前,不代表模型能分辨哪个该信、哪个该扔。

落地检查:腐化需要隔离、校验或重建——落地时对腐化的处理是隔离过期内容、校验冲突、必要时直接重建,而不是继续往里补提示。

第 4 步:可信重建

原文:从稳定规则、权威状态、外部证据和未决项重新形成工作包。

白话:与其在已经污染的对话上继续打补丁,不如重新从可靠源头搭一个干净的工作包——稳定规则、权威状态、外部证据、还没解决的事项。

类比:像文档已经改得一团乱、改不动了,与其继续打补丁,不如照着"最新版模板 + 最新数据 + 原始合同"重写一份干净的。

举例:Debug Agent 发现上下文已经腐化,于是重建:重新加载"排查流程规则"、重新读一遍"数据库当前状态"、重新取"关键报错的原始日志"、列出"还没定位的问题点",然后继续排查。

为什么重要:重建恢复可验证当前事实,而不是继续修补污染对话——重建是为了让"当前事实"重新变得可验证,而不是在错误信息上越描越黑。

怎么验证(证据点)

  • 目标保留
  • 状态重读
  • 引用可回取

别踩的坑(边界):模型摘要不能独立成为权威状态——重建时用模型做的"总结"不能直接当作权威状态,权威状态必须重新从外部系统读。

落地检查:压缩、摘要和重建要按问题类型选择——落地时先判断问题是容量还是质量:容量问题用压缩/外存,质量问题(腐化)才用重建。

落地可行性小结

本场景涉及的技术栈是"上下文管理":上下文窗口监控、裁剪策略、内容外存(如外部存储 + 检索)、上下文重建模板。真实落地做法:给 Agent 加一个"上下文健康度"检查点,监控窗口占用率和内容冲突;容量满了就走裁剪/外存,发现旧状态/冲突就走重建。要检查的:窗口占用是否接近上限、状态是否来自权威源、重建是否回到稳定规则和外部证据。常见坑:把腐化当溢出处理(只扩窗口不清理)、用模型摘要冒充权威状态、重建时漏掉未决事项。

回顾

  • 溢出是"装不下"(容量问题),腐化是"装得下但乱"(质量问题)。
  • 扩大窗口只能缓解溢出,不能解决腐化。
  • 腐化的典型信号:旧状态残留、规则冲突、回答局部漂移。
  • 可信重建要从稳定规则、权威状态、外部证据、未决项重新搭,而不是继续打补丁。
  • 模型摘要不能单独充当权威状态。