ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Agent上下文压缩的“状态保真“取舍框架解读

2026/10/4 16:05:39 拓冰建站 浏览量
Agent上下文压缩的“状态保真“取舍框架解读 Agent上下文压缩的状态保真取舍框架解读摘要在长任务 Agent 的工程化落地中上下文管理是一个被长期低估的核心问题。随着 Agent 运行时间的增长上下文窗口中不断累积系统提示词、用户指令、工具调用结果、中间推理过程和外部检索数据最终导致 Token 成本飙升、模型注意力分散、关键信息被淹没甚至触发上下文窗口溢出而中断执行。本文基于对 Agent 上下文压缩策略的系统性研究提出一种以状态保真为核心目标的三层压缩框架。该框架将上下文中的信息按性质划分为三个层级——聊天叙述层可摘要、执行状态层必须结构化、安全边界与外部标识层原样保留——并配套白名单机制与续跑验证策略确保压缩后的上下文仍能支撑 Agent 做出正确的下一步决策。与传统的以节省 Token 为目标的压缩不同本文框架的核心主张是上下文压缩的本质是状态保真State Fidelity而非文本缩短。压缩的评估标准不是 Token 减少率而是压缩后 Agent 续跑时的决策正确率。技术原理与核心方法问题定义设 Agent 的原始上下文为C{c1,c2,…,cn}C \{c_1, c_2, \ldots, c_n\}C{c1​,c2​,…,cn​}其中每个元素cic_ici​携带类型标签type(ci)\text{type}(c_i)type(ci​)和内容content(ci)content(c_i)content(ci​)。压缩函数fff将原始上下文映射为压缩后的上下文C′CC′C′f(C)C f(C)C′f(C)压缩函数需满足以下约束∀ci∈Skeep,f(ci)ci(原样保留)\forall c_i \in S_{\text{keep}}, \quad f(c_i) c_i \quad \text{(原样保留)}∀ci​∈Skeep​,f(ci​)ci​(原样保留)∀cj∈Sstructured,f(cj)struct(cj)(结构化)\forall c_j \in S_{\text{structured}}, \quad f(c_j) \text{struct}(c_j) \quad \text{(结构化)}∀cj​∈Sstructured​,f(cj​)struct(cj​)(结构化)∀ck∈Ssummary,f(ck)summary(ck)(摘要化)\forall c_k \in S_{\text{summary}}, \quad f(c_k) \text{summary}(c_k) \quad \text{(摘要化)}∀ck​∈Ssummary​,f(ck​)summary(ck​)(摘要化)其中SkeepS_{\text{keep}}Skeep​、SstructuredS_{\text{structured}}Sstructured​、SsummaryS_{\text{summary}}Ssummary​分别对应三层分类的集合划分且满足Skeep∪Sstructured∪SsummaryCS_{\text{keep}} \cup S_{\text{structured}} \cup S_{\text{summary}} CSkeep​∪Sstructured​∪Ssummary​C。三层压缩策略第一层聊天叙述层Summary聊天叙述层包含用户与 Agent 之间的自然语言对话内容如闲聊、背景说明、解释性文字等。这类信息的价值在于传递语义而非精确字符因此适合使用 LLM 进行摘要压缩。摘要策略应采用增量摘要Incremental Summary方式仅对新增对话段进行摘要合并而非每次从头重新摘要整个历史。这有助于减少语义漂移Semantic Drift并降低计算成本。第二层执行状态层Structured执行状态层包含 Agent 的运行状态信息如当前任务进度、已完成的子任务、工具调用参数与结果、中间计算结果等。这类信息对 Agent 的决策至关重要但自然语言描述容易丢失关键字段。推荐做法是将执行状态以结构化形式如 JSON Schema进行存储和流转。借助 OpenAI Structured Outputs 等受限解码Constrained Decoding机制可以确保模型输出的状态信息严格符合预定义的 JSON Schema从而避免关键字段丢失或格式错误。第三层安全边界与外部标识层Verbatim安全边界与外部标识层包含绝对不能被修改或丢失的信息包括用户指令中的目标和禁止项含版本号、优先级工具返回的关键字段订单号、文件路径、Trace ID、审批单号、数据库主键等失败路径记录试过的方案、失败原因、未通过的测试证据和时效信息RAG 检索原文片段、网页更新时间、外部数据查询时间这类信息需要逐字符原样保留任何摘要或压缩都可能导致 Agent 做出错误决策。白名单机制白名单机制是三层压缩策略的工程实现核心。其形式化描述如下Skeep{ID,路径,金额,权限,测试失败信息,用户确认原话}S_{\text{keep}} \{\text{ID}, \text{路径}, \text{金额}, \text{权限}, \text{测试失败信息}, \text{用户确认原话}\}Skeep​{ID,路径,金额,权限,测试失败信息,用户确认原话}Ssummary{解释性背景内容}S_{\text{summary}} \{\text{解释性背景内容}\}Ssummary​{解释性背景内容}压缩算法的伪代码实现如下defcompress_context(context:list[ContextItem])-CompressedContext: Agent上下文压缩主函数 参数: context: 原始上下文列表每个元素包含 type 和 content 字段 返回: CompressedContext: 压缩后的上下文对象 # 白名单集合默认不压缩逐字符原样保留S_keep{ID,路径,金额,权限,测试失败信息,用户确认原话}# 摘要集合进入摘要流程S_summary{解释性背景内容}compressed_items[]foritemincontext:ifitem.typeinS_keep:# 第三层原样保留逐字符不差compressed_items.append(Verbatim(item))elifitem.type执行状态:# 第二层结构化存储如 JSON Schemacompressed_items.append(Structured(structure(item)))elifitem.typeinS_summary:# 第一层摘要压缩compressed_items.append(Summary(summarize(item)))else:# 默认保守策略保留原始内容compressed_items.append(Verbatim(item))# 目标需附加版本号与优先级信息returnCompressedContext(itemscompressed_items,goalGoalInfo(versioncurrent_version,priorityactive_priority,active_goalcurrent_goal))验证策略压缩是否合格的判定标准不是 Token 减少率而是续跑能力Valid(C′)Replay(C′)⇒{选对下一步,¬违反禁止项,复现关键证据}\text{Valid}(C) \text{Replay}(C) \Rightarrow \{ \text{选对下一步}, \neg\text{违反禁止项}, \text{复现关键证据} \}Valid(C′)Replay(C′)⇒{选对下一步,¬违反禁止项,复现关键证据}具体评估三个维度动作正确性压缩后的上下文能否让 Agent 选出正确的下一步动作约束遵守性Agent 是否违反了用户设定的禁止项证据可复现性Agent 能否复现关键证据和事实只有当以上三个维度全部通过时压缩才算合格。对比分析主流上下文压缩策略对比下表从压缩方法、保真度、Token 节省率、实现复杂度、适用场景等维度对主流策略进行横向对比压缩策略保真度Token 节省率实现复杂度适用场景主要风险截断/滑动窗口低高50%-80%低硬 Token 预算保护丢失关键历史信息工具结果折叠中中30%-50%低低成本初步策略折叠后无法回溯细节结构化摘要中-高中40%-60%中长对话历史压缩语义漂移、关键细节丢失折叠与占位符高中30%-50%中大文件/日志处理需外部存储支持延迟展开剪枝Pruning低-中高50%-70%中去除明显冗余信息不可逆误删关键内容风险高外部化与检索高高60%-90%高超长上下文管理检索延迟需向量数据库三层压缩本文高中40%-60%中高长任务 Agent 状态管理分类准确性依赖类型标注质量与现有工作的差异分析对比维度传统做法本文框架差异说明压缩目标节省 Token 成本保证决策依据可靠性目标函数不同评估标准完全不同信息分类统一处理或简单截断三层分类摘要/结构化/原样按信息性质差异化处理失败记录通常被压缩或删除明确列为不可压缩层失败路径价值不低于成功结果验证方式无明确验证机制续跑验证动作/约束/证据提供可操作的评估方法论状态管理依赖模型记住结构化流转 白名单从记忆依赖转向工程保障受限解码技术对比本文框架中执行状态层依赖受限解码技术保证结构化输出质量以下为业界主流实现对比实现方案约束强度延迟开销递归结构支持典型应用场景OpenAI Structured Outputs强服务端受限解码低支持API 调用生产环境Anthropic Structured Outputs强服务端受限解码低支持API 调用生产环境vLLM XGrammar强本地受限解码~40μs/token支持自托管推理私有部署Outlines强FSM 路线较高编译时间有限开发测试简单 SchemaJSON Object Mode弱仅格式保证极低不支持简单结构化输出需求工程实践要点1. 目标管理需带版本号Agent 的任务目标在长任务执行过程中可能发生演变。每次目标更新时必须附带版本号明确目标的先后顺序和生效优先级。这确保压缩后 Agent 能准确判断当前应遵循哪个目标。# 目标版本管理示例classGoalManager:def__init__(self):self.goals[]self.version0defupdate_goal(self,goal_text:str,priority:int,is_prohibition:boolFalse)-Goal:更新目标并生成新版本self.version1goalGoal(idfgoal_{self.version},contentgoal_text,prioritypriority,is_prohibitionis_prohibition,versionself.version,created_atdatetime.now())self.goals.append(goal)returngoaldefget_active_goal(self)-Goal:获取当前生效目标优先级最高且未废弃的版本active[gforginself.goalsifnotg.is_superseded]returnmax(active,keylambdag:g.priority)ifactiveelseNone2. 关键状态以结构化形式流转借助受限解码机制如 OpenAI 的 Structured Outputs使模型输出严格符合预定义的 JSON Schema。关键状态如工具调用参数、中间计算结果不应以自然语言存储在上下文中而应以结构化数据形式流转。# 结构化状态定义示例使用 PydanticfrompydanticimportBaseModel,FieldfromtypingimportOptional,ListclassToolCallResult(BaseModel):工具调用结果的结构化表示tool_name:strField(...,description工具名称)call_id:strField(...,description调用唯一标识)status:strField(...,description执行状态: success/error)result:Optional[dict]Field(None,description成功时的返回结果)error_code:Optional[str]Field(None,description错误码逐字符保留)timestamp:strField(...,description执行时间戳)classConfig:# 启用严格模式确保输出符合 SchemastrictTrueclassExecutionState(BaseModel):Agent 执行状态的结构化表示state_id:strField(...,description状态唯一标识)current_task:strField(...,description当前任务描述)completed_steps:List[str]Field(default_factorylist)tool_results:List[ToolCallResult]Field(default_factorylist)failed_attempts:List[str]Field(default_factorylist)next_action:Optional[str]Field(None,description建议的下一步动作)3. 压缩策略做成白名单机制白名单机制的核心思想是默认保守——只有明确列入白名单的信息才被压缩其余信息默认原样保留。这避免了摘要写得漂亮但执行缺字段的经典问题。# 白名单压缩器实现classWhitelistCompressor:def__init__(self,whitelist:set[str],summarizer:Summarizer):self.whitelistwhitelist# 可压缩的类型集合self.summarizersummarizerdefcompress(self,context:Context)-Context:白名单压缩主流程resultContext()foritemincontext.items:ifitem.typenotinself.whitelist:# 白名单外原样保留保守策略result.add_item(item.clone())elifitem.typechat_narrative:# 聊天叙述摘要压缩result.add_item(self.summarizer.summarize(item))elifitem.typeexecution_state:# 执行状态结构化result.add_item(self.structure(item))# 其他类型默认保守保留returnresult4. 长间隔续跑需重新校验状态对于暂停数天甚至更长时间后续跑的任务旧状态可能已经过时如外部数据已更新、权限已变更。在恢复执行前必须对关键状态进行重新校验asyncdefvalidate_stale_state(state:ExecutionState)-bool:校验过期状态的时效性checks[validate_permissions(state.required_permissions),validate_external_data_freshness(state.data_sources),validate_goal_continuity(state.active_goal),]resultsawaitasyncio.gather(*checks)returnall(results)5. 失败记录的价值管理失败路径试过的方案、失败原因、未通过的测试、被拒的权限在压缩时不应被简单丢弃。这些信息的价值不低于成功结果——它们帮助 Agent 避免重复走已证明走不通的路径节省 Token 并提升用户体验。建议将失败记录以结构化形式独立存储压缩时保留其元数据失败原因摘要 关键错误信息而非完全删除。局限性与客观评价方法局限性类型分类的准确性依赖三层压缩策略的前提是能够准确判断每条上下文信息的类型归属。在实际工程中自动分类的准确性直接影响压缩质量。当前框架未提供自动分类器的具体实现分类准确性依赖外部标注或启发式规则的质量。摘要质量的不可控性第一层聊天叙述的摘要压缩依赖 LLM 的摘要能力。不同模型在摘要质量上存在差异且摘要过程本身可能引入语义漂移Semantic Drift尤其对于长段对话的增量摘要场景。缺乏量化评估本文框架未提供正式的实验设计和量化评估指标如 Token 减少率与决策正确率之间的帕累托前沿曲线。验证方式主要依赖定性判断续跑得动缺乏大规模基准测试支撑。静态白名单的灵活性不足白名单机制采用静态集合定义可压缩信息类型在面对新型工具返回格式或新兴应用场景时可能需要手动维护白名单缺乏自适应能力。假设的局限性上下文元素可分类假设框架假设上下文中的每个元素都可以被准确归类到三个层级之一。但在实际 Agent 运行中某些信息可能同时具有多种性质如一段对话既包含叙述又包含关键状态分类边界可能模糊。单 Agent 场景假设框架主要针对单 Agent 场景设计。在多 Agent 协作场景中上下文可能在多个 Agent 之间传递压缩策略需要考虑跨 Agent 的上下文一致性问题。压缩即时性假设框架假设压缩操作可以在合理时间内完成未考虑实时性要求极高的场景如交互式对话系统中每轮响应时间需控制在毫秒级。潜在改进方向自适应分类器引入轻量级分类模型如微调的小语言模型自动判断上下文元素的类型归属减少人工维护白名单的成本。分层摘要优化研究增量摘要的语义漂移抑制方法如引入对比学习损失函数约束摘要的语义一致性。多 Agent 扩展将框架扩展至多 Agent 场景设计跨 Agent 的上下文压缩协调协议确保压缩后多 Agent 协作的一致性。量化评估基准构建标准化的 Agent 上下文压缩评估基准Benchmark包含不同任务类型的压缩前后对比数据为策略选择提供数据支撑。参考与延伸阅读Anthropic.Effective Context Engineering for AI Agents. Anthropic 官方博客.OpenAI.Structured Outputs. OpenAI Platform Documentation.上下文工程全景研究.Agent 上下文工程Token 管理、上下文压缩与分层记忆设计. CSDN 博客. 2026.MorphLLM.Context Rot: Cross-Model Validation on 18 Frontier Models. 技术报告. 2026.Mitchell Hashimoto.Harness Engineering. 2026.Boris Cherny.Claude Code Session Management and 1M Context. Anthropic. 2026.Paul Gauthier (Aider 创始人).Practical Context Window Management. 技术分享. 2026.XGrammar Team.XGrammar-2: Adaptive Token Masking for Dynamic Structured Generation. 技术报告. 2026.vLLM Team.Structured Outputs with XGrammar Backend. vLLM Documentation. 2026.LangChain / LlamaIndex 官方文档. 上下文管理与检索增强生成RAG最佳实践.