본문으로 건너뛰기
Y

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.

설치

dsh plugin --profile web add github:yingshuozhang/dsh-chinese-reasoning

README

dsh-chinese-reasoning

让 DeepSeek Harness 里 agent 的可见思考过程(reasoning / chain of thought)使用简体中文,最终回复跟随用户语言。

Host-only 插件:无工具、无存储、无网络、无运行时依赖。两处提示词贡献,一个设置页。

English

背景

这个插件来自一次实测失败和一个借来的思路——它不是原创发明,下面写清楚每一部分从哪来。

实测。 在 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 自动生成):

字段默认含义
languagezhzh 注入;off 不注入,回到模型默认行为
systemSectiontrue是否保留系统提示词里的兜底声明

也可以直接写在 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

관련 플러그인