快速翻译(神经网络翻译)
本文对应模型资源 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 | /kiss | Kiss Translator 兼容接口 | text、from、to;返回译文和语言代码 |
| POST | /hcfy | 划词翻译兼容接口 | text、source、destination;译文在 result 数组中 |
| POST | /deeplx | DeepLX 兼容接口 | text、source_lang、target_lang;译文在 data 中 |
| GET | /health | 健康检查 | 返回服务状态 |
| GET | /metrics | AI Pod 用量统计 | 返回 Prometheus 文本格式计数器 |
上游路由定义和接口字段定义可用于对照请求格式。/metrics 为当前 AI Pod 部署提供的额外接口。
单条与批量翻译
单条翻译
请求 POST /translate:
{
"text": "你好,世界。",
"from": "zh",
"to": "en"
}实际响应:
{
"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 改为数组:
{
"text": ["Hello, world!", "Good morning!"],
"from": "en",
"to": "zh"
}实际响应:
{
"text": ["你好,世界!", "早上好!"],
"from": "en",
"to": "zh",
"result": ["你好,世界!", "早上好!"]
}一批文本使用同一组源语言和目标语言,返回数组与输入顺序对应。自动识别时使用第一条文本判断源语言,不要在同一批中混入不同源语言。当前服务没有独立的 /translate/batch 路由。批量语言处理
语言检测
请求 POST /detect:
{
"text": "Hello, world!"
}实际响应:
{
"language": "en"
}该接口返回语言代码,不执行翻译。已知源语言时可以直接在翻译请求中指定它。
浏览器翻译插件兼容接口
这些接口使用同一组翻译模型,分别适配不同客户端的请求和响应结构。
沉浸式翻译
请求 POST /imme:
{
"source_lang": "en",
"target_lang": "zh",
"text_list": ["Hello, world!", "Good morning!"]
}实际响应:
{
"translations": [
{"detected_source_lang": "en", "text": "你好,世界!"},
{"detected_source_lang": "en", "text": "早上好!"}
]
}source_lang 可以省略或使用 auto。text_list 中的文本应使用相同源语言。
Kiss Translator
请求 POST /kiss:
{
"text": "Hello, world!",
"from": "en",
"to": "zh"
}实际响应:
{
"text": "你好,世界!",
"from": "en",
"to": "zh"
}该接口的 text 使用单个字符串。
划词翻译
请求 POST /hcfy:
{
"text": "Hello, world!",
"source": "英语",
"destination": ["中文(简体)"]
}实际响应:
{
"text": "Hello, world!",
"from": "英语",
"to": "中文(简体)",
"result": ["你好,世界!"]
}这里的 text 保留原文,译文位于 result。上游将中文名称映射为中、英、日三种语言代码,其他语言可直接使用代码。destination 数组用于选择一个目标语言,不能据此假设响应会包含多个目标语言的译文。
DeepLX
请求 POST /deeplx:
{
"text": "Hello, world!",
"source_lang": "EN",
"target_lang": "ZH"
}实测响应结构如下,其中 id 随请求变化:
{
"code": 200,
"id": 1791789009008,
"data": "你好,世界!",
"alternatives": [],
"source_lang": "EN",
"target_lang": "ZH",
"method": "Free"
}健康检查与用量统计
请求 GET /health,实际返回:
{
"status": "ok"
}该响应没有逐语言对的加载状态。需要确认某个方向可用时,应发送该方向的翻译请求。
请求 GET /metrics,返回以下计数器;数值随调用变化:
# 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。实测英文到白俄罗斯语的响应为:
{
"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。下面使用本次局域网地址;使用算力舱域名时,只需替换基础地址。
命令行
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 标准库发送请求,无需额外安装依赖:
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"])