logo
0
0
WeChat Login
fix cnb.cool docker url and sync readme

LinguaSpark - Translation Service

GitHub Repo Docker Image

一个基于 Rust 和 Bergamot 翻译引擎的轻量级多语言翻译服务,兼容多种翻译前端 API。

English

项目背景

这个项目的起源是我看到了 MTranServer 这个仓库,它使用了 Firefox Translations Models 进行机器翻译,并且兼容了沉浸式翻译、简约翻译等 API,但发现它目前还没开源。

在寻找类似项目时,我发现了 Mozilla 的 translation-service,虽然能用但有一年没更新了,也不兼容沉浸式翻译、简约翻译的 API。由于该项目是 C++ 编写的,而我对 C++ 不太熟悉,所以我使用 Rust 重新编写了这个项目。

功能特性

技术栈

部署

Docker 是本服务唯一推荐的部署方式。

方式一:使用自带英译中模型的镜像(国内托管,推荐,速度快)

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

注意:自带英译中模型的镜像大小约 70MiB,启动后单 worker 大约占用内存 300MiB+,且翻译延迟较低。

方式二:使用预构建镜像(不含翻译模型)

# 创建模型目录 mkdir -p models # 下载你的模型到目录里 # 拉取并启动容器 docker run -d --name translation-service \ -p 3000:3000 \ -v "$(pwd)/models:/app/models" \ ghcr.io/linguaspark/server:main

Docker Compose 部署

创建 compose.yaml 文件:

services: translation-service: image: docker.cnb.cool/aalivexy/translation-service:latest ports: - "3000:3000" environment: API_KEY: "" # 可选,设置为空字符串则不启用 API 密钥保护 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

启动服务:

docker compose up -d

自定义特定语言对的镜像

如果需要创建包含特定语言对的自定义镜像,可以使用以下 Dockerfile 模板:

FROM ghcr.io/linguaspark/server:main COPY ./your-models-directory /app/models ENV MODELS_DIR=/app/models ENV NUM_WORKERS=1 ENV IP=0.0.0.0 ENV PORT=3000 ENV RUST_LOG=info EXPOSE 3000 ENTRYPOINT ["/app/server"]

翻译模型

获取模型

  1. Firefox Translations Models 下载预训练模型
  2. 模型放置结构应为:
models/ ├── enzh/ # 语言对目录名格式为 "[源语言代码][目标语言代码]" │ ├── model.intgemm8.bin # 翻译模型 │ ├── model.s2t.bin # shortlist 文件 │ ├── srcvocab.spm # 源语言词表 │ └── trgvocab.spm # 目标语言词表 └── zhen/ # 另一个语言对 └── ...

语言对支持

翻译服务会自动扫描 models 目录下的所有语言对目录,并加载它们。目录名应遵循 [源语言][目标语言] 的格式,使用 ISO 639-1 语言代码。

环境变量

变量名描述默认值
MODELS_DIR模型目录路径/app/models
NUM_WORKERS翻译工作线程数1
IP服务监听的 IP 地址127.0.0.1
PORT服务监听的端口3000
API_KEYAPI 密钥(留空则不启用)""
RUST_LOG日志级别info

API 端点

原生 API

翻译

POST /translate

请求体:

{ "text": "Hello world", "from": "en", // 可选,省略则自动检测 "to": "zh" }

响应:

{ "text": "你好世界", "from": "en", "to": "zh" }

语言检测

POST /detect

请求体:

{ "text": "Hello world" }

响应:

{ "language": "en" }

兼容 API

沉浸式翻译 API

POST /imme

请求体:

{ "source_lang": "auto", // 可选,省略则自动检测 "target_lang": "zh", "text_list": ["Hello world", "How are you?"] }

响应:

{ "translations": [ { "detected_source_lang": "en", "text": "你好世界" }, { "detected_source_lang": "en", "text": "你好吗?" } ] }

简约翻译 API

POST /kiss

请求体:

{ "text": "Hello world", "from": "en", // 可选,省略则自动检测 "to": "zh" }

响应:

{ "text": "你好世界", "from": "en", "to": "zh" }

划词翻译 API

POST /hcfy

请求体:

{ "text": "Hello world", "source": "英语", // 可选,省略则自动检测 "destination": ["中文(简体)"] }

响应:

{ "text": "Hello world", "from": "英语", "to": "中文(简体)", "result": ["你好世界"] }

DeepLX API

POST /deeplx

请求体:

{ "text": "Hello world", "source_lang": "EN", // 可选,省略则自动检测 "target_lang": "ZH" }

响应:

{ "code": 200, "id": 1744646400, "data": "你好世界", "alternatives": [], "source_lang": "EN", "target_lang": "ZH", "method": "Free" }

健康检查

GET /health

响应:

{ "status": "ok" }

认证

如果设置了 API_KEY 环境变量,所有 API 请求都需要提供认证凭据,支持两种方式:

  1. Authorization 头: Authorization: Bearer your_api_key
  2. 查询参数: ?token=your_api_key

许可证

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

致谢