ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

自托管机器翻译服务落地:3 条命令跑通自己的翻译 API

自托管机器翻译服务落地:3 条命令跑通自己的翻译 API 自托管机器翻译服务落地3 条命令跑通自己的翻译 API【免费下载链接】LibreTranslateFree and Open Source Machine Translation API. Self-hosted, offline capable and easy to setup.项目地址: https://gitcode.com/GitHub_Trending/li/LibreTranslate产品的多语言开关马上要上商业翻译 API 按字符计费算不下账把用户内容发给第三方接口又不放心。LibreTranslate 是一个开源免费的自托管机器翻译 API基于 Argos Translate 引擎部署完离线可用数据不出自己的服务器。定位速写它替代谁不替代谁维度LibreTranslate商业翻译 API开源引擎直接调用Argos Python 库数据流向留在自己服务内上传到对方云端留在自己服务内费用免费AGPLv3 许可按字符/调用计费免费交付形态REST API 自带 Web 界面仅 API只有库接口自己封语言覆盖含中英在内的一批语言对/languages可查上百种取决于你下载什么模型运维成本拉镜像即跑零维护模型版本自己管一句话要自托管、可控、免费、带界面的翻译服务它是少数开箱即用的选择要的是百种语言覆盖或商业级 SLA 并发它不在那个档位。从 0 到第一句译文3 条命令 拉官方镜像起容器模型首次启动时自动下载docker run -d --name libretranslate --restart unless-stopped -p 5000:5000 libretranslate/libretranslate:latest等容器日志跑完打健康端点确认服务就绪curl -s http://127.0.0.1:5000/health返回{status:ok}后发出第一次翻译请求curl -s -X POST http://127.0.0.1:5000/translate -d qHello world -d sourceen -d targetzh拿到{translatedText: 你好世界}。想走源码pip install -e .、按语言代码跑scripts/install_models.py、python main.py --host 0.0.0.0 --port 5000三步即可注册成 systemd 服务开机自启同理加健康检查可参照仓库里的 docker-compose.yml。按用途拆你拿它干什么 给站点接语言切换三行搞定源语言不确定时写auto服务端自动检测curl -s -X POST http://127.0.0.1:5000/translate -d qHallo Welt -d sourceauto -d targetzh坑点source不能留空必须显式写auto某语言对报no translation available说明是模型没装不是请求姿势的问题。批量翻译传数组回数组q支持多文本一次请求翻一整批import requests r requests.post(http://127.0.0.1:5000/translate, json{q: [Hello, Good night], source: en, target: fr, format: text}) print(r.json()[translatedText]) # 列表与输入逐一对应坑点返回列表顺序与输入一一对应批量大小可用--batch-limit封顶但别指望靠拆小段绕开单条文本的长度检查。输入是什么语言不知道先 detect/detect直接返回语言代码和置信度curl -s -X POST http://127.0.0.1:5000/detect -d qBonjour le monde坑点confidence是百分数不是 0~1 小数一两个词的超短文本置信度会很低做路由判断要自己设阈值。整份文档翻掉/translate_file接收文件、直接返回翻译后的文件本体支持 txt、csv、html、json、md、srt、yaml、po 等文本格式import requests with open(release_notes.txt, rb) as f: r requests.post(http://127.0.0.1:5000/translate_file, files{file: f}, data{source: en, target: zh}) open(release_notes_zh.txt, wb).write(r.content)坑点响应就是文件字节流不是下载链接PDF、Word 这类二进制文档不在支持范围整条功能可用--disable-files-translation关掉。上生产前值得改的 6 个配置 ⚙️配置项默认值生产建议一句话理由--req-limitLT_REQ_LIMIT-1 不限100~500/分钟防止单客户端用大文本打满 CPU--char-limitLT_CHAR_LIMIT-1 不限5000限制单次请求长度防内存尖峰--api-keys关闭开启ltmanage keys add发 key区分客户端才能按 key 限流、独立缓存--load-only全部语言对只留需要的如en,zh,fr每个语言对模型占几百 MB 内存--metrics--metrics-auth-token关闭开启并配 Bearer token/metrics交给 Prometheus 抓取--threads4等于 CPU 核数翻译是 CPU 密集型吞吐直接挂钩取舍在资源每多加载一个语言对内存和首载时间实打实涨一块低配机器先用load-only砍语言别靠多开实例硬扛。两个具体落法在 CI 里自动翻 README为什么选它CI 环境不用申请 key、不耗配额翻译服务常驻时产物可重复。假设服务已在 127.0.0.1:5000 监听python3 - EOF import requests from pathlib import Path r requests.post(http://127.0.0.1:5000/translate, data{q: Path(README.md).read_text(), source: en, target: zh, format: html}) Path(README.zh.md).write_text(r.json()[translatedText]) EOF最容易翻车的一点markdown 要传formathtml保结构用text会把标题、列表符号翻碎。给个人博客加中英切换为什么选它服务默认响应Access-Control-Allow-Origin: *前端直接 fetch不用后端代理。async function setLang(lang) { const els [...document.querySelectorAll([data-i18n])]; const r await fetch(http://127.0.0.1:5000/translate, { method: POST, headers: {Content-Type: application/json}, body: JSON.stringify({q: els.map(e e.dataset.src), source: en, target: lang, format: html}) }); const {translatedText} await r.json(); els.forEach((el, i) el.innerHTML translatedText[i]); }最容易翻车的一点博客跑 HTTPS 而翻译服务是 HTTP 时浏览器会拦掉混合内容生产环境把服务挂到同域反代后面服务端--translation-cache只对 API key 生效无 key 场景靠前端缓存响应。最容易翻车的 5 个点 ⚠️现象根因处理首次启动很慢、健康检查超时模型下载与加载在首次启动进行等容器日志跑完模型目录/home/libretranslate/.local挂 volume 持久化429 / 403 Banned触发限频或累计违规超过--req-flood-threshold调高限额反代后加--trust-forwarded-for取真实客户端 IP否则所有访客共享一个 IP 的配额no translation available for ...该语言对模型未安装--load-only补上对应语言或跑scripts/install_models.py安装内存持续上涨全量语言对加载 大请求--load-only砍语言--char-limit限长文件翻译报 400格式不在支持列表仅 txt/csv/html/json/md/srt 等文本格式可用自带 Web 界面在根路径接口文档在/spec排查参数时随手可查。适合中小流量和数据敏感场景要百种语言或商业级并发请选商业服务。下一步拉起镜像curl http://127.0.0.1:5000/languages确认语言对。【免费下载链接】LibreTranslateFree and Open Source Machine Translation API. Self-hosted, offline capable and easy to setup.项目地址: https://gitcode.com/GitHub_Trending/li/LibreTranslate创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表