- Accueil
- Plugins
- Améliorations UI
- dsh-cot-en2cn
dsh-cot-en2cn
eyeing0721/dsh-cot-en2cn
Affiche une traduction chinoise sous chaque bloc de réflexion anglais du chat Web DSH sans modifier la transcription de session. Comprend un cache par segment, un modèle configurable et un panneau de réglages.
Installer
dsh plugin --profile web add github:eyeing0721/dsh-cot-en2cnREADME
dsh-cot-en2cn
DeepSeek Harness(DSH)的 Web 插件。模型用英文“思考”时,展开那个「思考」块,中文译文直接出现在原文下方;原文一个字节都不改。
+-- 思考 -----------------------------------------------------------------
| Let me check whether the settings service is mounted before calling
| register on it, otherwise the row would throw.
|
| | 中文译文 · deepseek/deepseek-chat [重新翻译] [复制] [收起]
| | 我先确认 settings 服务是否真的挂载了,否则注册这一行会抛错。
+------------------------------------------------------------------------
为什么需要它
在使用 DeepSeek、GLM、Gemini 等推理模型时,模型经常输出大段英文思维链(Chain of Thought)。对于中文母语用户,逐字阅读长篇英文思考过程非常耗费精力。
dsh-cot-en2cn 专为解决这个问题设计:
- 不修改任何会话数据:原文保持原样,只在浏览器界面渲染一层译文面板。
- 不浪费 Token:折叠的思考块不翻译;原文本来是中文直接跳过;已翻译内容双端缓存。
- 零运行时依赖:不引入任何第三方 npm 包,仅使用 Node.js 内置模块。
系统要求
- DSH
>=0.1.0-rc.5 - Node.js
>=20
安装与生效
从 GitHub 安装(推荐)
dsh plugin --profile web add github:Eyeing0721/dsh-cot-en2cn
国内网络如果卡在下载那一步,先给当前终端设好代理再执行:
$env:HTTPS_PROXY = 'http://127.0.0.1:7897'
从本地目录安装(开发 / 自用)
dsh plugin --profile web add /path/to/deepseek-cot-en2cn
注意:使用本地目录(link 方式)安装时,源目录不可删除或移动,否则插件会失效。
安装完成后,重启 dsh web,刷新浏览器页面即可生效。
卸载
dsh plugin --profile web remove dsh-cot-en2cn
卸载后,配置文件仍会保存在 storages 目录下,不会丢失。
实际行为与使用方式
- 界面交互:展开任意「思考」块,中文译文直接渲染在思考原文正下方。译文左侧带有一条竖线,顶部小字清晰展示所用模型、是否命中缓存以及耗时。右上角提供三个操作按钮:
重新翻译、复制、收起。 - 触发机制:
- 处于折叠状态的思考块绝不翻译,不产生模型调用。
- 展开思考块时,若模型仍在流式输出,默认等待其思考结束后再翻译,期间显示“模型还在思考,结束后自动翻译…”。
- 原文为中文时直接跳过,不发起请求。
- 分块与缓存:长文本会自动按段落、换行或句子边界分块(默认 3000 字符/块)并逐块缓存。服务端默认缓存 600 条,浏览器端同步缓存。二次展开或刷新页面均不会重复调用模型。
- 控制面板:进入 设置 → 插件 → 「CoT 英文转中文」 即可打开配置面板。面板内包含运行状态卡片(当前模型路由、缓存命中数、调用次数、最近一次调用耗时、最近一次错误、配置文件路径)、基础开关、模型选择(提供“拉取模型列表”与“用默认模型”按钮)、高级参数调整、清空缓存、恢复默认,以及一个可以直接贴英文进行效果测试的“试译”文本框。
设置项
配置文件路径:$DSH_HOME/storages/cot-en2cn/config.json(不放在 settings.yaml 中,不依赖 schema 库)。手动修改该文件是安全的,所有配置项在载入时都会经过校验并夹紧至合法范围。
| 界面上的名字 | 默认值 | 含义 |
|---|---|---|
| 启用 CoT 中文翻译 | 开 | 总开关。关掉后所有译文面板立即消失,原文不受影响。 |
| 展开时自动翻译 | 开 | 关掉后每块思考需要手动点「翻译这段思考」。 |
| 思考过程中也翻译 | 关 | 模型还在流式输出时就翻译(会重复调用模型,更费 token)。 |
| Provider / 模型 | 空 | 留空 = 跟随 DSH 默认模型。两者要么都填、要么都留空。翻译是纯体力活,建议选便宜快的小模型。 |
| 关闭思考(推荐) | 开 | 把翻译请求走 DSH 的辅助请求通道(purpose: session-title),让这次调用不产生思考 token。注意:只有 DeepSeek 官方适配器认这个映射;用 pi-ai 之类 OpenAI 兼容中转时这一项等于空操作。 |
| 目标语言 | 简体中文 | 还可选 繁體中文 / English / 日本語。 |
| 单块字符数 | 3000 | 超过就分块翻译,逐块缓存。调小更稳(不容易被 max-tokens 截断),但请求数变多。 |
| 并发请求数 | 2 | 同时进行的模型请求数。 |
| 单次超时 | 120 秒 | 单次模型请求的截止时间。 |
| 服务端缓存条数 | 600 | 按"块"缓存译文。 |
| 跳过已是中文的思考 | 开 | 原文本来就是中文时直接跳过,不调用模型。 |
| 译文文字大小 | 13px | 只影响译文面板。 |
原理与安全性保证
插件采用双端架构:
- 宿主端(lib/index.js):注册六条本地同源路由:
GET /dsh-cot-en2cn/statePUT /dsh-cot-en2cn/configPOST /dsh-cot-en2cn/translateGET /dsh-cot-en2cn/providersGET /dsh-cot-en2cn/modelsPOST /dsh-cot-en2cn/cache/clear翻译请求通过 DSH 的ctx.llm.stream()发起,复用用户在 DSH 中既有的模型渠道与凭据。翻译接口与配置接口严格限制仅接收本机(127.0.0.1)且同源的请求。
- 浏览器端(lib/client.js):利用
MutationObserver监听对话视图,寻找带有data-variant="think"属性的思考节点(带类名兜底),在思考正文下方动态插入独立的译文 DOM。
为什么不做成官方插槽:DSH 的 slot 系统未提供针对“单块思考”的细粒度位置,若替换 conversation.chat.node 会强行覆写整个 assistant 渲染器,改动过重,因此采用只做 DOM 增强的实现方式。
由此提供三项确定性保证:
- 绝不污染会话数据:插件不写会话日志,会话记录、轨迹(Trajectory)视图、KV cache、上下文压缩完全不受影响。
- 零副作用:随时停用插件,界面恢复原生状态,不留痕迹。
- 优雅降级:若未来 DSH 调整了思考块的 DOM 结构,插件仅安静地不显示译文,绝不会破坏宿主页面的正常渲染。
隐私与调用开销
- 不触碰 API Key:插件不包含、不索取、不存储任何 API Key,所有调用完全基于宿主已配置的通道。
- 按需消耗:折叠不翻、中文跳过、切块复用。并发请求控制在阈值内(默认 2),单次超时受控(默认 120 秒)。
- 完全本地:无外部数据上报,所有逻辑均在本地 Node.js 进程与浏览器之间完成。
常见问题 (FAQ)
Q: 展开思考块后没有出现译文? A: 请按顺序排查:
- 设置面板中的「启用 CoT 中文翻译」总开关是否处于开启状态;
- 该思考块是否仍处于流式生成中(默认策略会等待思考完成后自动触发);
- 思考原文是否本来就是中文(插件会自动跳过中文内容);
- 查看译文位置是否有报错提示信息,如网络超时等。
Q: 界面提示“没有可用的模型路由”? A: DSH 尚未配置默认模型,或者插件设置里的 Provider 与 模型 名称仅填写了其中一项。两者必须同时填写或同时留空。
Q: 提示输出被 max-tokens 截断? A: 思考文本较长时,可以在设置中将「单块字符数」调小(例如调整为 1500)。
Q: 译文会记录在轨迹(Trajectory)视图里吗? A: 不会。插件仅在 Web 对话视图的思考块后插入临时渲染节点,不进入轨迹记录。
Q: 会与其它 Web 插件冲突吗? A: 不会。插件不占用任何 slot 插槽,不替换既有渲染器。译文面板内按钮的点击事件均在捕获阶段拦截,不会误触发宿主思考块的展开或折叠。
质量保证
项目内置 83 项自动化测试,无第三方测试框架依赖,执行命令即可运行:
npm test
测试覆盖清单:
tools/smoke.mjs(33 项):验证长文本分块可逆性(分块重组后与原文逐字节一致)、中文检测启发式、缓存读写、并发控制、重复请求去重、失败类型归因、配置夹紧边界及包清单契约。tools/host-integration.mjs(14 项):通过模拟 cordis 运行时挂载真实路由,验证状态获取、翻译处理、配置持久化及越权请求拦截。tools/parity-check.mjs(5 项):比对插件内部封装的消息体与 DSH 原生createUserMessage,确保参数逐字段对齐。tools/browser-check.mjs(31 项):在 Headless Chrome 中加载真实的lib/client.js,验证折叠不译、流式等待、中文跳过、单次请求去重、DOM 点击事件冒泡阻断、总开关关闭即时隐藏以及配置面板渲染逻辑。
目录结构
dsh-cot-en2cn/
├── lib/
│ ├── index.js # 宿主端:配置读写 + 六条同源路由
│ ├── engine.js # 翻译引擎:分块缓存、并发闸门、超时、失败归类
│ ├── text.js # 分块与中文检测(纯函数)
│ ├── config.js # 默认值与校验夹紧
│ ├── store.js # $DSH_HOME/storages/cot-en2cn/config.json 原子读写
│ ├── languages.js # 目标语言表
│ └── client.js # 浏览器端:DOM 监听、译文面板、设置面板
├── tools/
│ ├── browser-check.mjs # 浏览器端无头集成测试
│ ├── host-integration.mjs # 宿主路由与上下文集成测试
│ ├── parity-check.mjs # 消息契约比对测试
│ └── smoke.mjs # 单元与冒烟测试
├── cordis.patch.yml
├── package.json
├── README.md
├── README.en.md
└── LICENSE
许可证
Plugins associés
dsh-web (dsh-task-board)
zhu1090093659/dsh-web
dsh-web (dsh-web-all)
zhu1090093659/dsh-web
dsh-TUI
ccch1mneyyy/dsh-tui
dsh-web-ui (dsh-task-board)
zhu1090093659/dsh-web-ui