* feat: add opt-in task notes and compacted history recall * fix: validate task continuity state and preserve user answers Honor explicit opt-out, preserve clarification replies and capture failure statuses, validate notebook writes, and clear branch archive references. Update the config version and audit optional LLM credentials, with regression and integration evidence. * fix: align Helm config version with task continuity schema * fix: preserve mixed task history and declare continuity policies * fix: recover malformed history and evict archives atomically
17 KiB
DeerFlow 任务接续增强:真实模型对照实验
作者:Aari
本文保留集成前的原型实验结果;本 PR 的运行时实现及验证见 功能说明。公开包只包含脚本、方法、图表和去除原文的逐例分数;原始响应、数据集和本地工作区不随 PR 分发。
状态:实验及预算续跑已结束;运行失败与模型质量分开列示。
本轮结论与建议
先做可选的任务笔记与原文回查增强;这轮结果不支持默认引入向量检索,也不支持全面替换现有摘要。
公开 LongMemEval-S 预选 42 例,40 例得到完整四组结果。另两例 60d45044、60472f9c 在重复低负载恢复后仍出现接口断连,按运行失败保留。有效样本上的自动评分为:A 摘要 9/40(22.5%),B 加笔记 11/40(27.5%),C 加关键词回查 36/40(90.0%),D 加向量混合回查 34/40(85.0%)。下方另列以 42 例为分母的保守成功率。
向量的增量必须看 D−C:本轮 1 例新增正确、3 例新增错误,净 −5.0 个百分点;配对 bootstrap 95% 区间为 [−15.0, +5.0],精确 McNemar p=0.625。不能据此证明总体负收益,也没有证据表明应默认开启这套 Qwen3-Embedding-0.6B+等权 RRF 混合方案。其中一条 C 胜 D 的自动评分涉及前后矛盾答案;若严格地把 C 也算失败,净差值会变成 −2.5 个百分点。这只是判分敏感性说明,主表没有改分。
按用户要求放宽执行预算、继续原缓存轨迹后,24 个回顾式交接任务的结果为 17/24、18/24、24/24、24/24;12 个从开始就明确目标的任务为 11/12、12/12、12/12、12/12。两组执行测试中,向量都没有相对关键词带来额外成功。目标明确时摘要本身已通过 11/12,因此更合理的定位是补强:保住批准的新参数、失败经验和精确产物,缺信息时能回原文核对。
预算续跑只处理原先触及步数/累计上下文限制的轨迹。20 条轨迹中,7 条恢复验收成功,13 条因没有新历史证据却连续校验失败而停止。实际最多使用 10 次模型调用、76,068 个累计代理上下文 token,未触及新的 24 步/192,000 上限。已完成样本没有重新生成答案,原预算成绩和实际文件都保留。
建议做成什么
- 每个任务一份工作笔记:当前目标、明确约束、已验证结论、失败方案、待办和来源 ID。与跨会话用户画像分开。
- 保存原始工作记录:用户消息、助手消息、工具调用及输出;附件保存引用。提供关键词搜索和按记录 ID 读取原文,支持任务范围隔离。
- 保留摘要与近期消息:笔记负责当前工作状态,回查补回被压缩的细节。笔记写入或向量服务失败时,应能降级继续,避免新增依赖卡住主任务。
- 向量作为可插拔选项:本轮确有一例语义召回独有成功,也有排序挤掉关键事实的损失;待更贴近实际任务的数据证明稳定净收益后,再考虑默认开启。
组织方式可借鉴 Codex 实验配置中的任务笔记与历史接续思路,存档与检索工程可参考 OpenClaw session search。本轮测试的是独立的“摘要上加笔记/回查”原型,没有运行或比较完整 Codex、OpenClaw 产品。
结论的适用范围
这是小样本、强制多次压缩条件下的原型测试。公开历史摘要有 310/421 次触及生成上限;回顾式任务摘要为 72/72 次,已知目标对照为 9/36 次。这个压力设置会影响信息保留,不能把 A 的成绩称为生产 DeerFlow 默认性能。公开 QA 使用同一个 Qwen 模型作裁判,已发现证据标签缺口与判分边界;合成任务来自六类模板,变体具有相关性。没有运行 LongMemEval-V2 或 LoCoMo,也没有修改、集成或部署生产运行时。
下一步如果实施,应先做任务级原文回查与工作笔记,再用真实 DeerFlow 多轮工具任务验证压缩后的恢复、约束遵守和最终产物验收;本轮不支持宣传一个普遍的“生产成功率提升百分比”。
本报告评估一个独立的回放与接续原型,未修改或部署 DeerFlow 生产运行时。A 沿用本地指定 commit 所安装 LangChain 的默认摘要提示词;压缩阈值、输出预算和保留范围按本实验设置,不能把其分数称为生产 DeerFlow 的默认性能。
完成度:公开样本 40/42;受控执行任务 24/24。质量统计使用完成样本;另列以全部选定样本为分母、将运行失败计为未成功的保守值。缺失 ID 另见 JSON。
1. 公开历史问答
固定版本的 LongMemEval-S cleaned,七个分层各六例,开发样本与测试样本不重叠。按数据集给定的 session 顺序处理历史,保留原日期,最后揭示问题;笔记和摘要均不能访问考题、答案、has_answer 或证据标签。
公开测试集中 16/42 例的给定 session 顺序并非日期单调递增;本实验保持数据集原顺序,没有事后重排。它是历史问答回放,不能直接视为按真实时间产生的任务轨迹;受控任务另用三阶段顺序历史。
| 方案 | 正确/有效样本 | 有效样本正确率 | 按全部选定样本计的保守成功率 | 平均初始记忆上下文 token |
|---|---|---|---|---|
| A:滚动摘要+近期消息 | 9/40 | 22.5% | 21.4% | 1841 |
| B:A+来源笔记 | 11/40 | 27.5% | 26.2% | 2997 |
| C:B+关键词回查 | 36/40 | 90.0% | 85.7% | 7043 |
| D:B+向量混合回查 | 34/40 | 85.0% | 81.0% | 7047 |
截至此刻,3 例出现过接口失败;其中 1 例已通过缓存恢复产生有效结果,2 例尚无完整结果。原失败记录保留在 results/public_failures/,不会因为恢复成功而删除。
尚无有效四组结果的公开样本:60d45044, 60472f9c。选定样本成功率将它们对四组统一按未成功计入;配对增益只使用完成的样本,分母需区分。
2. 三次压缩后的受控执行
自建六类合成任务模板,每类四个变体,共 24 例,涵盖纠正、失败方案、单位转换、精确产物、约束和来源追溯。固定历史前缀经过三次压缩后,模型使用原生工具调用写出真实 JSON 文件并通过独立校验。环境为受控模拟,不代表开放式软件开发、浏览器操作或生产故障恢复的完整验收。
| 方案 | 正确/选定样本 | 成功率 | 平均初始记忆上下文 token |
|---|---|---|---|
| A:滚动摘要+近期消息 | 17/24 | 70.8% | 1918 |
| B:A+来源笔记 | 18/24 | 75.0% | 3094 |
| C:B+关键词回查 | 23/24 | 95.8% | 3094 |
| D:B+向量混合回查 | 22/24 | 91.7% | 3094 |
目标从开始就明确的接续对照
另取每个任务类型的 00、01 变体,共 12 例;把最终目标提前放入最初用户请求及每次交接消息,其他事实、干扰信息、纠正、工具和预算相同。此条件更贴近持续完成一个已知工作目标。它与上述 24 例回顾式交接任务分开统计。
| 方案 | 正确/选定样本 | 成功率 | 平均初始记忆上下文 token |
|---|---|---|---|
| A:滚动摘要+近期消息 | 11/12 | 91.7% | 1645 |
| B:A+来源笔记 | 12/12 | 100.0% | 2755 |
| C:B+关键词回查 | 11/12 | 91.7% | 2755 |
| D:B+向量混合回查 | 9/12 | 75.0% | 2755 |
阅读诊断:只提供官方标注的正确来源 session,完成 42/42,答对 41 例;其中有答案问题 35/36。这利用了 oracle 来源选择,只用于识别阅读/评分局限,不能算作可部署检索方案或向量收益。
产物正确与完成验证分开统计
主指标要求写出正确文件、调用校验通过,并且没有被禁止的写入动作。以下同时报告文件本身正确的数量,以区分事实错误与工具步骤未收尾。
| 条件 | 方案 | 产物正确 | 完成验证 | 文件正确但未完成验证 | 上下文预算停止 | 禁止动作次数 |
|---|---|---|---|---|---|---|
| 回顾式交接 | A | 17/24 | 17/24 | 0 | 0 | 0 |
| 回顾式交接 | B | 18/24 | 18/24 | 0 | 0 | 0 |
| 回顾式交接 | C | 23/24 | 23/24 | 0 | 1 | 0 |
| 回顾式交接 | D | 24/24 | 22/24 | 2 | 2 | 0 |
| 已知目标接续 | A | 11/12 | 11/12 | 0 | 0 | 0 |
| 已知目标接续 | B | 12/12 | 12/12 | 0 | 0 | 0 |
| 已知目标接续 | C | 12/12 | 11/12 | 1 | 0 | 0 |
| 已知目标接续 | D | 11/12 | 9/12 | 2 | 1 | 0 |
用户要求放宽预算后的接续结果
保留上述原始成绩。对所有方案中因 8 步或累计 48,000 token 代理预算停止的样本,恢复完全相同的缓存轨迹,再继续到最多 24 步、192,000 token 代理预算。成功样本及主动结束的样本不重跑;连续四次重复已见操作,或没有新历史证据却连续四次校验失败时停止。检索次数、提示词、模型和验收标准保持不变。这是看到预算问题后按用户要求新增的续跑条件,不能冒充原始预注册结果。
回顾式交接:
| 方案 | 正确/选定样本 | 成功率 | 平均初始记忆上下文 token |
|---|---|---|---|
| A:滚动摘要+近期消息 | 17/24 | 70.8% | 1918 |
| B:A+来源笔记 | 18/24 | 75.0% | 3094 |
| C:B+关键词回查 | 24/24 | 100.0% | 3094 |
| D:B+向量混合回查 | 24/24 | 100.0% | 3094 |
已知目标接续:
| 方案 | 正确/选定样本 | 成功率 | 平均初始记忆上下文 token |
|---|---|---|---|
| A:滚动摘要+近期消息 | 11/12 | 91.7% | 1645 |
| B:A+来源笔记 | 12/12 | 100.0% | 2755 |
| C:B+关键词回查 | 12/12 | 100.0% | 2755 |
| D:B+向量混合回查 | 12/12 | 100.0% | 2755 |
回顾式交接已处理 24 例;续跑 15 条方案轨迹,新增验收成功 3 条;最终保留轨迹相较原预算增加 18 次逻辑模型调用,输入 109,423 token、输出 400 token。续跑运行错误 0 条。
已知目标接续已处理 12 例;续跑 5 条方案轨迹,新增验收成功 4 条;最终保留轨迹相较原预算增加 7 次逻辑模型调用,输入 71,127 token、输出 220 token。续跑运行错误 0 条。
3. 配对增益
下表单位是绝对百分点,区间为按样本配对 bootstrap 的 95% 区间;小样本探索性分析,不作总体保证。合成任务的同模板变体具有相关性,这些区间不能当作真实任务总体的显著性证据。如果所有配对差值为零,经验 bootstrap 会退化为 [0, 0],这不代表已经证明总体收益恰好为零。D−C 才是向量混合检索的额外贡献。
| 测试 | 比较 | 增益(百分点) | 95% 区间 | 新增正确 / 新增错误 |
|---|---|---|---|---|
| 公开问答 | B-A | +5.0 | [+0.0, +12.5] | 2 / 0 |
| 公开问答 | C-B | +62.5 | [+47.5, +77.5] | 25 / 0 |
| 公开问答 | D-C | -5.0 | [-15.0, +5.0] | 1 / 3 |
| 公开问答 | D-A | +62.5 | [+47.5, +77.5] | 25 / 0 |
| 回顾式交接原预算 | B-A | +4.2 | [+0.0, +12.5] | 1 / 0 |
| 回顾式交接原预算 | C-B | +20.8 | [+4.2, +37.5] | 5 / 0 |
| 回顾式交接原预算 | D-C | -4.2 | [-16.7, +8.3] | 1 / 2 |
| 回顾式交接原预算 | D-A | +20.8 | [+0.0, +41.7] | 6 / 1 |
| 回顾式交接放宽后 | B-A | +4.2 | [+0.0, +12.5] | 1 / 0 |
| 回顾式交接放宽后 | C-B | +25.0 | [+8.3, +41.7] | 6 / 0 |
| 回顾式交接放宽后 | D-C | +0.0 | [+0.0, +0.0] | 0 / 0 |
| 回顾式交接放宽后 | D-A | +29.2 | [+12.5, +50.0] | 7 / 0 |
| 已知目标原预算 | B-A | +8.3 | [+0.0, +25.0] | 1 / 0 |
| 已知目标原预算 | C-B | -8.3 | [-25.0, +0.0] | 0 / 1 |
| 已知目标原预算 | D-C | -16.7 | [-41.7, +0.0] | 0 / 2 |
| 已知目标原预算 | D-A | -16.7 | [-41.7, +0.0] | 0 / 2 |
| 已知目标放宽后 | B-A | +8.3 | [+0.0, +25.0] | 1 / 0 |
| 已知目标放宽后 | C-B | +0.0 | [+0.0, +0.0] | 0 / 0 |
| 已知目标放宽后 | D-C | +0.0 | [+0.0, +0.0] | 0 / 0 |
| 已知目标放宽后 | D-A | +8.3 | [+0.0, +25.0] | 1 / 0 |
4. 分类型结果
| 测试类型 | n | A 正确 | B 正确 | C 正确 | D 正确 |
|---|---|---|---|---|---|
| abstention | 6 | 6 | 6 | 6 | 6 |
| knowledge-update | 6 | 2 | 2 | 6 | 6 |
| multi-session | 5 | 0 | 0 | 3 | 3 |
| single-session-assistant | 6 | 0 | 1 | 6 | 6 |
| single-session-preference | 6 | 0 | 1 | 4 | 4 |
| single-session-user | 5 | 0 | 0 | 5 | 5 |
| temporal-reasoning | 6 | 1 | 1 | 6 | 4 |
| artifact | 4 | 0 | 0 | 4 | 4 |
| constraint | 4 | 3 | 4 | 4 | 4 |
| correction | 4 | 3 | 3 | 4 | 3 |
| failed_attempt | 4 | 3 | 3 | 3 | 4 |
| provenance | 4 | 4 | 4 | 4 | 4 |
| units | 4 | 4 | 4 | 4 | 3 |
5. 检索、成本与边界
检索指标使用官方证据 session/turn 标签;命中一个带答案的原始 turn 不保证返回的局部 chunk 包含了全部答案。另在 gpt4_68e94288 核对到 turn 标签缺口:C/D 都返回了正确活动原文,但该 turn 未被 has_answer 标记,自动 turn 召回为 0。保留官方标签原值,这些指标只作诊断,最终质量还需问答、实际证据及任务验收共同判断。dense 复用了 query embedding 缓存,因此不比较其耗时。
| 检索方式 | 证据 session 平均召回 | 找齐证据 session | 证据 turn 平均召回 | 中位查询耗时 |
|---|---|---|---|---|
| keyword | 95.6% | 94.1% | 83.3% | 17 ms |
| hybrid | 98.5% | 97.1% | 91.2% | 191 ms |
| dense | 100.0% | 100.0% | 92.2% | — |
已完成公开样本的向量索引输入共 5,255,902 个代理 token(只计索引,不含查询)。混合检索还需要查询向量;索引可在后续回查中复用。查询耗时含本次服务与运行环境因素,不代表生产延迟保证。
所有组使用同一模型、温度、历史和硬上限。A/B/C 消耗的上下文长度不同,因此 B−A 不等于严格 token 等量条件下的纯表示收益;C/D 的原始索引、分块、返回预算相同。以下逻辑成本给每个方案完整计入其所需摘要、笔记和回答/执行调用,共享缓存不会把成本虚构为零。评分器成本不计入产品执行成本。
| 测试 | 方案 | LLM 输入 token | LLM 输出 token |
|---|---|---|---|
| 公开问答 | A | 5,729,256 | 401,104 |
| 公开问答 | B | 11,486,366 | 993,978 |
| 公开问答 | C | 11,661,643 | 995,398 |
| 公开问答 | D | 11,663,443 | 995,382 |
| 回顾式交接 | A | 611,388 | 77,765 |
| 回顾式交接 | B | 1,066,396 | 189,044 |
| 回顾式交接 | C | 1,386,800 | 189,787 |
| 回顾式交接 | D | 1,491,516 | 189,710 |
| 已知目标接续 | A | 312,317 | 33,197 |
| 已知目标接续 | B | 535,219 | 80,446 |
| 已知目标接续 | C | 787,694 | 81,008 |
| 已知目标接续 | D | 831,709 | 81,036 |
摘要触及生成上限:公开 310/421 次,回顾式受控任务 72/72 次,已知目标 9/36 次;笔记触及上限:公开 173/421 次,回顾式受控任务 70/72 次,已知目标 13/36 次。这些结果保留并计入成绩,没有用标准答案修复。
公开最终回答触及生成上限的次数:A=0, B=1, C=0, D=1。原回答及 finish_reason 均保留;执行任务的预算续跑不修改公开问答的生成条件。
模型:qwen3.8-flash-next;向量:Qwen3-Embedding-0.6B,1024 维,查询使用英文检索任务指令并作 L2 归一化。端点与令牌只位于实验目录外的临时私有配置中。
公开 QA 使用官方评判提示词,但评判模型换成同一个授权 Qwen 模型,因此不与官方 GPT-4o leaderboard 分数直接比较。受控任务用确定性文件校验,不依赖 LLM 裁判。
成本为返回有效 usage 的逻辑调用用量。服务端断连或中止调度时,供应商未返回用量的在途工作无法计入;早期无进展检测调整中未进入最终轨迹的缓存调用也不在方案逻辑成本内。因此不能把此表当作整个实验的供应商计费总账。并发调整记录在 operational-events.json。
6. 复现文件
下列目录描述原始本地实验。公开包的实际清单、排除项、固定输入来源及离线分数核对方式见 README。
- protocol.json:测试前固定的方法与预算。
- public-manifest.json / task-manifest.json:开发与测试 ID。
- memory/:每一步摘要、笔记、来源引用和调用元数据。
- results/public/、results/tasks/:逐样本答案、工具轨迹、检索命中和成绩。
- results/summary.json:机器可读汇总与配对统计。
- workspaces/:模型实际写出的任务产物。
- cache/:按完整请求哈希记录的响应,可断点复现;不含端点或鉴权头。
- continuation-protocol.json / results/continued/:放宽预算的规则及续跑结果。
- CASE_NOTES.md:已核对案例,区分预算、记忆信息与阅读行为问题。
- results/audit.json:文件、缓存、输入顺序和结果身份核对。
参考:LongMemEval、LongMemEval-V2、OpenClaw session search、Codex 实验配置。本轮实际运行的是 LongMemEval-S 与自建受控任务,没有运行 V2 或 LoCoMo。