V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
aalivexy
V2EX  ›  分享创造

[开源] BergaRust - 基于 Rust 和 Firefox 翻译引擎的自托管翻译服务,兼容沉浸式/简约/划词翻译

  •  
  •   aalivexy · 22 天前 via Android · 1315 次点击

    大家好,我是安来 Aalivexy

    最近用 Rust 写了个小项目 BergaRust,想和大家分享一下。

    项目地址: https://github.com/aalivexy/translation-service Docker 镜像: https://github.com/aalivexy/translation-service/pkgs/container/translation-service (国内加速见下文)

    起因:

    之前看到 MTranServer 这个项目,用了 Firefox 的离线翻译模型,还兼容沉浸式翻译 API ,感觉很不错,但项目没开源。找了一圈发现 Mozilla 官方有个 C++ 的 translation-service,但很久没更新了,API 也不兼容。我对 C++ 不熟,干脆就用 Rust 基于 Mozilla 的 Bergamot 翻译引擎重写了一个。

    BergaRust 是什么?

    一个轻量级的、自托管的多语言翻译服务。核心是 Rust + Bergamot 翻译引擎 (Firefox 同款)。

    主要特点:

    • 🚀 高性能 & 低资源占用: Rust 编写,内存占用相对较低 (自带英中模型的镜像启动后单 worker 大约 300MB+ 内存)。
    • 🧠 离线翻译: 基于 Firefox 的 Bergamot 引擎和模型,完全在本地运行,保护隐私。
    • 🔌 强大的兼容性: 支持多种翻译插件 API:
      • 沉浸式翻译 (Immersive Translate)
      • 简约翻译 (Kiss Translator)
      • 划词翻译 (HCFY)
    • 🔍 内置语言检测: 可自动识别源语言(不过只推荐长文本使用,短文本准确率还是问题)
    • 🔐 API 密钥保护: 可选,保护你的服务不被滥用。
    • 🐳 Docker 部署: 推荐方式,简单快捷。

    技术栈:

    • Web 框架: Axum
    • 翻译引擎: Bergamot Translator
    • 翻译模型: Firefox Translations Models
    • 语言检测: Whichlang

    快速部署 (推荐国内镜像):

    如果你只需要 英译中,可以直接用下面这个预置了模型的镜像 (镜像约 70MB):

    docker run -d --name translation-service \
      -p 3000:3000 \
      docker.cnb.cool/aalivexy/translation-service:latest
    

    Docker Compose 部署 (带健康检查和可选 API Key):

    services:
      translation-service:
        # 国内用户推荐用 cnb.cool 加速镜像
        image: docker.cnb.cool/aalivexy/translation-service:latest
        # 或者用官方 GitHub 镜像 (需要自己挂载模型)
        # image: ghcr.io/aalivexy/translation-service:main
        # 如果使用 ghcr.io 镜像,需要取消下面 volumes 的注释并准备好模型文件
        # volumes:
        #  - ./models:/app/models
        ports:
          - "3000:3000" # 左边的 3000 可以改成你想要的外部端口
        environment:
          API_KEY: "" # 设置你的 API 密钥,留空则不启用密码保护
          # NUM_WORKERS: "1" # 可以调整翻译工作线程数,默认为 1
          # RUST_LOG: "info" # 日志级别
        restart: unless-stopped
        healthcheck:
          test: ["CMD", "/bin/sh", "-c", "echo -e 'GET /health HTTP/1.1\r\nHost: localhost:3000\r\n\r\n' | timeout 5 bash -c 'cat > /dev/tcp/localhost/3000' && echo 'Health check passed'"]
          interval: 30s
          timeout: 10s
          retries: 3
    

    保存为 compose.yaml,然后 docker compose up -d 启动。

    如何使用?

    部署后,你就可以在沉浸式翻译简约翻译划词翻译等插件的设置里,选择自定义 API ,填入你的服务地址 (例如 http://your-server-ip:3000) 和对应的 API 路径 (/imme, /kiss, /hcfy),如果设置了 API_KEY 环境变量,记得在插件设置或请求中带上。

    添加其他语言模型:

    可以从 Firefox Translations Models 下载模型文件,放到挂载的 models 目录下,服务会自动加载。具体目录结构请参考 GitHub README 。

    为什么分享?

    如果你像我一样:

    1. 注重翻译隐私,不想把数据发送给第三方。
    2. 需要一个可以自托管、资源占用合理的翻译方案。
    3. 希望兼容常用的浏览器翻译插件,获得无缝体验。

    那么 BergaRust 可能是一个不错的选择。

    项目基于 AGPL-3.0 许可证开源。

    欢迎大家试用、反馈、或者去 GitHub 点个 Star 支持一下!

    10 条回复    2025-04-14 17:09:19 +08:00
    mzsone
        1
    mzsone  
       22 天前
    老哥执行力真强啊,已 star !
    7gugu
        2
    7gugu  
       22 天前 via iPhone
    晚上回家试试看,看起来很棒
    aalivexy
        3
    aalivexy  
    OP
       22 天前
    @mzsone #1 写 Rust 是这样的,看到啥都想 rewrite it in rust
    不过我能力不够底层库还是调用了 C++了( x
    ZiLong
        4
    ZiLong  
       22 天前
    支持,已 star
    molezznet
        5
    molezznet  
       22 天前
    能支持到其他兼容吗? deeplx 或者 openai 那格式。


    ![image]( https://img.netok.xyz/1744614776252.png)
    zcp19970603
        6
    zcp19970603  
       22 天前
    已部署 支持一下
    fiercex
        7
    fiercex  
       22 天前
    二进制可执行文件搞一个,特别是 mac 的
    aalivexy
        8
    aalivexy  
    OP
       22 天前 via Android
    @mzsone 感谢支持

    @7gugu 感谢支持

    @ZiLong 感谢支持

    @molezznet #5 有考虑兼容,如果软件有提供自定义 API 接口的话更好,可以针对性适配

    @zcp19970603 感谢支持

    @fiercex bergamot 的快速翻译依赖 intel mkl 库,目前我知道的信息是 MKL 2024 已经不支持 Mac 了,老版本的也只支持 Intel Mac

    虽然理论上是可以通过 openblas 来提供 Mac 支持,但我目前没有 Mac :(,能和我说说你的使用场景是什么么?我目前还是更多的将这个项目作为 selfhost 在 homelab 的一个服务开发的
    fiercex
        9
    fiercex  
       22 天前
    主要是我的 nas 是 freebsd ,试了下编译不通过,所以以为在 mac 下问题不大,没想到强依赖 mkl
    aalivexy
        10
    aalivexy  
    OP
       22 天前
    @fiercex #9 freebsd 可能悬,因为上游没有相关的 CI/CD ; mac 下肯定是能编译的,只是可能需要一些 cmake 的配置调试,而我目前的大学的生活费不太能支持我买一台 Mac ( x

    没有强依赖 mkl ,bergamot 的 CI 是有编译 mac 版本的(这玩意还有 wasm 版本,给浏览器插件用的),有 openblas 后端可选,只是可能慢点
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1309 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 23:40 · PVG 07:40 · LAX 16:40 · JFK 19:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.