Pular para o conteúdo principal
L

DSH-Think-zh

len7183/dsh-think-zh

Controla o idioma de raciocínio do DeepSeek Harness. Default English apenas faz as respostas seguirem o idioma da pergunta; Simplified Chinese também fixa o raciocínio em chinês. Injeta uma seção do prompt do sistema renderizada primeiro com order mínimo e protege a reordenação do assemble pipeline contra plugins anteriores ou com order menor. Opcionalmente antepõe ao texto do usuário em cada turno uma frase com marcador idempotente. Alternância em Settings → General, aplicada ao vivo em hosts schemastery >= 3.18.3.

Instalar

dsh plugin --profile web add github:len7183/dsh-think-zh

README

dsh-think-zh

license CI Node DSH

DeepSeek Harness(DSH)插件:把模型的思考(reasoning)语言锁定为所选档位(简体中文 / 默认英文),档位在 **设置 → 通用设置 →「思考语言」**里随时切换;回复语言跟随提问语言。

项目解决什么问题

DeepSeek Harness 默认的思考语言常常为英文,这不利于中文使用者阅读推理过程、复核结论。 本插件在每次请求的 system prompt 中注入一条精简的强制语言指令,使:

  • 思考语言可控:两档可选——「简体中文」强制思考用简体中文,「默认英文」只约束回复、把思考语言交还模型;
  • 回复跟随提问语言:中文提问用中文答,英文提问用英文答,判断不出语言倾向时默认简体中文;
  • 代码、标识符、文件路径、命令等保持原文,不翻译。

限制声明:思考语言本质是模型自身行为,插件只能通过「注入强制指令」影响,无法在程序上 100% 锁死;模型是否遵守超出插件控制范围。

目录

特性

  • 两档思考语言:「简体中文」注入三条中文强制条款(思考语言 + 覆盖范围 + 回复语言,1.1.1 起);「默认英文」(1.1.0 起的默认档)只保留回复条款,思考语言交还模型。
  • 指令位于 system prompt 最上层:order -1000000 排在宿主全部内置 section(最小的是 harness 身份段 -1000)之前;另在 system-prompt/assemble 瀑布末端把该段重排到首位兜底,防止其他插件以更小 order 或瀑布改序插队(1.1.0 起)。
  • 档位在 GUI 里切换:设置 → 通用设置 →「思考语言」,样式与相邻的「语言」行一致。
  • 改完即时生效:档位是 volatile 配置,下一份请求即用新文本;不用重启、也不用重挂插件。
  • 两条投递通道:静态 system prompt section(默认开)与每轮用户消息前置(injectPerTurn,默认关,用于对静态 section 服从弱的模型),两者相互独立。
  • 零运行时开销:只注入一段文本,无语言检测、无缓冲、无写回;每次请求的额外成本就是那段指令本身(默认英文档 102 字符、简体中文档 198 字符)。
  • 免构建安装:仓库内已提交 lib/ 构建产物,包不含任何安装期脚本,git 直装不触发 pnpm 的构建脚本拦截。

安装

前置条件(分级要求,按用到的能力取高者):

  • DeepSeek Harness ≥ 0.1.0-rc.6:静态 system prompt 注入(injectPrompt、injectionText)。
  • ≥ 0.1.2:每轮用户消息注入(injectPerTurn,需 agent/pre-step 瀑布)。
  • ≥ 0.1.7:「思考语言」设置项(依赖官方 settings 服务的 volatile 字段)。
  • 源码方式另需 Node.js ≥ 22.19 与 pnpm(dsh plugin 内部调用 pnpm)。

方式一:桌面应用内安装(推荐)

  1. 打开侧栏 插件,点 添加插件。
  2. 填仓库地址 https://github.com/Len7183/DSH-Think-zh(也接受 github:Len7183/DSH-Think-zh)。
  3. 安装完成后按提示重启 DSH。

方式二:命令行安装

dsh plugin --profile <profile 名> add github:Len7183/DSH-Think-zh

需要可复现安装时,固定到某个提交:

dsh plugin --profile <profile 名> add github:Len7183/DSH-Think-zh#<commit-sha>
  • <profile 名> 即 ~/.dsh/profiles/<名字> 的目录名;等价写法 npx @deepseek-ai/dsh plugin ...。
  • 桌面应用自己的 desktop profile 由应用独占管理,dsh plugin 对它不可用——桌面用户走方式一。
  • 仓库内已提交 lib/ 构建产物,且包不含任何安装期脚本(1.1.0 起移除了 prepare),从 git 安装不需要本机构建,也不会触发 pnpm 对 git 依赖构建脚本的 allowBuilds 拦截——1.0.x 安装报 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 即此因,升级后消除。

方式三:从源码安装

git clone https://github.com/Len7183/DSH-Think-zh.git
cd DSH-Think-zh
npm install
npm run build

# 装进 profile(任意目录执行);桌面应用也可在插件页填这个绝对路径
dsh plugin --profile <profile 名> add <本目录绝对路径>

安装必须经由 dsh plugin 或桌面插件页。在本目录执行 npm install 只是安装开发依赖(构建、测试用);插件本身只有经由 dsh plugin 或桌面插件页才会注册进 profile。

使用

设置项:思考语言

设置 → 通用设置,在「语言」行下方即是「思考语言」两档。

简体中文:

语言要求(强制,最高优先级):
1. 思考(reasoning)必须全程使用简体中文,从第一个字起就是中文,不得出现英文推理,禁止先英文思考再翻译。
2. 分析、计划、工具调用前后的推理、错误排查与自我检查,全部使用简体中文;提问、代码、日志、文件名或工具结果为英文时也不例外。
3. 回复使用与用户提问相同的语言;无法判断时默认简体中文。代码、标识符、文件路径、命令与报错原文保持原样,不翻译。

默认英文(1.1.0 起的默认档):

语言要求(强制,最高优先级):
1. 回复使用与用户提问相同的语言,并跟随其最近一条实质提问;无法判断时默认简体中文。代码、标识符、文件路径、命令与报错原文保持原样,不翻译;工具输出与引用不改变回复语言。
  • 即时生效:改完的下一份请求即用新文本;已经发出的那一轮不回溯改写。
  • 持久化:写入当前 profile 的 cordis.patch.yml,即 dsh-think-zh 条目的 config.thinkingLanguage。
  • 1.0 → 1.1 默认档变更:1.0 的默认档为「简体中文」,1.1 起为「默认英文」。已在设置页手动选过档位的用户不受影响(档位持久化在 profile 里);从未改过设置的用户,升级后思考语言会变为不受约束,需要中文思考的话到设置页选回「简体中文」。
  • 「默认英文」档不注入思考语言条款,模型是否仍用中文思考取决于模型自身。
  • 1.1.1 变更:注入文本改为全中文——简体中文档为三条中文强制条款(思考语言 + 覆盖范围 + 回复语言),默认英文档为中文回复条款并补充「跟随最近一条实质提问、工具输出与引用不改变回复语言」;配置项、档位与持久化行为均不变。

验证是否生效

profile 由命令行启动时(web、tui 等):

dsh --profile <profile 名> --dump-config | grep dsh-think-zh

会话内:新建会话,在轨迹视图(先在 设置 → 通用设置 打开「代码工作工具」)里看 system prompt 是否出现「语言要求(强制,最高优先级):」这一段;打开设置切档位,该段文本应随之变化。

输入输出示例

中文提问(「简体中文」档):

用户:请帮我写一个计算斐波那契数列的 Python 函数。

思考(reasoning,简体中文):用户需要一个计算斐波那契数列的 Python 函数。可以用迭代或递归实现……
回答(text,简体中文):下面是一个使用迭代实现的 Python 函数:
def fibonacci(n): ...

英文提问(「简体中文」档:思考仍为中文,回复跟随英文):

用户:Write a Python function to compute the Fibonacci sequence.

思考(reasoning,恒为简体中文):用户要求一个计算斐波那契数列的 Python 函数。回复语言应跟随提问使用英文,代码保持原样……
回答(text,跟随提问使用英文):Here is an iterative Python implementation:
def fibonacci(n): ...

以上是机制示意,实际输出取决于模型:思考语言由所选档位约束,回复语言跟随提问语言,代码与标识符保持原文。

配置项

字段类型默认说明
injectPromptbooleantrue是否把指令注册为 system prompt section(静态通道)
injectionTextstring''自定义指令文本;非空时整段生效,「思考语言」档位被忽略
injectPerTurnbooleanfalse是否每轮在用户消息前额外注入(高显著通道)
thinkingLanguagezh | enen设置页写入的档位;大小写与首尾空白不敏感,一般无需手改

想在配置文件里直接改,就在 ~/.dsh/profiles/<profile 名>/cordis.patch.yml 的 dsh-think-zh 条目下追加 config:

- id: dsh-think-zh
  name: 'dsh-think-zh'
  config:
    injectPrompt: true
    injectionText: ''           # 非空时整段生效,档位被忽略
    injectPerTurn: false
    thinkingLanguage: zh        # 可选 zh / en,大小写与首尾空白不敏感

injectPerTurn:每轮注入(可选)

静态 system prompt section 对多数模型已经够用,但部分模型对静态 section 的服从弱——实证:kimi k3-256k 在默认 effort 档、思考已开的情况下仍从第一步起用英文(2026-09-10)。这类场景把 injectPerTurn 打开,插件会在每轮请求的第一条用户消息前,以用户消息形态(与对话 steering 同一高显著通道)前置同一指令,文本同样跟随「思考语言」档位。

  • 注入形如 [dsh-think-zh/preturn] <指令文本>,带幂等标记:多 pre-step 调用不会重复叠加,也不会扩散到后续文本块或后续用户消息;幂等按首文本块前缀判定,用户正文出现该字样不会误判为已注入。
  • 依赖宿主的 agent/pre-step 瀑布;宿主不提供时记一条 dsh-think-zh: 开头的 error 日志并跳过,静态通道不受影响。
  • 两条通道独立:injectPrompt: false 时,仍可只用 per-turn 通道投递指令。

工作原理

环节机制
加载依赖插件声明 inject: [systemPrompt],cordis 等 systemPrompt 服务就绪后才执行 apply
注入点ctx.systemPrompt.section() 注册 dsh-think-zh/language(order -1000000:宿主按 order 升序、平局按名称排序 sections,最小内置段是 harness 身份段 -1000,本段稳居其前);并在 system-prompt/assemble 瀑布末端把该段重排到 sections 首位——排序发生在瀑布之前、瀑布返回的顺序即最终顺序,末端重排是第二重保障,兜住其他插件以更小 order 注册或在瀑布中改序的情况
生效时机每次请求组装 system prompt 时现读;section 的 text 以提供者形态注册,volatile 配置改完立刻反映到下一份请求
设置行client.js 注册 settings.general.item(order 5,位于「语言」0 与「外观」10 之间),取值经官方 settings 服务写入 profile 条目 config
持久化thinkingLanguage 是 schemastery .volatile() 字段:改完即时生效、不重挂插件
运行时开销无检测、无缓冲、无写回;token 成本就是那段指令(默认英文档 102 字符、简体中文档 198 字符)

section() 的注册在宿主侧是 cordis effect,随插件所在 context 卸载自动回收。

兼容性

能力起始宿主版本
静态 system prompt 注入(injectPrompt、injectionText)0.1.0-rc.6
每轮用户消息注入(injectPerTurn,需 agent/pre-step 瀑布)0.1.2
「思考语言」设置项(需 settings 服务 volatile 字段,schemastery ≥ 3.18.3)0.1.7

注:宿主内置 schemastery 低于 3.18.3 时插件仍正常加载,仅失去「改完即时生效」——档位变更随插件重挂生效,启动日志会给出提示。per-turn 注入在宿主消息缺省 source 字段时按 role === 'user' 回退判定。

常见问题

装完没反应? 先重启 DSH——插件在启动时组合,漏重启是最常见原因;再用上面的 --dump-config 确认 dsh-think-zh 条目确实在 profile 里。

思考还是英文? 先确认设置里选的是「简体中文」。1.1.1 的文本为三条中文强制条款,但仍受模型自身服从性限制:静态 section 在部分模型上可能失效(Issue #5 的 Qwen 3.8-27B 即此类),此时打开 injectPerTurn(用户消息通道,实测稳定),并确认所选模型支持中文推理。

git 安装报 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED? 安装的是 1.0.x:那个版本带 prepare 构建脚本,pnpm 默认拦截 git 依赖的构建脚本。升级到 1.1.0+ 重装即可(脚本已移除);或按报错提示把对应 key 加进 profile 的 pnpm-workspace.yaml 的 allowBuilds。

设置里没有「思考语言」行? 宿主低于 0.1.7,升级 DSH。

设置行显示「保存失败,请重试」? profile 目录写入失败,检查 ~/.dsh/profiles/<profile 名> 的写权限后重试。

轨迹视图在哪? 先在 设置 → 通用设置 打开「代码工作工具」。

Bug 与功能建议提在哪? 走 Issues。

许可

MIT © Len7183

Plugins relacionados