dsh-inpage-translator:在智能体打开的页面上一键整页翻译

前言

在 DeepSeek Harness(DSH)里让智能体打开网页读资料时,常见做法是整页截图或抽取片段再交给模型。外文页面往往还要你另开翻译扩展或复制粘贴,和「就在眼前这张页」脱节。dsh-inpage-translator 走另一条路:在智能体正在查看的浏览器页面里放一个常驻浮层按钮,点一下把可见文本原地换成译文,再点一下恢复原文;翻译走宿主已配置的 LLM,插件本身不持有 API key。下面介绍它是什么、能做什么、怎么装、怎么用,以及需要接受的边界。

这是什么

dsh-inpage-translator(整页翻译)由维护者 7gzgn 发布,在 DSH 社区目录中归类为联网工具。一句话定位:给智能体打开的每一张有内容的页面自动装上「🈯 译」按钮,一键替换页面上每一个可见文本节点,再点还原;长页分块、重复串只翻一次,由宿主 LLM 服务完成翻译。

与「只动本机、文件、窗口」的前序插件不同,这是作者 README 中提到的第一个直接改动「陌生网页」DOM 的 DSH 插件;设计上只改文本、只加内联样式,且不注入外部 <style>,以降低与页面 CSP 的冲突面。

核心功能

常驻按钮与后台巡场

插件后台约每 1.5 秒扫描所有存活的浏览器会话,自动把翻译按钮装进有内容的页面;页面导航后按钮会随注入消失,巡场会再次安装。按钮位置可按站点记在 localStorage(键名 dsh-ipt-pos),拖拽后导航或重开仍落在原处。

浮层使用 position: fixed 与极高 z-index,样式写在元素上,不依赖页面里的样式表。

点击翻译与还原

手势 结果
点一下 原文 ↔ 译文切换
长按约 320ms 进入拖拽
拖到左右边缘 48px 内 吸成贴边小把手(仅显示 🈯)
点贴边小把手 展开为胶囊形,不触发翻译

拖拽结束时的松手不会误触翻译。

文本处理与 LLM 调用

  1. 用 TreeWalker 遍历文本节点,对可译父元素打标(如 data-dsh-pt)并记录原文。
  2. 相同字符串只送翻一次;按「语言 + 原文」及模型路线做进程内 LRU 缓存(README 写明 v0.2.2 起约 4000 条),同页第二次翻译或跨页重复文案可显著减少模型调用。
  3. 分块并行(README 写明 3 路并行),译文由 ctx.get('llm') 经 resolveCallConfig → prepareCall → stream 生成,形状与宿主内 dsh-meme、dsh-better-sidebar 等先例一致。
  4. 按编号写回 textContent;还原时恢复全部原文。

工具回执中会包含送翻条数、回填条数、模型调用次数、字符数与上限、唯一串数、缓存命中、超限丢弃、兜底原文、跨域 iframe 数量及警告等字段,README 强调不静默丢弃、不编造数字。

工具动作 translate_page

智能体或你可调用插件工具,常用 action 如下:

translate_page action=install        # 确保按钮在,并等用户点(默认等 60 秒)
translate_page action=translate      # 不等点击,立刻翻
translate_page action=restore        # 回到原文
translate_page action=status         # 只读状态(含活会话清单)
translate_page action=sessions       # 只读:列出所有活着的浏览器会话

自 v0.2 起,install 不再是必做前置:巡场会自动装按钮;install 适合「同一次调用里等待用户点一下」的场景。

可选参数包括:target(默认 zh,另有 en / ja / ko / ru)、mode(默认 replace,可选 bilingual)、maxChars(不传则按页面唯一文本量在约 4000~24000 字符间自适应)、waitSec、session(不传则选最活跃会话)、provider、model。

依赖

  • 内置浏览器(ctx.get('browser')):缺失时明确报错。
  • 宿主 LLM 服务(ctx.get('llm')):插件不读 API key,不自行 fetch 外部 HTTP。

package.json 标明当前版本 0.2.4,许可 MIT,Node >= 18;与 DSH 0.2.0-rc.2、0.2.1-rc.2 等 release 在兼容性字段中标记为 compatible(以插件包内 dsh.compatibility 为准)。

安装与启用

市场收录后,可在 DSH 内搜索 dsh-inpage-translator 安装。README 给出的手动方式(Windows 示例)如下:

New-Item -ItemType Junction -Path "$env:USERPROFILE\.dsh\profiles\desktop\node_modules\dsh-inpage-translator" -Target "D:\dsh\projects\dsh-inpage-translator"
# profile 的 package.json:dependencies 加 "dsh-inpage-translator": "link:D:/dsh/projects/dsh-inpage-translator"
# 并把 "dsh-inpage-translator" 加进 dsh.profile.bundles(漏了不加载)→ 重启 DSH

DSH 生态是「一切皆插件」;SkillHub 目录页 为社区站点,与 DeepSeek / 幻方无官方从属关系。安装前请自行查看 GitHub 仓库 源码与许可证。插件以当前 DSH 进程权限运行,并会在页面内执行脚本、调用本机 LLM。

典型用法

人工阅读外文页时,README 描述的流程是:

  1. 让智能体打开目标页面(按钮通常已自动出现);
  2. 点「🈯 译」;
  3. 约一两秒后可见文本变为译文;
  4. 需要对照原文时,再点按钮,或让智能体执行 translate_page action=restore。

若要在对话里主动整页翻译而不等点击:

translate_page action=translate

指定语言或双语对照示例(参数名以 README 为准):

translate_page action=translate target=en mode=bilingual

适用场景与注意

适合:智能体已用 DSH 内置浏览器打开的外文文档、论坛、产品页;你希望「所见即所翻」、且愿意把页面文本交给本机配置的模型处理。

边界(README 已写明,使用前请接受):

边界 说明
非工具栏按钮 宿主内置浏览器工具栏无第三方扩展点,按钮只能做进页面浮层。
跨域 iframe 仅当前文档 DOM;跨域 iframe 内文字翻不到,回执会报告数量。同源 iframe 目前也不在整页范围内。
可见文本节点 不处理图片/canvas/背景图文字;不改 <input> / <textarea> 的值。
字符上限 maxChars 未传时自适应,超出部分会回报并跳过;传正数则硬截断。
DOM 被页面脚本改写 打标可能用 span 包裹,若页面重写 DOM,译文可能被覆盖,可重新执行翻译。
隐私 页面内容会进入你配置的 provider;敏感页请自行判断是否翻译。

安全方面,README 说明插件不发外部请求、不建本地 HTTP 服务、不写凭据;位置记忆仅写 localStorage 的 dsh-ipt-pos,不存页面正文。

结尾

dsh-inpage-translator 把「整页翻译」收进 DSH 插件与宿主 LLM:按钮常驻、点击即翻、再点还原,重复文案与缓存减轻额度压力,回执字段便于核对是否翻全。进一步了解可访问社区目录 7gzgn/dsh-inpage-translator 与源码仓库 github.com/7gzgn/dsh-inpage-translator。

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

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

小夜