跳到内容
当前位置:首页>电子书资讯>开源了一个电子书翻译 skills

开源了一个电子书翻译 skills

  • 2026-11-09 11:02:51
开源了一个电子书翻译 skills

我是 Aui 团队的小胖。把本地大模型用起来——电子书翻译介绍了如何用本地模型搭配一个开源库进行翻译。但使用效果不太理想。于是搞了一个翻译 skill[链接1]。

skill 可以在不同 runtime 中使用,我是在 opencode 中使用的,用 claude code 等 runtime 也没问题。模型用本地模型或者商用 API 都可以。至于翻译效果,朋友说译文比他写的中文还溜 。


AI 电子书翻译真正麻烦在于翻译风格前后统一。以及如果原书格式有问题,那么翻译后也就有问题,比如目录点了没反应,中英文排版问题等等。还有就是代码块被译成了中文,章节锚点也丢了。我搞的这个 skill 会把 EPUB 拆开,分块交给模型翻译对模型上下文友好,然后逐块校验,最后把翻译后的文件重新打包。

模型只负责翻译,书本构建、风格统一等交给 skill 工作流。

epub-zh-translate 

我的 skill 名字叫 epub-zh-translate。可以翻译的源语言目前支持拉丁字母、以空格分词的语言,英语、法语、德语、西班牙语都可以;日语、韩语、泰语这类无空格语言,以及俄语、阿拉伯语这类非拉丁字母语言还不支持。目标语言固定是简体中文。

至于 skill 是什么不多介绍了,简单说是搭配 AI agent 使用的。其中 SKILL.md 规定了翻译一本书的工作流程,而 epubzh 工具包负责拆书、抽取可翻译段落、切分块、检查译文和重新打包。本 skill 零依赖,装上就可以用。说几个比较实用的设计,不想看的可以直接跳到安装和使用环节:

  • 结构保真: 翻译前把行内标签换成占位符,翻完再换回来;<pre>、code、url 等默认不进入翻译队列。目录、锚点、脚注等链接沿用原书。
  • 分块翻译。 一本科研、技术书轻松十几万字,整本塞给模型不现实。epubzh 根据参数large/small 按不同词数进行切块 有关这两个参数见后面介绍。每块交给一个 subagent,写完自检并存储,不返回翻译结果,节约上下文。
  • 术语可控: 项目里有 terms.tsv,译前会补充术语,译完用 terms-audit 回扫。术语首次出现会翻译成 “中文(English)”,例如单词 “container” 首次出现会翻译成“容器(container)”,之后再次出现就只会翻译成“容器”。人名、地名同理。
  • 风格一致:整本书前后保持一致是该 skill 的核心目标。实现上不靠模型记忆,而是每个分块都注入同一套上下文:terms.tsv 定术语,style.md 定风格,decisions.md 记录已定译法,再附上一块结尾对齐语气。guide 把它们汇总成 TRANSLATION_GUIDE.md,术语更新后会重跑 guide。最后还会用 terms-audit 和 check 检查是否走样。
  • 自我检查: check 会数段落、对占位符、找没翻译的整句、查中英文之间有没有空格;build 和 verify 再检查 XML、内部链接和锚点。
  • 不碰源文件:中间产物都在项目目录下,最终 EPUB 输出到指定位置。

怎么装  

要求 Python 3.11 以上。不需要 pip、npm 或其他包。两种安装方式,可任选一种。

git clone

全局安装:git clone https://github.com/iniself/epub-zh-translate.git   ~/.config/opencode/skills/epub-zh-translate

项目安装:git clone https://github.com/iniself/epub-zh-translate.git  <project>/.opencode/skills/epub-zh-translate

上面只是用 opencode 示例,其他 runtime 换成其自己的目录就好。

skills CLI:

npx skills add iniself/epub-zh-translate -a opencode

如果用其他 runtime,把 -a opencode 换成其他 runtime,比如 -a claude-code,加 -g 装到全局。

怎么用 

opencode 为例,新开一个会话,用 @epub-zh-translate 调用,把书籍信息写清楚如下:

@epub-zh-translate源文件:mybook.epub中文书名:中文书名原书名:Original Title作者:Author输出:mybook-zh.epub分块配置:small

几点提示:

  • 源文件、中文书名、输出必填。最佳实践是源文件、输出文件和启动 opencode 的是同一个目录。上面的写法就是针对最佳实践的写法。好处是所有东西包括源书、译本以及翻译过程中产生的项目文件[注释1]都在当前目录下。但也可以放在不同目录,无非就是写上绝对路径。
  • 分块配置有 large 和 small 两种。large 约 2600 词,适合上下文大的模型;small 约 1200 词且最多 40 段,适合小模型。中途改会重新切块,已有译文对不上,所以不要翻到一半再换。

下面这段跟用户关系不大,是 agent 要做的事情。但了解一下会更好:

  • 第一次会先跑 init 和 extract。extract 会对每个文件做一次回环校验,确认标签和占位符能原样还原,不通过就停下。
  • 接着读目录、前言和前两章[注释2]。把术语补进 terms.tsv,生成 TRANSLATION_GUIDE.md。第一章定稿后会写 style.md,后续分块都会带上它[注释3]。
  • 之后就是循环。next 命令会选到下一块并生成提示词,并交给一个 subagent 翻译,check --chunk --fix 自检通过后再 next 下一块。
  • 同一章的全部块完成后跑一次整章 check。每章结束还会跑 terms-audit 看术语是否一致。
  • 全部块翻完后执行 build 和 verify,得到最终的 EPUB。

还有就是在翻译过程中断了,不用重头翻译,翻译进度保存在项目工作目录下。所以只要让 agent 继续翻译就好,例如:

@epub-zh-translate继续翻译已有项目:mybook-zh-project

最后,请点赞和转发。有问题直接问我们,Enjoy


往期回顾

  1. 把本地大模型用起来——电子书翻译
  2. Docs+ 更新了(用 markdown 进行公众号等内容创作及办公写作)
  3. 为什么“好用”的工具,在企业里却难以推广?
  4. 把本地大模型用起来——图片生成
  5. 把本地大模型用起来——视频生成

文章注释

1. skill 会根据输出文件的名字自动创建项目工作目录,比如这里的输出是 mybook-zh.epub,那么 skill 就会自动创建 `mybook-zh-project` 这个项目文件夹。项目工作文件比如翻译进度、翻译风格、词汇表这些都存在该目录下↩︎2. 不是强制要求 epub 要有目录这些。没有 skill 一样会完成翻译↩︎3. 术语表、风格基准和翻译方法不是在前几章生成就不变了。会在翻译过程中持续补充和更新,目的是让整本书的术语和风格保持一致↩︎


引用链接

[1] skill: https://github.com/iniself/epub-zh-translate

微信咨询 微信客服二维码微信扫一扫 · 添加人工客服 QQ QQ咨询 QQ咨询二维码QQ扫一扫 · 添加人工客服 帮助手册