[开源] BergaRust - 基于 Rust 和 Firefox 翻译引擎的自托管翻译服务,兼容沉浸式/简约/划词翻译 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
aalivexy
V2EX    分享创造

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

  •  
  •   aalivexy 182 天前 via Android 1944 次点击
    这是一个创建于 182 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家好,我是安来 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  
       182 天前
    老哥执行力真强啊,已 star !
    7gugu
        2
    7gugu  
       182 天前 via iPhone
    晚上回家试试看,看起来很棒
    aalivexy
        3
    aalivexy  
    OP
       182 天前
    @mzsone #1 写 Rust 是这样的,看到啥都想 rewrite it in rust
    不过我能力不够底层库还是调用了 C++了( x
        4
    ZiLong  
       182 天前
    支持,已 star
    ZiLong
    molezznet
        5
    molezznet  
       182 天前
    能支持到其他兼容吗? deeplx 或者 openai 那格式。


    ![image]( https://img.netok.xyz/1744614776252.png)
    zcp19970603
        6
    zcp19970603  
       182 天前
    已部署 支持一下
    fiercex
        7
    fiercex  
       182 天前
    二进制可执行文件搞一个,特别是 mac 的
    aalivexy
        8
    aalivexy  
    OP
       182 天前 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  
       182 天前
    主要是我的 nas 是 freebsd ,试了下编译不通过,所以以为在 mac 下问题不大,没想到强依赖 mkl
    aalivexy
        10
    aalivexy  
    OP
       182 天前
    @fiercex #9 freebsd 可能悬,因为上游没有相关的 CI/CD ; mac 下肯定是能编译的,只是可能需要一些 cmake 的配置调试,而我目前的大学的生活费不太能支持我买一台 Mac ( x

    没有强依赖 mkl ,bergamot 的 CI 是有编译 mac 版本的(这玩意还有 wasm 版本,给浏览器插件用的),有 openblas 后端可选,只是可能慢点
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2759 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 15:07 PVG 23:07 LAX 08:07 JFK 11:07
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86