前言¶
在 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 调用¶
- 用
TreeWalker遍历文本节点,对可译父元素打标(如data-dsh-pt)并记录原文。 - 相同字符串只送翻一次;按「语言 + 原文」及模型路线做进程内 LRU 缓存(README 写明 v0.2.2 起约 4000 条),同页第二次翻译或跨页重复文案可显著减少模型调用。
- 分块并行(README 写明 3 路并行),译文由
ctx.get('llm')经resolveCallConfig→prepareCall→stream生成,形状与宿主内dsh-meme、dsh-better-sidebar等先例一致。 - 按编号写回
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 描述的流程是:
- 让智能体打开目标页面(按钮通常已自动出现);
- 点「🈯 译」;
- 约一两秒后可见文本变为译文;
- 需要对照原文时,再点按钮,或让智能体执行
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。