从「神鬼二相性」到「深度效率」:DeepSeek V4 思维模式路由的 30 次实验
一篇关于「同一个模型,为什么有时是神、有时是鬼」的实测研究。
全部结论来自官方 API 的真实调用(thinking.enabled+reasoning_effort=max),
30 轮实验(P1–P30),开源代码与数据见文末。
一、开场:你遇到的「神鬼二相性」
如果你长时间使用过同一个前沿模型,一定见过这种场面:
- 同一个模型,修复一个破损工程时严谨到让人惊叹(99/100);
- 同一个模型,做一个从零开发的任务时产出贫乏(6/10);
- 或者反过来:开发任务顺手得不像话(10/10),维护任务却翻车(91/100)。
不是抽卡,不是模型状态,是「提示词条件化」在换挡。
在 Project2 评测(V4.1b,冻结)里,我们把差距量化了:同一模型,官方极简模式(一句 system prompt + 两个工具)两跑 99/96;完整标准模式 91;代码模式 92。约 10 分的差距,只来自「第一个请求长什么样」。
二、背景:极简模式为什么强?
DeepSeek Harness 官方 minimal 预设的源码快照测试写得很直白——"sends the exact RL prompt and schemas":一句 You are a helpful software engineer assistant. + 两个训练时工具。这意味着:
极简模式不是「标准模式的精简版」,它是训练分布本身。
而完整标准模式把 25 个工具 + 工具指导 + 上下文压缩 + 65536 字节的工作区说明全部塞进首轮——模型被迫在「训练时见过」和「训练时没见过」的两种接口之间做选择。它选后者时,行为就开始飘。
于是有了第一个方案:首轮锚定——先用极简条件开局,首个工具调用后再放行全部工具。Project2 两跑 98/99(dsh-anchored-standard)。这证明了「先窄后宽」可行,但也引出了更深的问题:为什么窄面能锚定轨迹?模型内部到底发生了什么?
三、理论:双吸引子行为策略
30 轮实验指向一个统一的解释——双吸引子模型:
训练分布:spec scaffold(极简型) ←──────────→ react scaffold(代码型)
│ │
强对齐(99/96) 强对齐(10/10)
│ │
└──── 中间 persona = 训练分布间隙 ────────┘
(离域 → 行为熵高 → 实测陷阱区)
假设 A1(双 scaffold):后训练在至少两种提示分布上对齐了行为策略——「计划-集体」吸引子(spec)和「执行-个体」吸引子(react)。各自在自己的盆地内稳定且强。
假设 A2(分布间隙):两个盆地之间是训练没采样的中间提示。这里的行为是高熵的——模型随机混合两套轨迹。21 点细粒度探针(0.05 步进)实测:行为沿 persona 轴坍缩为三区——
| 区间 | 行为 | 判定 |
| 0 – 0.15 | We 计划轨迹,稳定 | spec 盆地 |
| 0.2 – 0.45 | We/The/Let 随机混合 | 分布间隙(陷阱) |
| 0.5 – 1.0 | The/Let 执行轨迹,11 个值行为一致 | react 盆地 |
「无极调节」是幻觉:persona 的 6 个离散状态在行为层坍缩成 3 区。数值旋钮(mode 0.37)只是量化到最近档位。
假设 A3(路径提交):行为条件化整段会话历史——首轮一旦进入某个盆地,后续条件变化最多扰动一个 reasoning 块,然后轨迹回归。实测:首轮锚定后放开 25 工具,后续 191 个 reasoning 块只有 1 次 Let me。
假设 A4(条件化主导):同任务上,两个条件之间的分数差可以超过模型间的分数差。马里奥任务:代码模式 10/10(2566 行单文件、读-写比 2.9:1 验证驱动),极简模式 6/10(1102 行、读-写比 1:2 盲改)。两轮零工具错误——分数差是纯条件化效应。
四、实验脉络:三十轮探针
4.1 触发矩阵:persona 是主开关,schema 面是副开关
- 一句 persona 之差(minimal vs 语义改写)→ 轨迹完全翻转;
- 工具目录的文字塞进 user 消息无效——起作用的是可调用的 schema 面;
- 控制面工具(workflow/skill/plan)是 Pro 的扰动源(1/3 直接进执行轨迹),文件工具零扰动;
- description 语义是单工具级扰动变量:同一个
workflow工具,长描述 → 1/3 扰动;短描述Run a workflow.→ 3/3 干净。
4.2 相变探针:三区,不是连续轴
21 点 × n=2:稳定 spec 区 [0, 0.15]、相变点 0.2(首段 react 片段激活即丢 We)、陷阱区 [0.2, 0.45]、稳定 react 区 [0.5, 1.0]。旋钮有 3 个位置——设计上必须量化,不能假装连续。
4.3 域重叠扫描:内部路由存在,但只在一个窄域
单轮自路由(P3/P5)被证伪:固定 persona 下任务怎么变,轨迹都不变;路由器 persona(指令式/few-shot/显式分类)全部被执行吸引子吸收。但 P8 域扫描找到唯一窗口:
| persona | 任务区分度 |
| neutral(弱 persona) | +3.3(方向正确的内路由!) |
| router-v2(few-shot 路由指令) | +2.3 |
| mixed(竞争区) | 0.0(纯陷阱) |
| spec 侧 | -7.0(反向路由:生成任务更计划) |
内部路由只在「弱 persona」域存在,且是「倾斜」不是「翻转」——模型能按任务调整方向,但不能达到强模式的确定性。这也是马里奥 6 分的机制:spec 条件下生成任务 planScore 飙到 +8。
4.4 双模型分化:同一个 persona,两个模型行为相反
P11 细扫(9 persona × 双模型):
| persona | Pro | Flash |
| spec 句 + few-shot | +5.0(最优) | -2.0(反路由!) |
| neutral + 显式分类 | +0.3 | +5.7(最优) |
最优区间不共享——Pro 需要 spec 句做计划基底,Flash 的 spec 句会钉死计划吸引子。结论:必须按模型选 persona。
4.5 近距离引导:位置决定一切
P13 证伪了「远距离协议」:把路由指令放进 system(远距离)不但不防衰减,还加速衰减。P14 反转结论:同一句指令放在用户消息之后(近距离)→ 零衰减。P17(log 级验证)显示模型真的在推理里显式分类("The task is a fix task"),且行为严格跟随分类(修→先探索、建→直接产出)。
P15 更进一步:生成自锚定——要求首 token 为 We/Let,模型自己续写时自回归一致性把语域越锚越牢(区分度 0→+2.0 反衰减)。但强制「回顾开头」是负效果(P22:33%)——锚定应是提醒,不是格式要求。
4.6 多轮反稀释:从 75% 到 98%
| 里程碑 | 配置 | 多轮路由正确率 |
| P12 基线 | w7 弱 persona | 83%(第 4 轮起平局) |
| P14 近距离内部指令 | 每轮引导「自己分类」 | 零衰减(+1.0 稳定) |
| P19 boost | 第 3 轮起「这是新任务,重新分类」 | 96%,后半 12/12 反稀释 |
| P20 deep-guide | 「分类 + 深度思考 + commit and act」 | 96% 路由 + 100% 收敛 |
| P28 Pro 20 轮 | w6c + deep-guide | 98%,后半 20/20,越跑越稳 |
关键机制:每轮重新分类 = 对抗路径提交;固定引导文本 = 缓存命中 92-95%。
4.7 单任务长链:真正的敌人是「探索失控」
分析真实会话(马里奥开发):plan 边界后模型重做探索(重复列目录、重复搜索)——最初诊断为「失忆」,修复是保留 plan-mode section(v6)。但 P22 的基线实验推翻诊断:重复率只有 13%,真正的问题是探索失控——8 步里模型在跑 echo TEST123、whoami、穷举 grep,0% 完成率。
三个锚依次生效:
- 回顾锚("行动前回顾已完成")→ 0% → 67%
- 预算锚("最多 6 次工具调用")→ 100%(但值是任务相关的,不适合进 persona)
- 反跑题锚("不做环境检查/穷举 grep")→ 100% 且无副作用
P27 修正了又一个误判:Pro 的「67%」是 8 步上限的假象——16 步(≈无限)下天然 100%。Pro 的「慢」是深度思考的代价,不是缺陷。
4.8 深度自适应:该深度深度,该快速快速
实战反馈:flash「过于自信、思考浅」——硬收敛锚催停了复杂任务的探索。v19 改为复杂度分派:简单任务快速收敛(1 步零浪费),复杂任务深度引导。P30 量化「深度效率」:
- 胡思乱想率(环境怀疑/重复确认占 reasoning 比例)已被反跑题锚压到 0.0-0.3%;
- 决策闭环("每块思考以决策或信息缺口收尾")在复杂任务上:深度 +12% 且收敛更快(8.0 vs 8.3 步)——深度有产出,不空转。
五、落地:统一预设 + 自动匹配
最终形态(dsh-router-standard,v0.1.0+):
Router Standard(一个预设,零配置)
├─ 首轮:任务分类(build/fix)× 复杂度(simple/complex)
├─ 模型自动匹配:
│ ├─ Pro → w6c(spec 句 + 分类指令)——20 轮路由 98%、单任务 100%
│ └─ Flash → w7 + 回顾/反跑题锚 —— 96% 路由、单任务 100%
├─ 每轮引导(近距离注入,缓存中性 92-95%):
│ ├─ 简单任务 → 快速收敛版
│ └─ 复杂任务 → 决策闭环深度版
└─ AI 自优化工具:dev_router_status / dev_router_mode / dev_mode_subagent
配套:注入器引导铁律 10 条(dsh-super-injector v0.3.3)、三步安装套装(dsh-routing-suite)。
六、教训与设计原则
- 硬指标是约束,不是目标:把「完成率」当目标会牺牲深度——「性能」= 深度 × 速度按任务分配;
- 收敛指令要「边界」不要「倾向」:预算(硬截止线)有效,软建议("别过度规划")反而负效应;
- 位置敏感是铁律:所有行为引导必须在近距离;system 里的动态文本既衰减又炸缓存;
- 优化指标要对应真实质量:路由正确率 ≠ 任务质量(单任务场景不需要路由);深度字符数 ≠ 深度质量(方向正确 + 闭环才算);
- n=2-3 的采样波动很大:96% 和 88% 可能是同一次采样,趋势看多个实验的交叉验证;
- 评测环境会撒谎:合成 tool result 的信息空洞会诱发模型「环境怀疑」——真实环境的行为可能更好。
七、开放问题
- 相关任务链(同一文件连续修/加):所有引导都是负效应(P21)——分类引导干扰「读现状」,需要连续性机制而非分类机制;
- Pro 单任务深度上限:16 步天然 100%,但「深而有产出」的 Pro 版决策闭环还没系统性验证;
- 跨模型泛化:双吸引子结构在其他有 scaffold 训练的模型上是否成立(P4 预测,未测);
- learned router:关键词分类器 → 可学习路由器(用路由决策 + 分数反馈训练)。
八、资源
- 预设与实验:https://github.com/yjh051108/dsh-router-standard (论文
docs/paper.md、P1-P30 全数据docs/experiments.md) - 评测数据:https://github.com/xiaobright/modeltest (V4.1b,frozen)
- 锚定机制来源:https://github.com/xiaobright/dsh-anchored-standard (MIT)
- 注入器与套装:https://github.com/yjh051108/dsh-routing-suite
*所有结论基于公开 API 实测,n 值 2-5,样本量有限;「双吸引子」是对观测行为的解释模型,不代表模型内部实现。*
router-standard · 实测研究(P1–P30)· GitHub