跳到正文
dsh-market 浏览插件 GitHub EN

jide315/dsh-reasoning-language

通过可配置的系统提示词章节要求模型使用指定语言推理(默认简体中文),并默认展开思考行,同时保留用户手动折叠的状态。

Star 数 ★ 0 分类 UI 增强 收录于 2026-09-30

安装

在 DeepSeek Harness 里通过 dsh-market 安装

dsh plugin --profile web add dshmarket

或使用命令行

dsh plugin --profile web add github:jide315/dsh-reasoning-language

装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络。请先审阅源码,并尽量锁定 commit(github:owner/repo#sha)。

README

让 DSH 的思考过程(reasoning / thinking)用你指定的语言写,默认简体中文,并且把 「思考」行默认展开给你看。

起因:模型默认用英文做内部推理,人看不懂思考过程,开发就变成不可控的黑盒。这个插件把 「用指定语言思考」这条要求注入 systemPrompt,并且把思考行展开 —— 你就能边想边看懂。

它做了什么

能力 具体行为
思考语言 往 systemPrompt 注入一个章节,要求模型全程用指定语言(默认「简体中文」)进行内部推理
保护不翻译 同时明确要求:代码、标识符、路径、命令、配置项、报错、日志、URL、专有名词保持原样,中文没有对应术语时直接沿用原文 —— 避免为了「中文」把推理质量搞坏
回答语言不变 只约束思考过程;最终答复仍然按你提问的语言作答
默认展开思考 「思考」行默认展开显示完整推理内容(流式过程中就展开,能边想边看)。你手动折叠过的行会一直保持折叠,插件不和你的鼠标抢状态;关掉开关时也只回收「插件自己展开的」行
可视化配置 Settings → 插件 → 思考语言,改完下一轮对话即时生效,不用重启
只影响新轮次 已经产生的历史消息不会被改写(改写历史消息等于改压缩上下文,风险和收益不成比例)

安装

从 GitHub 安装:

dsh plugin --profile web add github:jide315/dsh-reasoning-language

本插件是直接提交运行时代码的纯 JavaScript 包,从 GitHub 安装不需要放行构建脚本。安装后 重启 DSH Desktop,再刷新页面即可看到 Settings 里的新卡片。

市场收录 PR 合并后,也可以在 Settings → 插件市场搜索 reasoning-language 安装。

本地开发时,在插件目录的上一级运行:

dsh plugin --profile web add ./dsh-reasoning-language

踩坑提醒(本地开发用 link: 时):不要用 file:*.tgz 装本地包。实测那样装出来的 node_modules/dsh-reasoning-language 会在某次 pnpm install 之后丢掉 lib/index.js, 导致 Harness 启动报 Cannot find module ...\lib\index.js,随后被「启动修复」当成坏插件摘掉。

出问题怎么退

正常卸载运行 dsh plugin --profile web remove dsh-reasoning-language。启动失败时 Desktop 会弹「启动修复」,直接点卸载此插件即可,并会保留一份恢复备份。

配置

Settings → 插件 → 思考语言:

项 默认 说明
启用 开 关掉就等于没装这个插件
思考语言 简体中文 填 English 就变回英文思考;任意语言名都行,模型按自然语言理解;下一轮对话起生效(提示词是每轮现组装的),已经产生的历史消息不改写
思考行默认展开 开 「思考」行默认展开。点一下当前页面立刻生效(展开/收起已有的思考行),刷新后也保持

「恢复默认」会把你改过的字段清掉(不是写回默认值),所以 settings.yaml 里不会留下 「等于默认值」的冗余条目 —— 恢复到默认后那个 reasoning-language: 段会整段消失。

持久化在 $DSH_HOME/settings.yaml:

reasoning-language:
  enabled: true
  language: 简体中文
  expandThinking: true

注入的提示词长什么样

内部推理语言:请全程使用「简体中文」进行你的思考过程(reasoning / thinking)。
这段思考是写给人看的,用自然、口语化的句子说清你正在做什么、为什么这么做、下一步打算怎么做。
以下内容保持原样,不要翻译或音译:代码、标识符、文件路径、命令、配置项名、报错信息、日志、URL、专有名词;简体中文里没有对应术语时直接沿用原文。
面向用户的最终答复仍按用户的输入语言作答,本要求只约束思考过程。

实现说明(为什么这么写)

  • Host 半边只用公开 seam:ctx.settings.register() 注册命名空间 + ctx.systemPrompt.section() 注册章节。 章节的 text 是函数,每次组装提示词都重新求值 —— 所以设置改了立刻对下一轮生效,不需要重启, 也不需要插件自己去清任何缓存。
  • 不修改 DSH 源码、不替换任何内置组件。所有能力都通过 cordis 服务(settings / systemPrompt / slots / locale / settingsScope)挂载。
  • 浏览器半边做两件事:
    1. 用 ctx.settingsScope.bind() 绑定同一个设置命名空间,在 settings.section 槽位注册设置卡片;
    2. 思考行的折叠态是内置 ReasoningRow 里逐行 useState(false),DSH 没有全局开关。 插件用 MutationObserver 监听新出现的思考行(选择器是组件自己在根上打的 data-variant="think" 语义标记,不是会随构建变化的 CSS Module 哈希类名), 发现折叠的就派发真实 click 事件 —— 走 React 的事件委托,所以组件 state 会一起更新, 不会出现「DOM 展开了但 state 还是折叠」的错位。
  • 记账规则:只有「被插件点开的行」才记进 autoExpanded。所以
    • 你手动折叠过的行 → 永久保持折叠;
    • 你自己展开的行 → 关掉开关也不会被折叠;
    • 插件展开的行 → 关掉开关时收回去。

测试

pnpm test                       # 26 组:Host 逻辑 + 设置卡片交互 + 展开器四种行为
pnpm run test:integration       # 10 组:用真实 DSH SettingsProvider / SystemPrompt 跑通

smoke 用桩,覆盖 normalize / 提示词生成 / 服务缺失降级,以及展开器的 「自动展开、尊重手动折叠、开关回收、不重复点击」,还有设置卡片三个控件的真实交互 (事件处理器会被真的调用 —— 只渲染不调用的测试抓不到 ReferenceError 这类错误)。

integration-host 需要已安装 DSH Desktop,或通过 DSH_APP_ROOT 指向兼容的 DSH node_modules。它用 DSH 自己的 FileSettingsProvider 与 SystemPrompt,验证 describe() 不抛错、schema 可序列化(toJSON 形状)、真 schemastery 生效、 以及写入落盘后提示词跟着变。

发布

发布到 DSH 插件市场 的完整流程 见 PREPUBLISH.md。自检:

node scripts/check-release.mjs

已知边界

  • 思考语言是对模型的要求,不是硬保证:个别模型可能不照做。插件在提示词里把要求写得 足够靠后(order 5000)且具体,实际遵循度很高;若某模型长期不听话,把「思考语言」填成 该模型更敏感的说法(例如 Chinese (中文))通常有效。
  • 只影响新产生的思考内容,历史消息不动。
  • 展开器依赖内置思考行的 data-variant="think" 标记。如果 DSH 以后改掉这个属性, 展开功能会安静失效(不会报错崩界面),更新插件选择器即可。

兼容性

  • 需要 @deepseek-ai/dsh >= 0.1.5-rc.1。
  • 已在 DSH Desktop 0.9.1 / dsh 0.1.5-rc.2 上开发与离线验证。

许可

MIT

内容来自项目 README(GitHub)↗

评论

评论存放在 GitHub Discussions。用 GitHub 账号登录后可发表评论或点表情。