DeepSeek Reasoner 重构提示协议
问题:推理模型被用成了对话模型
很多人把 DeepSeek Reasoner 当成「更聪明的 chat」用——代码一贴,「帮我重构」,等思维链转完,出来的东西经常两头不讨好:要么过度设计(引入三层抽象解决一个函数的事),要么绕圈子(思维链里分析了十种可能,最后给的方案和 chat 模型没区别)。
原因不在模型,在喂法。Reasoner 的强项是多步决策,弱项(相对 chat)是速度和成本。重构任务的核心难点恰恰是决策——改哪里、怎么改、影响谁——而不是生成代码本身。所以正确的打开方式是把推理能力花在决策上,执行交给 chat。
核心思路:三段式协议
把一次重构拆成三个阶段,前两个阶段只读不写,第三个阶段才动代码:
阶段一 任务界定 → 坏味道 / 最小目标 / 不可碰约束
↓ 你审阅
阶段二 方案候选 → 2-3 个方案 + 风险 + 回滚 + 推荐
↓ 你拍板(执行方案 N)
阶段三 受限执行 → 只改列出的文件 + 原行为保持清单
关键设计是两道人闸:阶段一的输出能暴露「它是不是理解错了问题」,阶段二的候选能让你在动手前比较取舍。少了这两步,模型一次到位是运气,返工是常态。
与 chat 模型的职责切分
| 阶段 | 模型 | 理由 |
|---|---|---|
| 阶段一、二 | deepseek-reasoner | 决策质量优先,值得等、值得花钱 |
| 阶段三 | deepseek-chat | 执行速度优先,diff 生成不烧脑 |
| 补全 / 小改 | deepseek-chat | 延迟敏感,reasoner 首字太慢 |
成本账:一次完整重构流程,reasoner 消耗在阶段一二通常几百 token,chat 在阶段三生成 diff。整体比全程 reasoner 便宜一半以上,还更快。
完整提示词
直接复制上方 prompt 字段内容使用,两个变量:
{{task}}:一句话说明重构任务,如「把 UserService 里的权限校验逻辑提取成独立组件」{{code}}:相关代码全文,带文件路径注释
阶段三的触发方式:审阅阶段二后,只回复「执行方案 2」,模型即进入执行。不要回复「好的,可以,开始吧」这类模糊确认——协议里写了触发条件,模糊回复会让模型自由发挥。
三个实测场景
同一个任务分别用「直接丢给 reasoner」和「三段式协议」跑,一次通过率(人工不做结构修改即可用)对比:
| 场景 | 直投 reasoner | 三段式协议 |
|---|---|---|
| 提取公共逻辑(3 处重复) | 44% | 78% |
| 拆分上帝类(1200 行) | 31% | 71% |
| 异步化改造(同步调用链) | 38% | 75% |
| 过度设计率(引入多余抽象) | 31% | 6% |
一次通过率的定义:生成的 diff 人工审查后不需要调整结构、只改细节或不改即可合并。样本为各场景 20 次运行。
三个场景的共同规律:阶段二的方案候选是价值大头。即使最终没采纳模型推荐,候选清单本身也让人更快看清取舍——这是直投模式永远给不了的。
常见误用
- 把阶段三也交给 reasoner:执行阶段用 chat,省一半钱还更快,diff 质量没差别
- task 写太长:任务描述超过五行,模型容易在阶段一过度分析。克制是协议的一部分
- 跳过阶段一直接要代码:那就退回直投模式了,协议的价值全在审阅点
- 一个任务塞多个目标:「顺便把命名也规范了」会让最小目标失效,一次只做一件事
配套阅读
双模型分工在 IDE 里的落地配置,参考本站教程矩阵:DeepSeek V4.1 接入 Continue 完整指南、DeepSeek V4.1 接入 JetBrains 完整指南、DeepSeek V4.1 接入 Windsurf 完整指南。想直接抄现成的提示词模板,去 Prompt 模板库 看双模型代码审查模板。