not-smarter-just-faster
DSH「我们需要」preset 的 20+ 批实测|负面结论:不会更聪明,但更快更省(中等任务 2.4–3.8×)。附一个没预料到的发现——它让模型少查资料、多靠猜。
- Stars
- 2
- Language
- JavaScript
- Created
- Sep 24, 2026
- Updated
- Oct 15, 2026
Introduction
「我们需要」模式(we-need)
跑了 20 多批实验,结论是:这个模式不会让模型更聪明,但确实更快、更省。 附带一个我们没预料到的发现:它会让模型少查资料、多靠猜。
一个给 DeepSeek Harness(DSH)用的 agent preset,把模型的思维链锚定成中文「我们需要…」的风格。
先说结论
这是一个「风格」功能,不是「性能」功能。
| 你会得到 | 你要知道 |
|---|---|
| 中文思维链(对照 0% → 43%) | 能力上没有任何提升,多次 A/B 通过率都测不出差异 |
| 「我们需要…」句式 | 思考更短,所以更快更省(幅度取决于任务规模,见下) |
| 长任务风格不崩 | 需要重启 dsh web 才生效 |
快多少、省多少
实测数据,附适用条件:
| 任务规模(标准模式基准) | 加速 | 数据 |
|---|---|---|
| 中等(16–32 次工具调用,1–3 分钟) | 2.4× – 3.8× | n=12–20/臂,外部判卷 |
| 超大(239 次调用,46 分钟级) | 1.5× | n=2,样本小 |
- 花费:超大任务上 ¥0.55 vs ¥1.14,约 0.5×;输出 token 0.57×。
- 两组数据配置不同(早期实验的臂少 4 个插件),不能据此画趋势线。早期「速度优势随任务变长而增大」 的说法已被新数据质疑,现标为未定。
- 所有能力指标(通过率)多次实验均未测出差异。这是「没测出」,不是「证明等价」。
装之前先看这两条限制(2026-09-26 真实使用反馈 + 本机复核)
| 限制 | 实测 | 建议 |
|---|---|---|
| 长任务稳不住 | 工具调用 <100 时漂移 10%;200–300 时 46%(r=0.748) | 超过 150 次工具调用的任务别用它 |
| 需要查证的任务会做错 | 首次写代码前查证 30 → 6 次;搜索 1/5 → 0/0 | 要查资料、讲精确的任务,用标准模式 |
真实用户原话:「不查证都是错的;Let me 会仔细一点点查反而能作对。难度上来就很难受。」
这个模式适合短任务(快 2.4–3.8×)和自包含任务,不适合长任务、需要查证或精确性的任务。 详见 已知问题 与
docs/feedback-2026-09-26.md。
安装
先知道一件事:dsh 0.2 起,模式目录不再被自动扫描。
旧版的 @deepseek-ai/dsh-agent-presets 会扫 ~/.dsh/.agent-presets/<id>/,
0.2 换成了声明式注册表,官方 README 的原话是「注册表不扫描目录,也不接受 preset 路径」。
所以放好目录之后,还要跑一次仓库里的同步脚本,把目录转成 profile 里的注册声明。
少这一步,重启后模式列表里什么都不会出现。
git clone https://github.com/walksls/not-smarter-just-faster.git /tmp/we-need
mkdir -p ~/.dsh/.agent-presets
cp -R /tmp/we-need/. ~/.dsh/.agent-presets/we-need/
# 把目录同步成 0.2 认的声明。加 --check 只预览,不加参数才写入。
node ~/.dsh/.agent-presets/we-need/tools/sync-agent-presets.mjs --check
node ~/.dsh/.agent-presets/we-need/tools/sync-agent-presets.mjs
然后完全重启 dsh web,新建空白会话,在模式选择里选「我们需要模式」。
为什么必须重启、不能只刷新页面:脚本写的那段配置里有
agent-preset-registry覆盖, 热重载它会让注册表服务被销毁重建,当前所有会话的工具面当场消失 (bash/read/edit全变成unknown tool)。目录名必须是
we-need(preset.yml里的name:只是显示名)。注意
cp结尾的/.:如果副本目录已存在,cp -R <源> <目标>(不带/.)不会覆盖已有文件, 还会造出嵌套目录。已装过的话建议用rsync -a --delete <源>/ ~/.dsh/.agent-presets/we-need/。
不需要装 npm 包,也不需要改 dsh 源码。
目录
| 文件 | 说明 |
|---|---|
README.md | 你正在看的这份(总览) |
README-preset.md | 完整实验日志(20+ 批实验、含被推翻的结论) |
agent.cordis.yml | preset 定义(persona + 插件装配) |
preset.yml | 显示名 / 描述 / 排序 |
lib/*.mjs | 10 个插件 + 2 个内部模块(delegation.mjs 全体共用、detect-v2.mjs 只给 thinking-guard) |
tools/sync-agent-presets.mjs | 把模式目录同步成 dsh 0.2 认的注册声明(装完必跑一次) |
docs/ | 独立实验的原始报告(见下) |
docs/:独立实验
| 文档 | 内容 |
|---|---|
docs/feedback-2026-09-26.md | 真实使用反馈复核(长任务失守 + 不查证做错) |
docs/finding-guessing-vs-researching.md | 「少查证、多靠猜」的完整数据 |
docs/mario-ab-report.md | 马里奥任务 A/B:效率、花费、温度根因、真实使用复核 |
docs/methodology-pitfalls.md | 8 个方法坑(含「用同一个脚本校验自己」的循环论证) |
它做什么
把 DeepSeek-V4.1-Flash(含 deepseek-flash)的思维链锚定成「我们需要…」的中文风格,
同时保留全部工具能力。
机制本身不依赖具体模型(靠首轮条件塑形),但实测只在 V4.1-Flash 上做过;其他模型 (V4-Pro、V4-Flash 等)未验证,见文末「已知问题」。
原理是把「首轮条件」和「干活条件」拆开:
| 阶段 | 工具面 | 思维链 |
|---|---|---|
| 首轮(锚定) | 只有 bash + edit | 走进「我们需要…」轨迹 |
| 之后(晋升) | 全部工具自动恢复 | 保持已锚定的风格 |
晋升信号是会话里出现第一个持久事件(tool/call 或 assistant/message),不需要重启,
也不需要手动切换。
实测结论
有效的
| 改动 | 效果 |
|---|---|
| 锚定首轮工具面 | 风格锚定成功(对照 0% → 43% 中文) |
每步重新锚定(re-anchor) | 压住 step 之间的漂移 |
种子植入(seed-graft) | 真实多轮密度 1.52× |
压缩后重整(compact-reanchor) | 长会话风格不崩 |
急停阀(escape-valve) | 复读正在生成时当场中止本回合,不等下一步 |
折叠退化块(thinking-guard) | 把退化的思考块从模型可见历史里折掉,不让它每轮重放 |
防退化两件套:escape-valve 与 thinking-guard
这两个跟「中文思考」没关系,治的是退化:上下文一长,模型会陷进复读(同一句喷几百遍), 而且回合看起来还是成功的,不专门检测根本发现不了。你就算不用这个 persona,也可以单独拿去用。
| 插件 | 做什么 | 什么时候动手 |
|---|---|---|
escape-valve(急停阀) | 当场中止这一回合 | 复读正在生成时 |
thinking-guard | 把退化的思考块从模型可见历史里折叠掉,不让它每轮重放 | 下一步开始时 |
两者是上下半截,不是重复:阀管正在喷的那一段,折叠管已经进了历史的那一块。
它们共用同一个判据 detect;detect-v2.mjs 是 2026-10-14 加的第二把尺子(英文碎片轮换),
只给 thinking-guard 用,默认不启用。
三者的分工要说清楚,别指望一个顶三个:折叠管不到一次生成内部;压缩管不到刚生成的那一块 (它落在逐字保留尾里,要下一次压缩才带走);阀是唯一能当场断的。
本机实跑时这两个改挂到了宿主层,对所有模式生效,因为退化跟模式无关,标准模式一样会复读。
仓库里的 agent.cordis.yml 保留 enabled: true 的自包含写法,装在这个模式下就能用;
想对所有模式生效,把这两条挪到 profile 的宿主层即可。
被自己推翻的(这些也留在文档里)
| 曾经的结论 | 实测推翻后 |
|---|---|
temperature: 0.1 有 1.93× 收益 | 复现失败,且长任务上导致退化循环(3/3 崩溃),已于 2026-09-23 关闭 |
| 「整段用中文」的提醒有效 | 改成「第一句锚定」后实测无改善(p=0.21),已退回 |
| 本模式提升能力 | 两次 A/B 通过率均无差异 |
| 加条款能治退化循环 | 不能。循环会把条款本身当填充物(实测「(停止空转)」出现 325 次) |
本项目的原则是:每次推翻自己都留在文档里,不删。完整记录见
README-preset.md。
贯穿全部实验的单一根因:思考长度
它同时决定风格漂移、token 成本和速度。所有有效的改动都在压它;所有无效的 (并行提示、观察层、历史改写)都没碰到它。
副作用:先查证的行为显著减少
这是使用者最该知道的一点,也是它「只提速不提智」的机制。
同一任务(「生成马里奥游戏,越像越好」)下对比标准模式与本模式:
| 指标 | 标准模式 | 本模式 |
|---|---|---|
| 首次写代码前真正查证次数(中位) | 30 | 6 |
web_search / web_fetch | 1 / 5 | 0 / 0 |
| 思考中「猜疑词」密度(每千字符) | 0.01 | 0.96 |
典型对比:
- 标准模式:前 20 步全在查资料。搜 SMB 物理常数反汇编,抓逐帧数据,下载真实关卡数据, 然后才开始写。
- 本模式:探完环境,第 8 步就开始写代码,全程一次网都没搜。
怎么解读(请不要过度解读)
可以说:本模式的「更快更省」(30 分 vs 46 分、127 vs 239 次调用、¥0.55 vs ¥1.14) 主要来自少做调研,而不是「想得更高效」。
不能说「查得少 = 成品更差」。该任务下两边判卷都是 16/16 关键词、都能运行;标准模式反而有
1/2 有效样本是白屏 bug(lv.kinds.charAt is not a function),本模式 3/3 能跑。
可能的原因是马里奥这类任务不需要精确常数(差不多就能玩)。在必须查准的任务上 (真实 API 对接、特定版本行为、精确规格),少查才可能致命。
这一点在 2026-09-26 被真实使用反馈证实了(见下方「已知问题」第 5 条): 有用户实测「不查证都是错的,Let me 会仔细一点点查反而能作对」。 在需要精确性的任务上,请用标准模式。
已知问题与限制
下面第 5、6 两条来自 2026-09-26 的群友真实使用反馈,我用本机会话日志独立复核过 (
docs/feedback-2026-09-26.md)。这两条会直接影响你该不该用它。
-
退化循环(模型陷入无意义重复直至输出预算耗尽)。
- 触发场景:开放式、没有明确终点的任务(比如反复权衡要不要验证)。
- 已缓解:关闭
temperature(实测 3/3 崩溃 → 3/3 正常)。 - 未根除:加条款、改措辞都被证明无效,循环会换形态。
-
风格会随对话变长衰减。语言在每段思考的前 40 字符就锁定,火源是「紧跟英文工具输出之后」。
-
需要重启 dsh web 才能让
.mjs改动生效(刷新页面无效)。 -
本 preset 只测过 DeepSeek V4.1-Flash,其他模型未验证。
-
长任务会稳不住,拐点约在 150–200 次工具调用。实测 14 个真实会话:工具调用 <100 时 漂移中位 10%;200–300 时跳到 46%;会话内部同样成立(0–49 次工具时 7% → 150–199 次时 69%)。 相关系数 r = 0.748(工具次数 vs 漂移)。长任务请不要指望它守住风格。
-
在需要查证或精确性的任务上,它更容易做错。
2026-09-27 已改软:删掉了 persona 里两句会压制查证的话 (「已经知道答案的事,不要再调工具去验证」「用最少的调用把事做完」),换成 「必要的查证不算无谓调用,拿不准的必须先查」「一次把事做对;调用次数少不是目标」。 效果未验证:短任务消融测不出差异(三臂全过),长任务消融未跑。
本模式会显著减少查资料:首次写代码前查证次数中位 30 → 6、
web_search/web_fetch1/5 → 0/0、思考里「猜疑词」密度 0.01 → 0.96。真实用户反馈:「不查证都是错的; Let me 会仔细一点点查反而能作对」。API 对接、版本行为、精确规格这类任务,请用标准模式。 (在自包含任务上未测出通过率差异,四种任务类型的 A/B 全部无差异。)
我不维护这个项目
这是个人实验的副产品,作者不提供维护、不承诺修 bug、不保证跟进 DSH 版本。
- 结论可能被后续实验推翻(文档里每次推翻都留着,欢迎继续推翻)。
- 欢迎 fork、改、拿去用(MIT 许可)。
- 有想法或数据想补充,欢迎开 issue 或 PR,但别期待及时回复。
如果你做出了更有意思的实验,那正是这个仓库被公开的原因。
许可
MIT,与 DSH 本体一致。
本 preset 只依赖官方包(@deepseek-ai/dsh-*),不含任何第三方代码,也不含任何密钥。