尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

自建免费机器翻译API:用LibreTranslate从部署到上线的4个阶段

自建免费机器翻译API:用LibreTranslate从部署到上线的4个阶段 自建免费机器翻译API用LibreTranslate从部署到上线的4个阶段【免费下载链接】LibreTranslateFree and Open Source Machine Translation API. Self-hosted, offline capable and easy to setup.项目地址: https://gitcode.com/GitHub_Trending/li/LibreTranslateLibreTranslate 是一个开源自托管的机器翻译API它把 Argos Translate一个纯本地运行的翻译引擎封装成 REST 接口模型下载后全程离线你的文本不离开自己的服务器。本文按「能用 → 会用 → 用好 → 用久」四个阶段走一遍先跑起来再接入翻译接口然后配置限流与密钥管理最后完成安全加固和排障。跟着做一小时内你可以在内网拥有一个可用的翻译服务。1. 先用起来三种部署路径部署这件事只需要「跑起来 验证端口」两步剩下的都在后面章节处理。最快路径Docker 一条命令 如果你的机器上有 Docker这是唯一推荐起步的方式docker run -d -p 5000:5000 --name libretranslate libretranslate/libretranslate:latest容器启动后浏览器访问http://localhost:5000会看到一个可交互的翻译页面/health、/translate等接口同时就绪。注意首次启动需要联网下载语言模型磁盘会多出几个 GB这是正常的。用 Compose 管理持久化仓库自带一份 docker-compose.yml最小骨架如下services: libretranslate: image: libretranslate/libretranslate:latest ports: - 5000:5000 restart: unless-stopped建议把这份文件当成你的配置基线文件里的注释已经写好了两种高频定制——用LT_LOAD_ONLYen,fr只加载需要的语言以及把模型目录挂到 Docker 卷上避免每次重建容器都重新下载模型。生产环境基本只需要在这两行注释上做取舍。源码安装给要改代码的人git clone https://gitcode.com/GitHub_Trending/li/LibreTranslate cd LibreTranslate python -m venv venv source venv/bin/activate pip install -e . python scripts/install_models.py python main.py --host 0.0.0.0 --port 5000scripts/install_models.py 负责把语言模型拉进本地缓存~/.local下之后启动就不再依赖外网。这条路适合你需要魔改接口、接入内部构建流程的情况只是使用服务的话Docker 足够。验证服务活着部署完先敲两条命令别急着写业务代码curl http://localhost:5000/health curl http://localhost:5000/languages第一条返回{status: ok}第二条列出当前已加载的语言及其可翻译目标。/languages是你后面选source/target参数的权威依据——语言码必须在这里出现过否则接口会直接报 400。2. 接着会用翻译接口只有三组参数文本翻译一次调用整个 API 的核心就是POST /translate必填参数只有三个q要翻译的文本、source源语言码auto表示自动检测、target目标语言码import requests r requests.post( http://localhost:5000/translate, data{q: Hello, world!, source: en, target: zh}, ) print(r.json()[translatedText])响应体里的translatedText就是结果如果source传了auto还会附带detectedLanguage字段告诉你系统判定原文是什么语言。另外两个可选参数值得知道formathtml可以让模型保留 HTML 标签结构做网页翻译时用得上alternatives2会额外返回几种候译。批量翻译把 q 换成数组q传列表时接口按同一次请求逐条翻译省掉 N 次 HTTP 往返r requests.post( http://localhost:5000/translate, json{q: [Hello, World], source: en, target: fr}, ) print(r.json()[translatedText]) # [Bonjour, Monde]注意批量模式下列表长度受--batch-limit约束默认不限制但你一旦设了限制超量会直接 400。这是新手最容易踩的一个点后面排障章节还会提到。语言检测单独一个端点不想翻译、只想判断文本语言时用/detectcurl -s http://localhost:5000/detect -d qBonjour le monde返回{confidence: ..., language: fr}这样的数组。做内容审核、自动分拣场景时它比翻译便宜得多。3. 再往好用限流、密钥与加载速度内网随便跑没问题但只要可能对外开放这一节就是必答题。限流是第一道开关所有参数都同时支持 CLI 参数和LT_前缀环境变量两种写法下面这张表覆盖最常用的四个完整清单见启动参数帮助python main.py --help可查参数 / 环境变量默认值建议--req-limit/LT_REQ_LIMIT-1不限对外设 60 起--char-limit/LT_CHAR_LIMIT-1不限按业务设上限防止长文本拖垮延迟--batch-limit/LT_BATCH_LIMIT-1不限配合 req-limit 防大批量轰炸--threads/LT_THREADS4设为 CPU 核数在 Docker 里就是加-e的事docker run -d -p 5000:5000 -e LT_REQ_LIMIT60 -e LT_CHAR_LIMIT5000 \ libretranslate/libretranslate:latest限流的机制是滑动窗口按客户端 IP开启密钥后按 API key计数连续超额的 IP 会被--req-flood-threshold自动封禁不用你盯日志。密钥管理多租户就靠它需要区分「哪些人能用、各给多少额度」时打开--api-keys开关然后用随仓库附带的管理脚本发 keypython main.py --api-keys python manage.py keys add 120 --char-limit 8000第一条命令启动带密钥库的服务manage.py位于仓库根目录第二条为某个用户新增一把每分钟 120 次、单条 8000 字符的密钥打印出来的就是分发给对方的字符串。之后每个请求带上api_key参数即可额度按 key 而不是按 IP 计算。密钥库本身是本地 SQLite 文件默认db/api_keys.db备份它等于备份了你的租户体系。加载速度只装你用的语言模型全量下载是大头动辄数 GB而你的业务可能只用到三对语言。用--load-only收窄范围python main.py --load-only en,zh,fr --update-models--update-models让服务在启动时检查并增量更新模型。少装一个语言启动时间和内存占用就少一截——这是性价比最高的一档优化没有之一。4. 长期用久安全收尾与可观测 公开暴露前的清单服务要从内网走向公网按顺序做四件事套 HTTPS用--ssl直接上证书或者更推荐 Nginx 反代终结 TLS开启--api-keys并配合--require-api-key-secret把匿名调用挡在门外纯 API 用途时加--disable-web-ui关掉前端页面减少攻击面被滥用时加--under-attack此时没有合法 key 的请求一律拒绝等于一键应急模式。这四步都是启动参数级别的改动不需要动一行代码重启即生效。用 /metrics 做观测加--metrics启动后GET /metrics暴露 Prometheus 格式指标核心看两个libretranslate_http_request_duration_seconds请求耗时分布翻译变慢第一时间能发现和进程内存。给 metrics 端点也加一层 Bearer token--metrics-auth-token别让它裸奔在公网。有了这两项你的监控面板就不缺翻译服务这块拼图了。5. 排障四个最常卡住的点症状大概率原因处理400xx is not supported语言码不在/languages返回里对照端点输出改用正确语言码400 提示 exceeds text limit文本超--char-limit或批量超--batch-limit调大限制或把长文切片首次启动极慢 / 卡在下载正在拉语言模型等它下完或换--load-only缩小范围端口被占用、起不来5000 被别的进程占了换--port/-p 5001:5000两个容易被忽略的细节文件翻译端点POST /translate_file返回的是文件流而不是 JSON接收端要用requests的content落盘不要调.json()。服务的响应头默认放开 CORSAccess-Control-Allow-Origin: *方便前端直连但也意味着任意网站都能调你的接口——公网部署时记得用反代把 CORS 收紧或者配合密钥校验使用。收尾接下来 30 分钟可以做什么给三条按顺序执行的建议先用 Docker 把服务跑起来并确认/health返回 ok再挑一段你真实的业务文本用三参数接口调通一次中翻英然后打开LT_REQ_LIMIT把限流先于功能上线。这三步做完你就有了一个可以安全交给业务的翻译端点。想继续深入两处仓库内资源值得翻libretranslate/main.py 里列出了全部启动参数与默认值是排查配置行为的第一手资料libretranslate/tests/下的 API 测试用例则演示了每个接口的标准请求形态照抄即可。【免费下载链接】LibreTranslateFree and Open Source Machine Translation API. Self-hosted, offline capable and easy to setup.项目地址: https://gitcode.com/GitHub_Trending/li/LibreTranslate创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表