- Startseite
- Plugins
- Gedächtnis
- dsh-chinese-reasoning
dsh-chinese-reasoning
yingshuozhang/dsh-chinese-reasoning
Makes a DeepSeek Harness agent reason in Simplified Chinese: each turn it appends one runtime-context instruction at the end of the conversation, and it can keep a stable declaration in the system prompt as well. Settings pick Simplified Chinese or off, and whether that declaration is included.
Installation
dsh plugin --profile web add github:yingshuozhang/dsh-chinese-reasoningREADME
dsh-chinese-reasoning
让 DeepSeek Harness 里 agent 的可见思考过程(reasoning / chain of thought)使用简体中文,最终回复跟随用户语言。
Host-only 插件:无工具、无存储、无网络、无运行时依赖。两处提示词贡献,一个设置页。
背景
这个插件来自一次实测失败和一个借来的思路——它不是原创发明,下面写清楚每一部分从哪来。
实测。 在 DSH 0.2.2-rc.1 的 Windows 桌面 profile 上,@max-null/dsh-chinese-thinking@0.3.1 只做一件事:注入一条 systemPrompt.section(order: -90,「始终使用中文进行思考和回复」)。插件确实加载了,那句话也确实进了系统提示词第一行,但 agent 的 reasoning 仍然是英文。能对上这个现象的解释有三条:那行文字排在上万 token 的英文提示词和工具 schema 之前;section 对「回复」的约束力大于对「推理」的约束力;它没有落到推理真正开始的位置。这是一台机器、一种配置下的观察,不是对 section 方案的普遍判决。
借来的思路。 Reasonix 的 REASONING_LANGUAGE.md 给出了本插件依赖的机制:可见推理的语言主要由本轮第一段 reasoning 锚定,注入之所以有效,是因为它让第一段落在偏好的语言上,之后各段通常自己维持;同时,它把这条指令放进 user turn 上的一个小临时块,而不是改动稳定的系统提示词或工具 schema,从而不破坏 prompt cache。它也没回避局限:长回合被别的语言主导时仍会漂移,中途重申只能部分拉回。
DSH 侧的先行工作。 lco117/dsh-think-any-lang 已经把这件事故到了 DSH 上——一个「思考语言」设置项,加上基于 section 的注入。本插件目标相同,走的是另一条通道。
本插件做的事。 DSH 本来就有承载「每轮临时块」的接缝:systemPrompt.context() 会在本轮末尾渲染一条 user 角色的运行时快照,每个 step 刷新,文本不变时由宿主去重。本插件把指令放在这里,在系统提示词里保留一条常量声明作兜底,并用 ctx.effect() 注册两者,使禁用或热重载不会把注入留下。
如果出现更好的做法,这个 README 该指向它,而不是替自己的方案辩护。
注入的文本
思考语言:你的推理、分析和内部思考过程(chain of thought)必须用简体中文书写,即使工具输出、代码或对话历史是英文。最终回复同样使用中文,除非用户明确要求其他语言。代码、命令、文件路径、专有名词保留原文。
这段文字是刻意这样写的:用目标语言写成,并且明确点名推理 / 内部思考 / chain of thought——只写「思考」,模型会理解成「回答」。
接线方式
| 通道 | 服务调用 | order | 说明 |
|---|---|---|---|
| near-turn 上下文 | ctx.systemPrompt.context() | 300 | 作为 runtime-context 的 user 快照追加到本轮末尾;required: true 让它在压缩后仍保留;文本不变时宿主去重,所以是一轮一条快照,不是每步一条 |
| 稳定声明 | ctx.systemPrompt.section() | 10 | 常量文本,紧跟身份声明、早于所有工具说明;因为恒定,不引起 prompt cache 抖动 |
两个注册都包在 ctx.effect(() => …) 里。section() / context() 把 disposer 注册在 systemPrompt 服务自己的 ctx 上,不外包一层的话,注册会活过插件:插件被禁用后仍继续注入,重新挂载还会撞上 prompt section "reasoning-zh" is already registered。
没有时间戳、没有每轮变化的值、没有随机内容——文本就是模块里的一个常量。
安装
dsh plugin --profile <profile> add github:YingshuoZhang/dsh-chinese-reasoning
或在 DSH 的 设置 → 插件 里安装本目录。
补丁里还带了一行 - id: chinese-thinking + disabled: true,装了旧插件 @max-null/dsh-chinese-thinking 时会把它停用,避免两段指令叠加。没装时该行被警告后跳过,不影响安装。
设置
设置 → 插件 → 中文推理链(由插件的 Config schema 自动生成):
| 字段 | 默认 | 含义 |
|---|---|---|
language | zh | zh 注入;off 不注入,回到模型默认行为 |
systemSection | true | 是否保留系统提示词里的兜底声明 |
也可以直接写在 loader 行上:
- id: reasoning-zh
name: dsh-chinese-reasoning
config:
language: zh
systemSection: true
边界
- 它设的是推理语言,不是回复语言;用户明确要求别的语言时以用户为准。
- 不翻译代码、标识符、文件路径、shell 命令、技术专名。
- 它是提示层手段,不是模型开关:能锚定一轮里第一段推理的语言。长回合被大量英文构建日志、代码或工具输出主导时,后续段落仍可能漂移,中途重申只能部分拉回。
- 改成
off后立即停止新注入;已经在进行的会话里,早先那条快照会留到新会话或压缩。
验证
- DSH
0.2.2-rc.1(Windows 桌面 profile):文本出现在system/message的 section 位置,并作为source.kind = "runtime-context"快照的最后一个条目;一轮 35 个 step 只有一条快照。 - 从插件管理器禁用 → 启用:注入先消失再回来,行保持
active(即上面ctx.effect的作用)。
许可
MIT
Ähnliche Plugins
hindsight (coding-agents)
vectorize-io/hindsight
OpenViking (dsh-memory-plugin)
volcengine/openviking
MemOS (memos-local-plugin)
memtensor/memos
ReMe (dsh)
agentscope-ai/reme