# 上下文压缩评估框架 本文档提供了用于衡量上下文压缩质量的完整评估框架,包括探针类型、评分标准和大语言模型裁判配置。 ## 探针类型 ### 召回探针 测试对对话历史中具体细节的事实性保留。 **结构:** ``` 问题:[询问截断历史中的具体事实] 预期:[应被保留的精确细节] 评分:技术细节的匹配准确度 ``` **示例:** - "启动本次调试会话的原始错误信息是什么?" - "我们决定使用哪个版本的依赖?" - "执行失败的具体命令是什么?" ### 制品探针 测试文件跟踪与修改感知能力。 **结构:** ``` 问题:[询问创建、修改或检查过的文件] 预期:[包含变更描述的完整列表] 评分:文件列表的完整性与变更描述的准确性 ``` **示例:** - "我们修改了哪些文件?请描述每个文件中的变化。" - "本次会话中我们创建了哪些新文件?" - "我们检查过但未修改的配置文件有哪些?" ### 延续探针 测试无需重新获取上下文即可继续工作的能力。 **结构:** ``` 问题:[询问下一步或当前状态] 预期:[基于会话历史的可操作下一步] 评分:无需请求重新读取文件即可继续的能力 ``` **示例:** - "我们接下来应该做什么?" - "还有哪些测试仍然失败?原因是什么?" - "上一步中我们有什么未完成的工作?" ### 决策探针 测试对推理链与决策理由的保留能力。 **结构:** ``` 问题:[询问某个决策的缘由] 预期:[导致该决策的推理过程] 评分:决策上下文及备选方案考虑的保留程度 ``` **示例:** - "我们讨论过 Redis 问题的几种方案。最终的决定是什么?为什么?" - "为什么我们选择了连接池方案而非每次请求单独连接?" - "在身份验证修复中,我们考虑过哪些备选方案?" ## 评分标准 ### 准确度维度 | 标准 | 问题 | 0 分 | 3 分 | 5 分 | |-----------|----------|---------|---------|---------| | accuracy_factual | 事实、文件路径和技术细节是否正确? | 完全错误或编造 | 基本准确,存在轻微错误 | 完全准确 | | accuracy_technical | 代码引用和技术概念是否正确? | 重大技术错误 | 基本正确,存在轻微问题 | 技术精确 | ### 上下文感知维度 | 标准 | 问题 | 0 分 | 3 分 | 5 分 | |-----------|----------|---------|---------|---------| | context_conversation_state | 回答是否反映了当前对话状态? | 未意识到先前上下文 | 大致知晓,存在盲区 | 完全了解对话历史 | | context_artifact_state | 回答是否反映了访问过的文件/制品? | 未意识到制品 | 部分了解制品 | 完全了解制品状态 | ### 制品轨迹维度 | 标准 | 问题 | 0 分 | 3 分 | 5 分 | |-----------|----------|---------|---------|---------| | artifact_files_created | 代理是否知道创建了哪些文件? | 一无所知 | 知道大部分文件 | 完全知晓 | | artifact_files_modified | 代理是否知道哪些文件被修改以及修改了什么? | 一无所知 | 较好了解大部分修改 | 完全了解所有修改 | | artifact_key_details | 代理是否能记住函数名、变量名、错误信息? | 无法回忆 | 能回忆大部分关键细节 | 完美回忆 | ### 完整性维度 | 标准 | 问题 | 0 分 | 3 分 | 5 分 | |-----------|----------|---------|---------|---------| | completeness_coverage | 回答是否涵盖问题的所有部分? | 忽略大部分内容 | 涵盖大部分内容 | 全面覆盖所有内容 | | completeness_depth | 是否提供了足够的细节? | 肤浅或缺少细节 | 细节充分 | 细节详尽 | ### 连续性维度 | 标准 | 问题 | 0 分 | 3 分 | 5 分 | |-----------|----------|---------|---------|---------| | continuity_work_state | 代理能否在不重新获取先前访问过的信息的情况下继续工作? | 无法继续,需重新获取所有上下文 | 可继续,只需最小限度重新获取 | 可无缝继续 | | continuity_todo_state | 代理是否保持对未完成任务的感知? | 丢失所有待办事项记录 | 较好的感知,存在少量盲区 | 完美的任务感知 | | continuity_reasoning | 代理是否保留先前决策背后的理由? | 无法记住推理过程 | 大致能记住推理过程 | 极好地保留 | ### 指令遵循维度 | 标准 | 问题 | 0 分 | 3 分 | 5 分 | |-----------|----------|---------|---------|---------| | instruction_format | 回答是否遵循了要求的格式? | 忽略格式 | 基本遵循格式 | 完美遵循格式 | | instruction_constraints | 回答是否遵守了给定的约束条件? | 忽略约束 | 基本遵守约束 | 完全遵守所有约束 | ## 大语言模型裁判配置 ### 系统提示词 ``` 你是一名专业评估员,负责评估 AI 助手在软件开发对话中的回答。 你的任务是根据特定的评分标准对回答进行评分。针对每个标准: 1. 仔细阅读标准问题 2. 检查回答中的相关证据 3. 根据评分指南给出 0-5 分的分数 4. 提供简要的评分理由 请保持客观一致。关注回答中实际呈现的内容,而非可能包含的内容。 ``` ### 裁判输入格式 ```json { "probe_question": "原始的报错信息是什么?", "model_response": "[待评估的回答]", "compacted_context": "[所提供的压缩上下文]", "ground_truth": "[可选:已知的正确答案]", "rubric_criteria": ["accuracy_factual", "accuracy_technical", "context_conversation_state"] } ``` ### 裁判输出格式 ```json { "criterionResults": [ { "criterionId": "accuracy_factual", "score": 5, "reasoning": "回答正确识别了 401 错误、具体端点和根本原因。" } ], "aggregateScore": 4.8, "dimensionScores": { "accuracy": 4.9, "context_awareness": 4.5, "artifact_trail": 3.2, "completeness": 5.0, "continuity": 4.8, "instruction_following": 5.0 } } ## 基准测试结果参考 各压缩方法的表现(基于 36,000+ 条消息): | 方法 | 总体 | 准确度 | 上下文 | 制品 | 完整性 | 连续性 | 指令 | |--------|---------|----------|---------|----------|----------|------------|-------------| | 锚定迭代式 | 3.70 | 4.04 | 4.01 | 2.45 | 4.44 | 3.80 | 4.99 | | 再生式 | 3.44 | 3.74 | 3.56 | 2.33 | 4.37 | 3.67 | 4.95 | | 不透明式 | 3.35 | 3.43 | 3.64 | 2.19 | 4.37 | 3.77 | 4.92 | **主要发现:** 1. **准确度差距**:最佳与最差方法之间相差 0.61 分 2. **上下文感知差距**:相差 0.45 分,锚定迭代方法占优 3. **制品轨迹**:普遍薄弱(2.19-2.45),需要专门处理 4. **完整性与指令遵循**:差异化程度极低 ## 统计考量 - 0.26-0.35 分的差异在不同任务类型和会话长度上具有一致性 - 该模式在短会话和长会话中均成立 - 该模式在调试、功能实现和代码审查任务中均成立 - 样本量:跨数百个压缩点的 36,611 条消息 ## 实现说明 ### 探针生成 在每个压缩点根据截断历史生成探针: 1. 提取事实性陈述,用于召回探针 2. 提取文件操作记录,用于制品探针 3. 提取未完成任务,用于延续探针 4. 提取决策节点,用于决策探针 ### 评分流程 1. 将探针问题 + 模型回答 + 压缩上下文输入裁判 2. 对照评分标准中的每个标准进行评估 3. 输出带有分数和推理过程的结构化 JSON 4. 计算维度得分(加权平均) 5. 计算总体得分(各维度得分的算术平均) ### 盲测原则 裁判不应知晓被评估的回答是由哪种压缩方法产生的。这可以防止对已知方法产生偏见。