dsh-think-chinese:用系统段与逐轮锚点固定简体中文思考

前言

在 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 具有幂等性,不会叠加多段相同提示词。

核心功能(已核实)

  1. 系统段注入:通过 systemPrompt.section() 注册约定文案;默认 order 为 10500,可在配置里调整先后。
  2. 逐轮锚点注入:在 agent pre-step 阶段向消息列表末尾追加锚点,并清理旧锚点。
  3. 可配置文案:系统段全文与锚点字符串均可在 cordis.patch.yml 中覆盖;也可通过 enabled: false 完全关闭注入。
  4. 可选追踪日志:默认不写日志;设置环境变量后可写入临时目录下的日志文件,用于确认 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 目录页。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜