Argos Translate离线翻译API集成:Python/JS/Java三分钟跑通
【免费下载链接】argos-translateOpen-source offline translation library written in Python项目地址: https://gitcode.com/GitHub_Trending/ar/argos-translate
服务器不能出网,或者不想把用户内容发给云端翻译API,Argos Translate是一个解法:用Python写的开源离线翻译库,模型以本地argosmodel语言包形式存在,装好之后离线翻译API完全不依赖网络。它同时也是LibreTranslate服务背后的离线引擎。这里不罗列功能,直接按顺序走:先跑通最小示例,再看三种语言的接入姿势和语言包管理,最后是几个容易踩的坑。
一个30秒能跑通的最小示例 🚀
先用pip install argostranslate装库。下面这段代码干两件事:装一个英→西语言包,再翻译一句话。
import argostranslate.package import argostranslate.translate argostranslate.package.update_package_index() # 更新语言包索引 pkg = next(p for p in argostranslate.package.get_available_packages() if p.from_code == "en" and p.to_code == "es") argostranslate.package.install_from_path(pkg.download()) # 下载并安装 print(argostranslate.translate.translate("Hello World", "en", "es")) # ¡Hola Mundo!输出就是¡Hola Mundo!。首次运行要下载模型(几十MB),之后拔网线也能用。语言对换成任何已安装的组合,调用方式不变;语言代码是ISO 639格式,比如 en、zh、fr。
三种语言,三种姿势
Python:本地机器翻译的首选
如果你的主进程是Python,或者愿意起一个Python边车进程,直接用这个Python离线翻译库——模型全在本地,没有key、没有配额。translate(text, from_code, to_code)就是全部接口,入口在 translate.py 源码 末尾的同名函数。注意只有下载模型那一下要联网,翻译本身不发任何请求。想看候选译文和质量分,可以取翻译对象调hypotheses():
t = argostranslate.translate.get_translation_from_codes("en", "es") print(t.hypotheses("Hello World", num_hypotheses=3)) # 前3个候选+得分不写代码的话,库自带的argos-translate命令行在终端里也能直接翻。
Node.js:给Web服务调Node.js翻译接口
前端或Node后端不想嵌模型,常见做法是自己机器上跑一个LibreTranslate实例(基于Argos Translate的REST服务),客户端打本地接口:
const res = await fetch("http://127.0.0.1:5000/translate", { method: "POST", body: JSON.stringify({ q: "Hello!", source: "en", target: "es" }), headers: { "Content-Type": "application/json" } }); const data = await res.json(); console.log(data.translatedText); // 输出:¡Hola!URL指向127.0.0.1,整条链路留在本机;请求体就 q、source、target 三个字段,客户端一个普通fetch,不用装任何SDK。
Java:Java翻译SDK的一个HTTP调用
Java侧没有官方第一方绑定,社区做法是调LibreTranslate接口。核心就一句方法调用:
// 用社区Java客户端调LibreTranslate实例 LibreTranslateClient client = new LibreTranslateClient("http://127.0.0.1:5000"); System.out.println(client.translate("Hello!", "en", "es").getTranslatedText());原理和Node.js一样:模型在LibreTranslate进程里,Java进程只负责发请求收结果。纯内网环境跑后端的话,这条路其实最顺。
语言包怎么管:更新、安装、卸载 📦
一个.argosmodel是zip包,解开看就是三样东西:OpenNMT CTranslate2模型权重、tokenizer(sentencepiece或bpe)、句界检测数据。package.py 源码 里三个函数覆盖日常全部操作:
- 更新远端索引:
update_package_index() - 安装:
install_from_path(pkg.download()),上文已用过 - 卸载:
uninstall(pkg)
# 卸载 en→es 语言包 pkg = next(p for p in argostranslate.package.get_installed_packages() if p.from_code == "en" and p.to_code == "es") argostranslate.package.uninstall(pkg)GUI里有同样的表格,可以查看、安装、一键卸载:
默认装在~/.local/share/argos-translate下,想用别的位置就设ARGOS_PACKAGE_DIR环境变量。模型体积上留个心眼:每个语言对的量化模型通常是几十MB,加载后常驻进程内存,想在小型容器里塞十几个语言对,先把内存账算好。
容易踩的几个坑 ⚠️
没有直接模型对?交给语言中转
判断标准:别急着认定"这组语言对翻不了",先看有没有直接的包。规避写法:没有直连包时库会自动找中转路径——比如 zh→fr 会走 en 中转,由 translate.py 里的CompositeTranslation拼接,你的调用一行不用改。代价是误差累积两轮,建议只当非核心语言对的兜底。
批量翻译:整段传,别逐条调
判断标准:文本有多段就直接传整个字符串。规避写法:别自己切成句子再循环调接口——translate()内部先做句子切分,再用translate_batch整批喂给CTranslate2,N次串行HTTP请求比它慢得多,尤其是走LibreTranslate接口时。
模型加载后注意内存回收
判断标准:每个语言对的Translator实例只加载一次,且被进程内缓存(get_installed_languages上挂了lru_cache)。规避写法:服务里别反复装卸包或重复创建翻译对象;真要释放就重启进程,uninstall时缓存也会一并清掉。
收尾
下一步建议:先在自己机器上把英文↔中文这对跑通,量一下首次推理延迟和常驻内存,再决定同一台机器上能塞几个语言对。需要Web入口的话,旁边起一个LibreTranslate实例,各语言共用同一套REST接口即可。
【免费下载链接】argos-translateOpen-source offline translation library written in Python项目地址: https://gitcode.com/GitHub_Trending/ar/argos-translate
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考