会自我轮转的 Agent:从“命中率 99.9% 还是很贵“到实测省 76% 会自我轮转的 Agent从命中率 99.9% 还是很贵到实测省 76%我在 DeepSeek HarnessDSH上做了一个上下文预算插件用 1181 步真实数据校准了成本模型并把长会话的每步成本压到 1/3.3。这篇文章把四组实验、一个反例、一个优化和插件实现全部摊开包括踩过的五个坑。一、起点一个很自然的错误直觉我问过好几个模型同一个问题上下文缓存命中率越高是不是越省钱答案都是是。这句话也没错——错的是它容易被当成全部。我自己的会话是这样命中率99.6%看起来很健康。但把账单拆开后就露馅了长会话823 步 平均上下文 381K 每步 40,321 等价 token而同期一个没有记忆的聊天机器人每步只要 4,600。命中率高 37 个百分点成本贵 8 倍。二、把成本拆成三个乘数成本 ≈ 上下文大小 × 调用次数 × 缓存折扣用真实日志分别测出三个系数乘数实测比值说明上下文大小30×227K vs 7.5K调用次数5×agent 一步一件事要跑 5 步缓存折扣10×命中价约为未命中的 1/10大多数人只盯着第三个而它已经到顶了99.9%剩 0.1% 空间。真正的杠杆是第一个。三、实验一记忆够用比记忆多更重要设计3 组上下文 × 8 道题 × 2 次 48 次测量每次都开全新会话杜绝残留。组记忆内容A无只有系统提示 工具定义BMEMORY.md 全文约 1.5K tokenCMEMORY.md 600 条背景摘要约 20K token结果组平均步数每题成本正确率A 无记忆3.4412,157100%B 有记忆1.752,034100%C 长背景1.755,340100%AstrBot 对照—4,628—B 组只要无记忆的 1/6只要对照组的 44%而且答案全对。最贵的那一题题目A 组B 组“AstrBot 的数据库文件叫什么”51,4071,497A 组不知道去磁盘里搜——一次烧掉 5 万。B 组从记忆里直接答。34 倍差距全花在搜索上。但记忆不是万能折扣同一批题里数一下目录里有几个 .md 文件这题A 组 2,412 ← 更便宜 B 组 2,551 ← 多带了一段用不上的记忆记忆只在里面真有答案时生效。四、实验二长任务里记忆反而亏钱同一个项目不能只报好消息。任务目录里已有 step1.txt1、step2.txt2新建 step3.txt 等于两者之和。判分直接读磁盘。组平均步数每步上下文平均成本A 无记忆5.76,6155,726B 精确记忆3.517,7127,239C 模糊记忆3.820,1808,634交叉步数 5.7 → 3.5 省 39% ✅ 每步上下文 6.6K → 17.7K 贵 168% ❌ 净结果 反而贵 26%省下来的步数被撑大的上下文吃掉了。膨胀从哪来记忆本身只有 50 个 token。膨胀发生在**注入记忆这个动作**上模型收到你已经完成了前两步之后先去目录里确认了一遍——它不相信记忆。那一轮探索的输出从此留在会话前缀里每一步都要重读。给它记忆它反而多跑了一趟。五、实验三一句话把亏损翻成收益既然亏损来自模型不信记忆那就让它信。五种注入方式各 6 次同一道长任务题组怎么说的步数成本A 无记忆—5.75,726B 精确旧「你已经完成了前两步step1 是 1step2 是 2」3.57,239C 模糊「做了几步但没记数值」3.88,634E 静默只给事实4.35,819D 权威「**【权威记录·无需核实】**直接用不要再调工具确认」2.54,368B 精确旧 26% ← 亏 D 权威 −24% ← 赚同一份事实、同样的信息量只改了措辞。旧措辞你已经完成了……“读起来像别人的说法模型去核实新措辞这是你自己的记录权威、直接用”它就不怀疑了。但方差还在D 组六次是 1、1、2、2、4、5 步——概率性地减少核实不是永久生效。六、实验四真实轮转 355 步省 76%前面的实验都是受控的。这一组是真实使用把长会话轮转成小上下文会话各跑一段真活。会话步数平均上下文峰值等价 token每步长会话未轮转823381K727K33.18M40,321轮转 1124128K252K1.83M14,742轮转 29068K126K0.73M8,138轮转 3进行中141113K203K1.79M12,710轮转后合计355107K—4.35M12,261每步成本 40,321 → 12,261降到 1/3.3。线性拟合1181 步的单步成本对上下文做拟合全部 1181 步 equiv 0.10403 × ctx 809 R² 0.56 长会话 823 步 equiv 0.10527 × ctx 182 R² 0.44 轮转后 358 步 equiv 0.10115 × ctx 1,468 R² 0.95三个系数几乎相同0.101~0.105说明成本确实主要由上下文决定跟会话新旧无关。即每 1K 上下文 ≈ 104 等价 token另外每步约 0.8~1.5K 固定开销。反事实如果不轮转从长会话结束时的 401K 接着跑这 355 步按实测的每步 474 增长反事实 18,224,161 实际 4,352,608 省 13,871,55376.1%轮转本身贵不贵不贵。三次轮转的首步成本分别是 2,614 / 3,054 / 3,529都低于长会话首步的 4,665因为长会话首步是冷启动要全量 miss。真正决定账单的是轮转频率不是轮转成本。还能省多少轮转间隔平均上下文每步等价 token每 40 步21K~3,000每 60 步26K~3,500每 120 步40K~5,000不轮转107K~12,300现在两次轮转的间隔是 90~124 步还没吃到红利。按 40K 预算约每 60 步轮转每步还能再降 70%。七、插件怎么做架构每轮结束 → 记账步骤数、上下文、命中率、等价成本 ↓ 上下文 BUDGET ↓ 是 agent 自己写交接摘要工具参数 ↓ 用「权威措辞」注入新会话 挂进工作区 ↓ QQ 桥读 active_session.json自动切过去三个关键 APIDSH cordis 插件ctx.on(session/event,(session,event){// 每条 assistant/message 都带 usage直接拿来记账})constcreatedawaitcontroller.create({cwd:E:/DSH-work})awaitcontroller.prompt({sessionId,content:[{type:text,text:seed}]},newAbortController().signal)五个坑每个都让插件静默失效或直接报错① bundle patch 必须用insert形式# 错这是改已有条目目标不存在会被静默跳过-id:my-pluginconfig:{...}# 对-insert:-id:my-pluginname:my-pluginconfig:{...}② package.json 必须导出补丁文件exports:{.:./index.js,./cordis.patch.yml:./cordis.patch.yml,./package.json:./package.json}少了中间那行 →ERR_PACKAGE_PATH_NOT_EXPORTED插件永远挂不上。验证node -e require.resolve(你的插件/cordis.patch.yml)③ prompt() 的第二个参数是 AbortSignal必传不传报Cannot read properties of undefined (reading throwIfAborted)。④ 工具输出 schema 是additionalProperties: false返回对象多一个没声明的字段就整轮失败tool x returned invalid output: value.y is not a declared property⑤render必须返回内容块数组不是字符串render:(v)JSON.stringify(v)// ❌ content.some is not a functionrender:(_args,v)[{type:text,text:...}]// ✅⑥这个最隐蔽create()不传 cwd会话会落在宿主的工作目录第一次轮转新会话跑到了--C-Users-white-.dsh-profiles-desktop--下看不到任何项目文件。必须显式传cwd并且调workspaceRegistry.create(cwd).attachSession(id)挂进工作区。一个意外的发现新会话一开口就是20,528 token而预算设的是 20,000。系统提示 工具定义约 19.5K就是地板。交接摘要只占 1K。所以预算必须设在 4 万以上否则每次轮转完立刻超预算。八、这套东西的边界已验证成本模型、记忆的收益与反例、措辞的影响、真实轮转的 355 步。没验证质量损失。所有对比都只算 token没算压缩后答错率。反事实是同样步数不是同样效果。样本量。记忆实验 48 次、长任务 18 次、优化 30 次——够看方向不够下断言。单机单模型。系数 0.104 是 DeepSeek 的价格结构换供应商要重测。长任务的反例只测了一种题型写一个文件更长的多步任务没覆盖。最该补的是第 1 条。省钱省到答错就没有意义。九、复现# 从任意 DSH 会话日志模拟预算曲线python simulate.pysession.v4.jsonl.zstd--csvturns.csv# 轮转前后对比python tools/rotation_report.py数据文件bench/data/*.csv48 次记忆实验、18 次长任务、30 次优化共 1181 步轮转日志。十、一句话上下文不是记忆是账单。记住该记的忘掉能忘的比记得更多便宜六倍。数据时间2026-10-27 ~ 11-03 口径DSH 会话日志assistant/message.usage缓存单价系数 0.1单位等价 token未命中计 1缓存计 0.1输出计 1。下面是该插件已在GitHub上开源https://github.com/whitelady0666-boop/dsh-context-budget