Skip to content

快速翻译(神经网络翻译) ​

本文对应模型资源 firefox-translations-93-pairs 接口行为与 LinguaSpark Server 一致。Mozilla 的训练与推理文档介绍模型及训练流程;HTTP 请求格式由服务端定义。

服务地址与模型 ​

  • 算力舱 API 地址:
  • 健康检查:
  • 本次局域网服务地址:http://192.168.1.224:18126。其他设备请替换为实际 IP 和映射端口。
  • 模型资源 ID:firefox-translations-93-pairs。
  • 完整模型仓库 ID:manateelazycat/firefox-translations-93-pairs。
  • POST 请求使用 Content-Type: application/json。

调用时不需要传 model。服务根据 from 和 to 选择已加载的语言对模型;模型资源 ID 用于标识模型集合,不是请求参数。

当前服务的 /v1/models 和 /v1/chat/completions 返回 404,接入时使用下列翻译接口,基础地址无需添加 /v1。

接口清单 ​

以下 8 个接口均在上述服务上实测返回 200。

方法路径用途主要请求字段或返回内容
POST/translate单条或批量翻译text、from、to;返回译文和语言代码
POST/detect语言检测text;返回 language
POST/imme沉浸式翻译兼容接口text_list、source_lang、target_lang;返回 translations
POST/kissKiss Translator 兼容接口text、from、to;返回译文和语言代码
POST/hcfy划词翻译兼容接口text、source、destination;译文在 result 数组中
POST/deeplxDeepLX 兼容接口text、source_lang、target_lang;译文在 data 中
GET/health健康检查返回服务状态
GET/metricsAI Pod 用量统计返回 Prometheus 文本格式计数器

上游路由定义和接口字段定义可用于对照请求格式。/metrics 为当前 AI Pod 部署提供的额外接口。

单条与批量翻译 ​

单条翻译 ​

请求 POST /translate:

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

实际响应:

json
{
  "text": "Hello, world.",
  "from": "zh",
  "to": "en",
  "result": "Hello, world."
}
字段必填说明
text是字符串,或用于批量翻译的字符串数组
from否源语言代码;省略或填写 auto 时自动识别
to是目标语言代码,例如 en、zh、ja

响应中的 text 已经是译文。当前部署额外返回 result,内容与 text 相同;上游原生响应只定义了 text、from 和 to。

批量翻译 ​

仍使用 POST /translate,将 text 改为数组:

json
{
  "text": ["Hello, world!", "Good morning!"],
  "from": "en",
  "to": "zh"
}

实际响应:

json
{
  "text": ["你好,世界!", "早上好!"],
  "from": "en",
  "to": "zh",
  "result": ["你好,世界!", "早上好!"]
}

一批文本使用同一组源语言和目标语言,返回数组与输入顺序对应。自动识别时使用第一条文本判断源语言,不要在同一批中混入不同源语言。当前服务没有独立的 /translate/batch 路由。批量语言处理

语言检测 ​

请求 POST /detect:

json
{
  "text": "Hello, world!"
}

实际响应:

json
{
  "language": "en"
}

该接口返回语言代码,不执行翻译。已知源语言时可以直接在翻译请求中指定它。

浏览器翻译插件兼容接口 ​

这些接口使用同一组翻译模型,分别适配不同客户端的请求和响应结构。

沉浸式翻译 ​

请求 POST /imme:

json
{
  "source_lang": "en",
  "target_lang": "zh",
  "text_list": ["Hello, world!", "Good morning!"]
}

实际响应:

json
{
  "translations": [
    {"detected_source_lang": "en", "text": "你好,世界!"},
    {"detected_source_lang": "en", "text": "早上好!"}
  ]
}

source_lang 可以省略或使用 auto。text_list 中的文本应使用相同源语言。

Kiss Translator ​

请求 POST /kiss:

json
{
  "text": "Hello, world!",
  "from": "en",
  "to": "zh"
}

实际响应:

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

该接口的 text 使用单个字符串。

划词翻译 ​

请求 POST /hcfy:

json
{
  "text": "Hello, world!",
  "source": "英语",
  "destination": ["中文(简体)"]
}

实际响应:

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

这里的 text 保留原文,译文位于 result。上游将中文名称映射为中、英、日三种语言代码,其他语言可直接使用代码。destination 数组用于选择一个目标语言,不能据此假设响应会包含多个目标语言的译文。

DeepLX ​

请求 POST /deeplx:

json
{
  "text": "Hello, world!",
  "source_lang": "EN",
  "target_lang": "ZH"
}

实测响应结构如下,其中 id 随请求变化:

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

健康检查与用量统计 ​

请求 GET /health,实际返回:

json
{
  "status": "ok"
}

该响应没有逐语言对的加载状态。需要确认某个方向可用时,应发送该方向的翻译请求。

请求 GET /metrics,返回以下计数器;数值随调用变化:

text
# TYPE aipod:prompt_tokens_total counter
aipod:prompt_tokens_total 48
# TYPE aipod:generation_tokens_total counter
aipod:generation_tokens_total 46
# TYPE aipod:requests_total counter
aipod:requests_total 10

这些是当前部署的累计计数器,不能据此推定其 token 统计口径与 OpenAI 模型相同。

模型语言范围 ​

模型仓库包含 93 个有方向的语言对,覆盖 51 种语言:43 种语言与英文双向互译,共 86 个方向;另有 7 个翻译到英文的单向模型。模型资源目录数量不代表当前服务已经验证了全部方向。

所有直接模型都以英文为源语言或目标语言。其他语言之间的翻译可以经英文中转,前提是两段模型都已加载。例如中文到法文使用 zh → en → fr;该方向已实测成功。中转推理实现

与英文双向互译的 43 种语言 ​

语言代码语言名称
ar阿拉伯语
az阿塞拜疆语
bg保加利亚语
bn孟加拉语
ca加泰罗尼亚语
cs捷克语
da丹麦语
de德语
el希腊语
es西班牙语
et爱沙尼亚语
fa波斯语
fi芬兰语
fr法语
gu古吉拉特语
he希伯来语
hi印地语
hr克罗地亚语
hu匈牙利语
id印尼语
is冰岛语
it意大利语
ja日语
kn卡纳达语
ko韩语
lt立陶宛语
lv拉脱维亚语
ml马拉雅拉姆语
ms马来语
nl荷兰语
pl波兰语
pt葡萄牙语
ro罗马尼亚语
ru俄语
sk斯洛伐克语
sl斯洛文尼亚语
sq阿尔巴尼亚语
sv瑞典语
ta泰米尔语
te泰卢固语
tr土耳其语
uk乌克兰语
zh中文

英文代码为 en。冰岛语包含英文到冰岛语和冰岛语到英文两个方向。

仅有翻译到英文模型的 7 种语言 ​

语言代码语言名称
be白俄罗斯语
bs波斯尼亚语
mt马耳他语
nb挪威语(博克马尔)
nn挪威语(尼诺斯克)
sr塞尔维亚语
vi越南语

这 7 种语言可以作为源语言,经英文中转翻译到其他有英文到目标语言模型的语言;当前模型集合不支持把它们作为其他语言翻译的目标。

中文简繁标记 ​

语言代码使用 ISO 639-1。当前服务将带区域或书写系统后缀的代码归一化为主语言代码,例如 zh-Hans 和 zh-Hant 都按 zh 处理。

实测以 zh-Hant 为目标语言仍返回简体中文,不能通过这个参数要求繁体输出。

鉴权与错误 ​

本次服务在未携带鉴权信息时即可调用成功。上游支持通过 API_KEY 配置鉴权,启用后可以使用 Authorization: Bearer YOUR_API_KEY 请求头或 ?token=YOUR_API_KEY 查询参数;/health 不需要鉴权。

不支持的翻译方向返回 400。实测英文到白俄罗斯语的响应为:

json
{
  "error": "Translation from 'en' to 'be' is not supported"
}

以下路径在当前部署返回 404:/、/docs、/docs/index.html、/openapi.json、/version、/languages、/models、/v1/models、/translate/batch、/v1/chat/completions。首页返回 404 不代表服务不可用,可以通过 /health 和翻译请求验证。

单独调用 ​

在能访问服务的计算机上,直接通过 HTTP 客户端使用 API。下面使用本次局域网地址;使用算力舱域名时,只需替换基础地址。

命令行 ​

bash
curl --fail-with-body --connect-timeout 5 --max-time 60 \
  'http://192.168.1.224:18126/translate' \
  -H 'Content-Type: application/json' \
  --data '{"text":"Hello, world!","from":"en","to":"zh"}'

Python ​

下面使用 Python 标准库发送请求,无需额外安装依赖:

python
import json
from urllib.request import Request, urlopen

base_url = "http://192.168.1.224:18126"
payload = {
    "text": ["Hello, world!", "Good morning!"],
    "from": "en",
    "to": "zh",
}
request = Request(
    f"{base_url}/translate",
    data=json.dumps(payload, ensure_ascii=False).encode("utf-8"),
    headers={"Content-Type": "application/json"},
    method="POST",
)
with urlopen(request, timeout=60) as response:
    result = json.load(response)
print(result["text"])