dsh-plugin-translate: Chat translation panel and layout-preserving PDF translation

前言

在 DeepSeek Harness(DSH)里和模型长对话时,英文回复、论文摘要或 agent 输出往往需要对照中文阅读;若把整段原文丢给通用翻译,公式、代码块和 URL 容易被改坏。单独开浏览器翻译或手工复制,又和聊天上下文脱节。下面介绍社区插件 dsh-plugin-translate(维护者 jcy0chenyuan0):在 GUI 聊天区增加翻译入口,并可选把论文 PDF 按文字块位置译后另存,与 DSH「一切皆插件」的扩展方式一致。插件目录归类为联网工具;生态目录站 SkillHub 插件页 与 GitHub 仓库由社区维护,与 DeepSeek / 幻方无官方从属关系。

这是什么

dsh-plugin-translate 给 DSH 增加翻译能力:聊天区顶部右侧只有一个「🌐 翻译」按钮,鼠标悬停展开面板、移开收起;点一下可翻译最新回复并钉住面板。同一套能力还暴露为模型工具 translate_text、translate_pdf,agent 可直接调用。

仓库当前版本在 package.json 中为 1.2.0,许可证 MIT。源码:https://github.com/jcy0chenyuan0/dsh-plugin-translate。

核心功能

聊天区 GUI

  • 悬停展开面板,选择模式与目标语言,翻译最新回复;选中聊天文字后可点「翻译选中」。
  • 面板底部可填 PDF 路径,执行「翻译 PDF 并另存为 _t.pdf」。

翻译后端(多种模式)

配置项 mode 默认 auto,依次尝试 DeepSeek 直连 → 任意 AI API → 微软翻译(配了 microsoftKey 时面板才会出现该模式)。也可固定为 deepseek / custom / microsoft。

  1. 任意 AI 的 API:OpenAI 兼容的 baseUrl + apiKey + model(aiStyle 可选 openai 或 anthropic 风格 /v1/messages),可接 OpenAI、Kimi、Qwen、GLM、OpenRouter、本地 Ollama / LM Studio 等。
  2. DeepSeek 直连:有 API Key 走 OpenAI 兼容端点;没有 Key 时可复用当前 profile 已登录的 DeepSeek 账号凭据(与 harness 自带 dsh-llm-deepseek-account 同一套取凭据方式,useAccountCredential 默认 true)。
  3. 微软翻译:可选,需配置 microsoftKey 与 microsoftRegion。

结构化切片(不误翻公式与代码)

AI 模式会先切片,只把自然语言送去翻译;公式($…$、$$…$$、\(…\)、\[…\])、代码(围栏、行内、缩进块)、URL、邮箱原样保留。

目标语言

支持 13 种:zh-Hans、zh-Hant、en、ja、ko、fr、de、es、it、pt、ru、ar、hi。默认目标语言配置键 target 为 zh-Hans。

论文 PDF 翻译

通过 PyMuPDF 助手 lib/pdfhelper.py 识别 PDF 文字块与位置,逐块翻译后写回原位置,另存为 <文件名>_t.pdf(页数不变;公式、代码、图、未翻译内容保持原样)。扫描版无文字层不做 OCR,会明确报告 pagesWithoutText。

纯文本聊天翻译不需要 Python;PDF 流水线需要带 PyMuPDF 的解释器。

安装与启用

插件以当前 DSH 进程权限运行;安装前应自行查看源码与 MIT 许可证。仓库不包含本机绝对路径或 API Key:cordis.patch.yml 由安装脚本按当前目录生成(已 .gitignore)。

1. 放置目录并生成本地 patch

把整个目录放到任意位置,例如 Windows 下 %USERPROFILE%\.dsh\plugins\dsh-plugin-translate,在该目录运行一次安装脚本:

powershell -ExecutionPolicy Bypass -File .\install.ps1

macOS / Linux:

node install.mjs

脚本按当前目录自动生成 cordis.patch.yml,不写死盘符。

2. 让 DSH 加载 bundle

任选其一:

  • 在 DSH 中让 agent 执行:plugin_manager install_bundle file:<该目录的绝对路径>(注意 install_bundle 与 file: 之间有两个空格,与 README 一致)。
  • 或按生成的 cordis.patch.yml 里 insert 的内容,手工追加到 <profile>/cordis.patch.yml(例如 %USERPROFILE%\.dsh\profiles\desktop\cordis.patch.yml)。

装完后在 GUI「设置 → 插件」中可见 dsh-plugin-translate,可整体启用/停用。

3. PDF 相关依赖(可选)

安装脚本在 Windows 上默认静默安装缺失环境;仅检查时:

powershell -ExecutionPolicy Bypass -File .\install.ps1 -CheckOnly

插件加载时还会在后台运行 bootstrap.ps1 -AutoInstall -Quiet(6 小时内不重复),不阻塞 DSH 启动。需要 Python(优先 DSH 自带运行时)与 pip install pymupdf 时才做 PDF 翻译;可用 DSH_PYTHON 或 config.pythonPath 指定解释器。关闭自动安装:patch 的 config 设 autoInstall: false,或环境变量 DSH_BOOTSTRAP=0。

改 Host 代码后立刻生效:loader 按 ES 模块路径缓存,可换未加载过的实现文件名(如 translate-host2.js)并同步改 cordis.patch.yml 的 name,再重新 install_bundle,免重启换新代码。

配置要点

cordis.patch.yml 的 config 全部可选,常用项如下(完整表见仓库 README):

键 默认 说明
mode auto auto / deepseek / custom / microsoft
target zh-Hans 默认目标语言
aiBaseUrl aiApiKey aiModel 空 任意 AI OpenAI 兼容 API
aiStyle openai openai / anthropic
deepseekApiKey deepseekModel 空 留空则用 profile 登录凭据
batchChars batchItems 1800 / 12 单次请求规模上限
maxChars maxPdfPages maxPdfBlocks 20000 / 300 / 4000 文本与 PDF 上限

也可用环境变量:AI_BASE_URL、AI_API_KEY、AI_MODEL、AI_STYLE、DEEPSEEK_API_KEY、MS_TRANSLATOR_KEY、MS_TRANSLATOR_REGION。README 说明 Key 不落盘保存。

典型用法

GUI

聊天区「🌐 翻译」→ 悬停展开 → 选模式与目标语言 → 翻译最新回复或选中文字;PDF 路径填在面板底部后另存 _t.pdf。

模型工具

// translate_text
{ "text": "……", "target": "en", "mode": "deepseek" }

// translate_pdf —— 另存为 <原文件名>_t.pdf(可用 out 指定路径 / dryRun 只体检)
{ "path": "<PDF 路径>", "target": "zh-Hans" }
{ "path": "<PDF 路径>", "target": "zh-Hans", "dryRun": true }

仓库自测命令(节选):

node test/smoke.mjs
node test/client-bundle.mjs
node test/e2e.mjs

适用场景与注意

适合:在 DSH 内快速译最新回复或选中片段;需要保留 LaTeX / 代码的 AI 输出;有文字层的论文 PDF 希望版面大致原位译成 _t.pdf。

已知限制(来自 README):扫描版 PDF 无 OCR;中英版面长度差异可能导致个别块 overflow 警告;推理模型偶发空响应体会自动拆批重试;图片内文字、矢量图标注不处理。第一次请求可能偏慢。

插件分类为联网工具,调用外部 API 或 DeepSeek 账号时需自行承担密钥与合规责任。

结尾

dsh-plugin-translate 把「悬停翻译面板 + 多后端 + 公式代码保护 + PDF 块级另存」收进一个 DSH bundle,适合已在使用 Harness 的开发者按需启用。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye