上下文压缩如何避免丢关键约束?
第209题上下文压缩如何避免丢关键约束1. 核心回答上下文压缩最容易出现的问题是摘要保留了整体语义却删除了后续任务真正依赖的少量关键条件。因此我会把 Agent 的上下文拆成三层Structured State不可丢失的结构化状态Artifact / Source Reference可以回查的原始证据Compressed Narrative允许压缩的自然语言历史整体结构可以表示为ContexttStatetReferencestSummarytRecentMessagest Context_t State_t References_t Summary_t RecentMessages_tContextt​Statet​Referencest​Summaryt​RecentMessagest​其中StatetState_tStatet​保存硬约束和任务状态ReferencestReferences_tReferencest​保存原始证据的位置SummarytSummary_tSummaryt​压缩历史叙事RecentMessagestRecentMessages_tRecentMessagest​保留最近尚未稳定沉淀的信息。核心原则是关键约束必须结构化保存并能够回查原始来源。摘要只承担可重新生成的语义压缩。2. 为什么直接总结全部对话风险很高假设用户在很早之前说部署目标只能使用CPU。之后又进行了几十轮讨论。如果压缩模型生成用户希望构建一个高性能部署方案。这句话语义基本合理但关键约束只能使用CPU已经消失。后续 Agent 可能建议使用A100进行推理加速。整个方案因此失效。类似的关键约束还包括最大预算截止时间禁止使用的技术输出格式用户已经确认的设计已经拒绝的方案权限边界环境版本文件路径API Schema任务当前状态外部操作是否已经执行。这些信息通常占用的 Token 很少但一旦丢失影响很大。因此压缩目标不能简单写成min⁡Tokens \min TokensminTokens更合理的目标是min⁡Tokens \min TokensminTokens同时满足ConstraintRecall≥τ ConstraintRecall \geq \tauConstraintRecall≥τ以及DecisionConsistency≥δ DecisionConsistency \geq \deltaDecisionConsistency≥δ3. 第一层把不可丢失约束存成 Structured State我会把关键状态从自然语言对话中抽取出来形成独立结构。例如{task_id:T-1024,status:active,goal:部署恶意代码检测模型,hard_constraints:{device:CPU only,memory: 8GB,latency_p95: 200ms},confirmed_decisions:{model:DistilBERT,runtime:ONNX Runtime},rejected_options:[GPU inference],pending_questions:[量化到INT8后准确率下降多少]}这部分数据不经过普通自由摘要。修改时通过明确的状态更新Old State New User Decision → Validated State Update例如用户明确说CPU限制取消可以使用GPU。才更新device: CPU only为新的状态。4. 哪些内容应该进入 Structured State我通常会把以下信息定义为不可丢失状态。4.1 用户约束例如只能使用Python 不能访问公网 预算不超过1000元 必须兼容Windows 最终输出必须是JSON4.2 已确认决策例如采用Transformer Embedding使用Model-A 数据库选择PostgreSQL4.3 已拒绝方案例如不采用Multi-Agent 不使用云端API这类信息如果丢失Agent 很容易在后续重新提出已经排除的方案。4.4 当前任务状态例如规划中 执行中 等待审批 已完成 已取消 挂起4.5 已完成步骤例如数据清洗完成 索引已经建立 模型尚未部署4.6 外部副作用例如PR #128已经创建 Firewall Rule已经下发 用户账号已经禁用这些状态尤其不能仅靠摘要保存否则任务恢复时可能重复执行。5. 第二层保存 Artifact Reference而不是复制所有内容很多信息本身很大例如PDF源代码日志实验结果数据库查询结果Tool OutputGit Diff图片报告。这些内容无需全部永久放入 Prompt。可以保存{artifact_id:A-8392,type:experiment_result,uri:...,version:v3,sha256:...,created_at:...,summary:INT8量化实验结果,relevant_spans:[table_3,section_4.2]}上下文中只保留INT8实验结果 artifact://A-8392真正需要数据时再读取。因此LargeArtifact→ReferenceMetadataSelectiveRetrieval LargeArtifact \rightarrow Reference Metadata SelectiveRetrievalLargeArtifact→ReferenceMetadataSelectiveRetrieval这样既减少 Token又保留完整证据。6. Reference 必须带 Provenance只保存一句之前实验显示F1提升了8%。仍然存在问题。后续无法知道哪个实验哪个版本哪个数据集谁生成的原始结果在哪里。更可靠的状态是{claim:F1提升8%,source:experiment://exp-031,dataset:test-v4,model_version:model-17,span:table-2-row-4}也就是Claim→Source→Version→Span Claim \rightarrow Source \rightarrow Version \rightarrow SpanClaim→Source→Version→Span这形成 Provenance Chain。压缩之后仍然可以重新验证这个结论到底来自哪里7. 第三层摘要只压缩可恢复的叙事信息适合摘要的信息包括讨论背景中间探索过程已经结束的长篇解释重复内容对任务没有直接约束作用的历史交流。例如原始讨论可能有 8000 Token。可以压缩为我们比较了BERT、DistilBERT和TinyBERT。 考虑CPU部署要求后最终选择DistilBERT。 详细benchmark见artifact://benchmark-17。其中真正关键的CPU only以及最终模型 DistilBERT已经同时进入 Structured State。因此即使这个摘要之后再次被压缩系统仍然不会依赖摘要恢复关键决策。8. 保留最近一段 Raw Context我通常不会立即压缩最新消息。可以采用Structured State Historical Summary Recent Raw Messages例如最近20条消息 原文保留 更早历史 压缩 关键约束 结构化保存原因是最新讨论中的决策可能仍然处于变化状态。例如A方案似乎更好下一轮用户可能立即说我重新考虑了一下还是选B。过早将第一句话固化为正式状态会产生错误。因此可以设置proposed_decision和confirmed_decision两个状态。只有确认之后才写入长期 Structured State。9. Context Compression 应该有明确优先级如果上下文必须从100K 100K100K压到20K 20K20K我会按照保留优先级处理。9.1 P0禁止压缩包括System / Developer Rules用户明确硬约束安全与权限策略当前任务目标已确认决策外部副作用状态。9.2 P1结构化压缩包括任务计划Checkpoint当前进度待办事项关键实验结果Artifact Reference。9.3 P2保真摘要包括历史解释分析过程已结束的讨论辅助背景。9.4 P3可以删除包括重复表达无关闲聊已被更高版本替代的信息可以从 Artifact 重建的冗长内容。因此压缩实际上是Context→ImportanceClassification→DifferentCompressionPolicy Context \rightarrow ImportanceClassification \rightarrow DifferentCompressionPolicyContext→ImportanceClassification→DifferentCompressionPolicy10. 使用 Checkpoint 保存任务状态对于长任务我会在关键步骤后保存 Checkpoint。例如Checkpoint 17 task_id: T-1024 state_version: 17 completed: - data_clean - build_index - baseline_eval pending: - reranker_eval artifacts: - dataset://v3 - index://v4 - eval://baseline-2 external_effects: - noneLangGraph 等 Agent 框架的 Persistence 机制就是类似思路在执行过程中保存 graph state snapshot使任务可以恢复ReplayDebugHuman-in-the-loopFault Recovery。因此任务恢复时使用Checkpoint 必要Artifact 最近消息而不用完全依赖历史对话摘要。11. 摘要生成后要进行 Constraint Verification摘要不能生成后直接进入下一轮。应该先从原始上下文中得到关键约束集合C{c1,c2,…,cn} C \{c_1,c_2,\ldots,c_n\}C{c1​,c2​,…,cn​}然后检查压缩后的上下文C′ CC′是否仍然包含这些约束。定义$$ConstraintRecall\frac{|C\cap C’|}{|C|}$$对于 P0 级约束我会要求ConstraintRecall1 ConstraintRecall1ConstraintRecall1例如原始约束是CPU only 8GB memory P95 200ms Python 3.12 No Internet压缩后逐项检查CPU only ✓ 8GB ✓ P95 200ms ✓ Python 3.12 ✓ No Internet ✓只要一个关键约束缺失就重新生成摘要或直接保留原始内容。12. 还要检查事实一致性摘要可能出现另一种错误原文 用户拒绝方案A。 摘要 用户选择方案A。这属于 Factual Inconsistency。因此可以把摘要拆成 Atomic ClaimsClaim 1 Claim 2 Claim 3 ...然后逐项验证Source⊨Claimi Source \models Claim_iSource⊨Claimi​即原始上下文是否真正支持这个Claim摘要事实一致性研究中QAFactEval、SummaC 等方法都针对这种问题进行评估。在工程系统中可以使用规则检查NLIQA-based verification第二模型 Judge人工抽检进行辅助验证。对于 P0 级状态最终仍以 Structured State 和原始来源为准。13. 摘要模型出错时怎么处理这也是第 210 题会继续追问的边界。当前题至少需要保证系统具有回退路径。如果发现Summary ≠ Source则停止使用该Summary ↓ 读取对应Raw Messages / Artifact ↓ 重新构建State ↓ 重新生成Summary ↓ 重新验证因此摘要属于Derived Data它应该能够删除和重建。原始记录和结构化状态承担恢复依据。14. 如何处理用户修改约束例如早期状态language Python后续用户说现在改成Rust。不能简单同时保存Python Rust需要形成版本化状态Constraint v1: language Python status superseded Constraint v2: language Rust status active因此一个完整约束可以保存{key:language,value:Rust,status:active,version:2,source_message:msg-381}这样才能解决历史信息冲突。15. 用户切换任务时怎么处理长对话中很容易出现Task A ↓ Task B ↓ Task C如果把所有内容压成一个摘要任务边界会逐渐混乱。因此应该建立Task ID例如T1设计RAG T2修改论文 T3部署模型每个任务拥有独立StateConstraintArtifactCheckpointSummary。状态可以是active paused completed cancelled用户切换话题时T1 → paused T2 → active恢复 T1 时加载T1 State T1 Artifact T1 Summary这样可以降低跨任务信息污染。16. 为什么不能直接保留全部长上下文即使模型 Context Window 足够大也不能默认认为把所有历史全部塞进去就是最稳定方案。长上下文研究发现模型使用信息的能力会受到Context LengthRelevant Information Position干扰内容等因素影响。“Lost in the Middle”实验显示当关键信息位于长 Context 中间区域时多种模型的任务性能会明显下降。因此更长的输入只能提高“信息可见范围”。系统仍然需要State Management Retrieval Compression Prioritization帮助模型把注意力集中到当前真正需要的信息。17. 怎么评测 Context Compression不能只报告压缩率80%我会同时测五类指标。17.1 Compression Ratio定义$$CompressionRatio\frac{Tokens_{compressed}}{Tokens_{original}}$$例如20K100K0.2 \frac{20K}{100K}0.2100K20K​0.2代表保留 20% Token。17.2 Constraint Recall$$ConstraintRecall\frac{\text{保留的关键约束数}}{\text{原始关键约束数}}$$P0 约束目标应接近100% 100\%100%17.3 Decision Consistency给原始 Context 和压缩 Context 相同任务。比较Decision(original)和Decision(compressed)是否一致。17.4 Artifact Retrieval Success给出一个历史事实问题之前INT8实验F1是多少检查系统能否Summary → Artifact Reference → Source → 正确答案17.5 End-to-End Task Success最终仍需要测任务是否完成因为摘要语义相似度很高也可能删除一个决定任务结果的关键条件。18. 应该专门构造压缩回归测试集我会保存一组真实长任务作为 Regression Suite。测试案例可以包括18.1 早期约束在对话开头放入禁止使用GPU。经过大量讨论后检查是否仍然保留。18.2 中间约束把关键条件放在长历史中间数据库版本必须是PostgreSQL 15。检查是否发生 Lost-in-the-Middle。18.3 约束更新先说预算1000元。后来更新预算改成2000元。检查系统是否只使用最新有效版本。18.4 取消任务取消部署任务。压缩后不能再次执行部署。18.5 外部副作用已经执行create_pr()恢复任务后不能重复创建 PR。18.6 Artifact 回查关键实验结果只存在 Artifact 中。检查压缩后还能否找到正确版本。19. 一个完整的 Context Compression 架构可以设计成Raw Conversation ↓ Constraint / Decision Extractor ↓ Structured State ↓ Artifact Registry ↓ Historical Summarizer ↓ Summary Verification ↓ Context BuilderContext Builder 最终组装System Rules Active Task Hard Constraints Confirmed Decisions Relevant Artifacts Historical Summary Recent Raw Messages当 Token 超限时先删除P3 ↓ 压缩P2 ↓ 结构化P1 ↓ 始终保留P020. 面试时可以压缩成下面这段上下文压缩的核心问题是防止关键约束在摘要过程中丢失。我会把 Agent Context 分成三层结构化状态、Artifact 引用和自然语言摘要。用户硬约束、已确认决策、任务状态、已完成步骤和外部副作用进入 Structured State不依赖摘要保存。大型文档、代码和实验结果保存为 Artifact只在上下文中保留带版本和 provenance 的引用。历史讨论才进入摘要同时保留最近一段原始消息。每次压缩之后我会做 Constraint Recall 和 Factual Consistency 检查。P0 级硬约束要求完整保留如果摘要中的 Claim 无法回溯到原始 Message、Artifact 或 Checkpoint就回查原文并重新压缩。长任务还需要保存 Checkpoint让任务恢复依赖确定的状态快照。评测时同时看 Compression Ratio、Constraint Recall、Decision Consistency、Artifact Retrieval Success 和最终 Task Success并专门测试早期约束、中间约束、约束更新、任务取消和重复副作用等失败场景。这样可以降低 Token 成本同时让关键任务状态具有可恢复、可验证和可追溯的保证。21. 来源OpenAI API Reference,Compact a response / Conversation Compaction提供长运行会话的 Context Compaction 机制。LangGraph Documentation,Memory / Manage short-term memory说明长对话可以通过 trimming、summarization 与 checkpoint 等方式管理并指出删除历史消息会带来信息丢失风险。LangGraph Documentation,Persistence说明通过 Checkpoint 保存 Graph State从而支持恢复、Replay、Human-in-the-loop 和 Fault Tolerance。Jiang et al.,LLMLingua: Compressing Prompts for Accelerated Inference of Large Language Models, EMNLP 2023研究 Prompt Compression并通过预算控制和 Token 级压缩降低输入长度。Pan et al.,LLMLingua-2: Data Distillation for Efficient and Faithful Task-Agnostic Prompt Compression, 2024重点研究 Faithful Prompt Compression。Fabbri et al.,QAFactEval: Improved QA-Based Factual Consistency Evaluation for Summarization, NAACL 2022研究摘要的事实一致性评估。Liu et al.,Lost in the Middle: How Language Models Use Long Contexts, TACL 2024证明长上下文中关键信息的位置会显著影响模型对信息的利用能力。

相关新闻

FreeControl2 连接排查:从 adb 到设备参数

FreeControl2 连接排查:从 adb 到设备参数

FreeControl2 连接排查:从 adb 到设备参数 FreeControl2 v1.0.1 为 scrcpy 提供图形界面,可以管理设备、组合启动参数和查看日志。用它排查连接问题时,先分清运行环境、adb 连接和 scrcpy 参数三个层次,比直接反复点击连接更容易…

2026/10/14 19:18:30 阅读更多 →
aigc怎么降重?2026年10月亲测有效的降AI率教程,知网AIGC疑似度从90%多降到个位数!

aigc怎么降重?2026年10月亲测有效的降AI率教程,知网AIGC疑似度从90%多降到个位数!

辛辛苦苦写完的论文提交检测后AI率却特别高? 明明我们是自己写的,为啥会这样,只好到处去发帖子求降AI的小妙招,各种降AI率的方法都试了一遍,但是论文的AI率还是没降下去?一头雾水,也找不到有效…

2026/10/14 19:17:29 阅读更多 →
蒙特卡洛场景生成:新能源功率预测与风光出力不确定性分析实战

蒙特卡洛场景生成:新能源功率预测与风光出力不确定性分析实战

做新能源并网的人大概都有过这种体验:早上看气象预报,风速曲线很漂亮,功率预测模型也给出了一个看着很稳的出力曲线。结果下午风向一转,风电场实际出力直接打了七折。调度电话紧跟着就来了——你的预测偏差怎么这么大,…

2026/10/14 19:17:29 阅读更多 →

最新新闻

U-Net论文笔记:编码-解码结构与跳跃连接在医学图像分割中的应用

U-Net论文笔记:编码-解码结构与跳跃连接在医学图像分割中的应用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 20:05:13 阅读更多 →
孩子站在父母上面?家庭权力失衡的代价与修复指南

孩子站在父母上面?家庭权力失衡的代价与修复指南

你有没有见过这样的场景:五六岁的孩子因为妈妈没有及时递上水杯,当众对着妈妈又推又喊;妈妈非但不生气,反而赔着笑脸安抚:“他脾气大,顺着就好。”又或者,饭桌上孩子一撅嘴说不吃这个菜&#xf…

2026/10/14 20:05:13 阅读更多 →
多数元素算法的工程本质:从LeetCode到CPU缓存与JVM调优

多数元素算法的工程本质:从LeetCode到CPU缓存与JVM调优

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 20:05:13 阅读更多 →
嵌入式HTTP客户端自研:状态机与流式解析实战

嵌入式HTTP客户端自研:状态机与流式解析实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 20:05:13 阅读更多 →
STM32寄存器白话手册:从地址映射到位操作实战

STM32寄存器白话手册:从地址映射到位操作实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 20:05:13 阅读更多 →
软件测试核心指南:从目的原则到BUG生命周期全解析

软件测试核心指南:从目的原则到BUG生命周期全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 20:04:12 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →