安装
在 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)挂载。 - 浏览器半边做两件事:
- 用
ctx.settingsScope.bind()绑定同一个设置命名空间,在settings.section槽位注册设置卡片; - 思考行的折叠态是内置
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
评论
评论存放在 GitHub Discussions。用 GitHub 账号登录后可发表评论或点表情。