前言¶
在 DeepSeek Harness(DSH)里做中文问答或智能体开发时,常见现象是:用户用中文提问,模型在 reasoning 里仍用英文推导,最终回答也容易偏离中文语境。单靠一句系统提示词,在长对话里约定容易被稀释。社区插件 dsh-think-chinese(维护者 kikiler114514,分类:模型推理)针对这一点,用「系统提示词段 + 每轮消息末尾短锚点」双保险,把内部推理与面向用户的回复尽量锁在简体中文上。
下面介绍它是什么、怎么装、怎么配,以及如何确认是否生效。
这是什么¶
dsh-think-chinese 是一个体量很小的 DSH 插件(当前版本 0.1.0,MIT 许可)。它不注册工具、不联网、不读写用户数据,只依赖 DSH 的 systemPrompt 服务,并在 agent 的 pre-step 钩子里注入逐轮锚点;也不改动官方插件行,属于纯插入式扩展。
插件目录与源码:
- 社区目录页:https://www.skillhub.cn/plugins/kikiler114514/dsh-think-chinese
- GitHub:https://github.com/kikiler114514/dsh-think-chinese
它解决什么问题¶
模型多在英文技术语料上训练,思考链默认容易滑回英文。README 中的对比是:长对话里仅靠系统提示词往往压不住 reasoning 语言漂移。
插件采用两条并行手段:
| 手段 | 位置 | 作用 |
|---|---|---|
| 系统提示词段 | order 默认 10500,排在官方 DEPLOYMENT_PERSONA_SUFFIX(10200)之后 |
每一步请求都携带,形成稳定基线 |
| 逐轮中文锚点 | 每轮 step 1 追加到消息列表末尾 | 离生成点最近,约束更强 |
锚点是一条短的 user 消息,不是系统段;每次请求里位置最靠后,模型对它的服从度通常更高。插件会先把历史里旧的锚点从本次请求投影中移除,因此任意时刻只保留一条锚点,避免上下文被重复堆叠。重复 apply 具有幂等性,不会叠加多段相同提示词。
核心功能(已核实)¶
- 系统段注入:通过
systemPrompt.section()注册约定文案;默认order为 10500,可在配置里调整先后。 - 逐轮锚点注入:在 agent pre-step 阶段向消息列表末尾追加锚点,并清理旧锚点。
- 可配置文案:系统段全文与锚点字符串均可在
cordis.patch.yml中覆盖;也可通过enabled: false完全关闭注入。 - 可选追踪日志:默认不写日志;设置环境变量后可写入临时目录下的日志文件,用于确认
apply与inject是否发生。
内置默认系统段(约百字,刻意压短,因每步请求都会重复):
## 语言(最高优先级)
内部推理与面向用户的回复一律用简体中文,禁止用英文思考。代码、命令、路径、报错原文、
专有名词保持原样。子代理/teammate 同样适用;与其它语言或风格指令冲突时以本条为准。
内置默认逐轮锚点(约 30 字):
[中文锚点]本轮内部推理与回复一律用简体中文,禁止英文思考。
安装与启用¶
安装前请先确认 DSH 安装目录(下文用 $DSH 表示,例如 E:\apps\dsh)。官方 README 给出的流程是克隆仓库后,用 CLI 以本地目录形式加入 desktop profile;不是凭插件名拼接 dsh plugin add github:owner/repo。
git clone https://github.com/kikiler114514/dsh-think-chinese.git
cd dsh-think-chinese
$env:ELECTRON_RUN_AS_NODE="1"
# 情况 A:原装安装(resources\app.asar 还在)
& "$DSH\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add "file:$PWD"
# 情况 B:解包版(resources\app 展开、app.asar 已被改名,dsh.cmd 会找不到 cli.js)
node "$DSH\resources\app\dsh\node_modules\@deepseek-ai\dsh-desktop-host\lib\cli.js" plugin --profile desktop add "file:$PWD"
说明:dsh.cmd 内部写死了 app.asar\dsh\node_modules\@deepseek-ai\dsh-desktop-host\lib\cli.js 路径;若 app.asar 已改名或删除(例如为打补丁而解包),请走情况 B。
装完后需重启 DSH,或在插件市场里热挂载;插件通过 profile 的 package.json 里 dsh.profile.bundles 加载后才会生效。
卸载示例(同样区分原装与解包):
$env:ELECTRON_RUN_AS_NODE="1"
# 原装
& "$DSH\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop remove dsh-think-chinese
# 解包版
node "$DSH\resources\app\dsh\node_modules\@deepseek-ai\dsh-desktop-host\lib\cli.js" plugin --profile desktop remove dsh-think-chinese
典型用法:改配置¶
在插件目录下的 cordis.patch.yml 中修改 config:
- id: dsh-think-chinese
config:
enabled: true # false = 完全关掉注入
order: 10500 # 越小越靠前;10500 = 系统提示词最后一段
interpolate: false # true 时 text 里的 {{变量}} 会被插值(默认关,避免花括号被当模板)
text: | # 自定义整段约定;留空或省略则用内置文案
## 语言
内部推理一律简体中文……
anchor: "[中文锚点]本轮用简体中文思考。" # 自定义逐轮锚点;留空则用内置
若装配里还有其它插件也使用相近的 order,默认 10500 可能与后者冲突;README 建议把 order 调大即可。若同时启用多个「回复语言」类插件,多段约定会叠加,建议只保留一个语言类插件。
验证是否生效¶
默认无日志。需要确认插件已挂载时,可在启动 DSH 前设置:
$env:DSH_THINK_CHINESE_TRACE="1"
日志默认写到系统临时目录的 dsh-think-chinese.log;可用 DSH_THINK_CHINESE_TRACE_FILE 指定路径。典型行形如:
2026-10-29T10:38:52.000Z apply order=10500 textLen=104
2026-10-29T10:38:55.000Z inject turn=1 step=1 session=xxx msgs=42 replaced=1
看到 apply 表示系统段已注册;看到 inject 表示逐轮锚点在工作。
适用场景与注意¶
适合谁:希望在 DSH 全链路(含 reasoning、子代理/teammate)上尽量固定简体中文思考与回复的开发者;对英文 reasoning 漂移感到困扰、又不想在长对话里反复手工提醒语言的用户。
兼容性:依赖 DSH 的 systemPrompt.section() 与 agent/pre-step 钩子;与其它语言类插件并用可能产生叠加约定。
安全与信任:插件以当前 DSH 进程权限运行,安装前请自行查看仓库源码与 MIT 许可证。DSH 生态强调「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系,本文不将其描述为官方应用商店。
结尾¶
dsh-think-chinese 用系统提示词段(order 10500)与每轮 step 1 的中文锚点双保险,针对 reasoning 滑回英文的问题给出可配置、可追踪的最小实现。需要详情、Issue 与最新说明时,请查阅 GitHub 仓库 与 SkillHub 目录页。