长日志去噪:面试讲述与追问
通用日志与测试日志的流程、取舍、真实样例和证据边界
直接答案
快速复习目录 · 全部功能 · Markdown 源稿
把它讲成一个有约束、可恢复的工具结果去噪插件。讲述顺序是问题、流程、取舍、验证和限制。
可直接口述:
Agent 执行构建和测试时,会产生大量进度和重复日志。这些内容可能占用主模型上下文。因此,我在工具执行后增加了可选的日志去噪。
系统先用规则识别候选,并保护失败、摘要和状态等证据。辅助判断器结合任务、候选和保留原文,选择省略、保留或不确定。宿主再检查阈值、任务是否变化和实际节省量。保存原文成功后,才交付带恢复入口的缩短文本。
一个真实主模型参与的合成项目样例中,日志从 8,407 减至 2,122 码点。主模型实际收到了缩短文本,原文也由验收者回读核对。这验证了该样例的去噪和恢复链路。它还不能证明平均 token、费用或任务成功率收益。
整体流程
下面展示有语义候选时的主流程。测试日志另有精确重复内容的规则处理路径。
插件通过 tools/post-execute 处理模型可见文本。结构化结果、退出状态和程序返回值保持原语义。原生 spill 与历史 compaction 后续仍可生效。
通用分支处理已识别的进度、重复警告和普通通过信息。测试专用分支保护失败详情、摘要、慢测试和任务点名内容。两者默认关闭;一次结果最多走一个分支。
测试分支识别 Vitest/Jest、pytest 和 Node TAP 的常见文本。它也保护首次警告、skip/todo 和工具状态。完全相同的长失败详情可用首次原文行号引用替换;不同失败必须保留。缺少明确任务依据时,纯进度另有规则处理路径。规则处理同样需要保存原文并达到净节省门槛。
判断器究竟看到什么
| 输入 | 用途 |
|---|---|
| 直接用户消息与最近可见助手意图 | 提供任务依据,不复制主模型全部上下文 |
| 工具名称与命令意图 | 说明这次日志来自什么操作 |
| 确定保留的原文、行号与保护原因 | 判断候选是否提供新的任务所需事实 |
| 候选正文、行号、类别与 ID | 明确每题可以处理哪一段 |
| 精确重复引用与未提交候选范围 | 标明证据来源和未展示内容 |
| run_code 的日志外结果文本 | 单独保留程序结果展示 |
每个候选对应一个 omit / keep / unknown 选择题。日志内容被标记为不可信数据,不应当作指令。
不能只告诉模型“摘要已保留”。它必须看到摘要原文,才能判断摘要是否覆盖所需信息。其他候选不保证保留,因此不能互相作为省略依据。
设计取舍怎么讲
| 选择 | 理由 | 代价或限制 |
|---|---|---|
| 规则筛选后再做语义判断 | 限制模型能处理的文本;结合当前任务判断 | 规则无法识别的格式会旁路 |
| 省略原文片段,保留其余原文 | 避免自由摘要改写事实 | 压缩空间受保护规则限制 |
| 默认省略阈值 0.7 | 倾向保留不确定内容 | 未校准,不代表 70% 准确率 |
| 先保存原文,再发布省略结果 | 为省略内容保留恢复入口 | 原文存储失败则放弃去噪 |
| 单次判断,默认等待 4 秒 | 限制辅助请求等待;故障时继续原流程 | 成功去噪也会增加判断开销 |
| 同时要求净减 300 码点和 10% | 把省略标记和恢复提示计入收益 | 文本节省不等于总费用节省 |
| 接入原生工具结果流程 | 让 Session 与主模型输入能对齐检查 | 后续原生裁剪仍可能改变可见文本 |
阈值优先使用返回的 probabilities.omit,缺失时才使用 confidence。真实样例中二者分别是 0.86 和 0.79,按前者达到当时的 0.8 门槛。
验证结果怎么讲
通用日志:官方 Luna,2026-10-07。
| 层次 | 已有证据 | 能支持的结论 |
|---|---|---|
| 本地协议和生命周期测试 | 历史报告为 27 文件、300 用例通过 | 整个插件测试结果,不是本功能的语义准确率 |
| 受控输入与真实 Luna | 保留进度时省略概率 0.48,原文交付 | 低于门槛时保留有效 |
| 受控输入与真实 Luna | 只需摘要时概率 0.95;2,351 → 440 | 该受控样例的真实判断被采纳 |
| 真实主模型与真实工具 | 合成项目编译 160 模块;生成 480 条进度 | 工具执行和日志来源真实 |
| 同 Session 日志续验 | 8,407 → 2,122 码点,减少 74.76% | 一个通用长日志样例的文本减少 |
| 最终交付与恢复核验 | Session 与下一次主请求含相同缩短文本 | 缩短结果确实进入主模型请求 |
验收者逐字回读原文一致。主模型没有主动回读原文,因此不能声称模型完成了恢复动作。最终回答中的模块数、sum 与哈希准确。
该样例使用 DeepSeek Flash 主模型和官方 Luna 判断后端。74.76% 的结果不应说成 Jev 后端的实测结果。
Luna 公开报告记录方法、模型和原文恢复边界。
测试日志:真实 Jev,2026-09-27。
| 执行条件 | 实际结果 | 可以说明什么 |
|---|---|---|
| 固定主模型与工具材料;真实 Jev;180 条通过项 | 7/10 候选达到 0.8;10,837 字符净减 7,443,即 68.7% | 受控样例实际进入 Hook 并交付缩短文本 |
| 固定材料;真实 Jev;失败及精确重复详情 | 3/4 候选过线;5,843 字符净减 3,257,即 55.7% | 规则与模型共同减少文本,保留不同失败及来源引用 |
| 固定材料;点名登录与慢测试,或要求三个最短用例 | 两类负例均未省略;1、2、3 ms 用例保留 | 指定负例中保留了任务需要的信息 |
| 真实 Flash、原生 bash、实际 Vitest、真实 Jev | 180 项通过;18 候选为 0.66–0.71;20,543 字符完整保留 | 真实分支触发及低于门槛保留生效,没有缩减收益 |
| 真实 Vitest;73 通过、1 失败 | 没有 Jev 调用;保留断言、堆栈、退出码和 351 ms 慢项 | 失败证据保留,不能算模型判断成功 |
受控样例的最终 Agent 输入与持久 Session 逐字相同。PTC 样例还核对结构化程序值,缩短的只有外层日志。
那轮原始自动验收命令退出 1,因旧标准要求低概率负例也必须压缩。接受保守保留后,只对同一批保存结果离线复核;未重跑原命令。不能说原始命令全部通过。
测试日志公开报告保留上述结果和历史退出状态。规则与集成测试验证接线及故障处理,不能作为真实模型语义准确率。
面试追问
为什么不用正则直接删? 规则适合识别格式和保护固定证据。某条通过信息是否有用,还取决于任务。用户要求找最快的测试时,通过行里的耗时就有意义。
为什么不让大模型直接总结? 这个功能选择有约束的省略。它保留未选中片段的原文和顺序,并给出原文恢复入口。自由摘要可能改写事实,也更难把省略结果映射回原始行。
怎么防止误删? 先限制候选,再提供真实保留证据。低概率和 unknown 都保留;采纳前还核验任务状态。原文保存用于事后恢复,但这些措施不构成零误删保证。
怎么证明不只是 API 调通? 分别检查判断答案、宿主采纳、最终工具结果和后续主请求。再检查任务产物与原文回读。HTTP 200 只能证明请求成功返回。
为什么受控测试能减 68.7%,真实 180 项测试却没有省略? 受控样例的概率为 0.79–0.83,7/10 块过线。真实轮次为 0.66–0.71,18 块全部保留。硬门槛解释了省略量差异,但没有解释模型分数的成因。
两轮使用不同日志、任务文字、分组、保留证据和工具来源。它们不是控制变量实验,也没有重复测量。不能直接归因于某一个因素,或把受控压缩率外推到真实任务。真实测试运行无净节省,仍产生了辅助判断开销。
面试可以说:“受控样例验证了省略链路,真实运行验证了触发和保守保留。当前还没有测试日志在自然任务中的稳定平均压缩率。”
参数与下一步评估
默认通用日志触发长度为 6,000 码点,测试日志为 4,000。候选块目标为 1,200;序列化请求预算为 48,000。任务与工具意图预算为 12,000。
48,000 是可配置的工程预算。它没有精确执行提供方 tokenizer 容量检查。超预算先减少候选;必要证据仍放不下,就不做语义删除。
未来若评估普遍收益,可比较关闭去噪、仅规则与规则加模型。这是建议,尚未完成。
应测量任务完成率、关键证据误省略率、恢复次数、总 token 和判断时延。总成本需要计入辅助判断请求及主模型后续开销。