基于腾讯云 Lighthouse 自建文本和文件翻译服务

2023-09-15 16:40:00 +08:00
 panisertoller

LibreTranslate 是一个免费且开源的机器翻译 API ,完全自托管,易于设置。与其他 API 不同,它不依赖于像GoogleAzure这样的专有提供商来执行翻译。相反,它的翻译引擎由开源Argos Translate库提供支持。

本文将引导读者通过在腾讯云Lighthouse服务器部署LibreTranslate,实现自主可控的翻译服务,且同时支持翻译文本和文件(.txt, .odt, .odp, .docx, .pptx, .epub, .html )。

购买并配置 Lighthouse 服务器

创建 kubernetes 部署配置文件

文件路径 /srv/translate.yml,请注意修改配置文件中的域名 fanyi.rehiy.com

kind: Deployment
apiVersion: apps/v1
metadata:
  name: &name translate
  labels:
    app: *name
spec:
  selector:
    matchLabels:
      app: *name
  template:
    metadata:
      labels:
        app: *name
    spec:
      containers:
        - name: translate
          image: libretranslate/libretranslate
          env:
            - name: LT_REQ_LIMIT
              value: "30"
            - name: LT_THREADS
              value: "4"
          ports:
            - containerPort: 5000
          volumeMounts:
            - name: *name
              subPath: home
              mountPath: /home/libretranslate
      volumes:
        - name: *name
          hostPath:
            path: /srv/translate
            type: DirectoryOrCreate
---
kind: Service
apiVersion: v1
metadata:
  name: &name translate
  labels:
    app: *name
spec:
  selector:
    app: *name
  ports:
    - name: http
      port: 5000
      targetPort: 5000
---
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
  name: &name translate
  annotations:
    traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
  rules:
    - host: fanyi.rehiy.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: *name
                port:
                  name: http

为防止被恶意利用,配置中将LT_REQ_LIMIT设定为 30 ,读者可以根据自己的情况调整。也可以启用 TOKEN 建立需要授权的服务,参阅官方文档 Manage API Keys

部署 LibreTranslate 服务

通过 ssh 登录服务器,执行以下命令,部署 LibreTranslate 服务。初次部署需下载大量模型,请耐心等待配置完成。

kubectl apply -f /srv/translate.yml

测试 LibreTranslate 能力

作者部署的服务器已关闭外部访问能力,请务必使用自己部署的域名进行测试。

const res = await fetch("http://fanyi.rehiy.com/translate", {
  method: "POST",
  body: JSON.stringify({
    q: "Hello!",
    source: "en",
    target: "zh"
  }),
  headers: {"Content-Type": "application/json"}
});

console.log(await res.json());

如何在国内服务器部署

解决的办法有很多(比如去官网手动下载每个模型),这里提供一种简单且合规的方法:

在境外部署完成后,将/srv/translate目录同步到国内服务器上。这样在国内部署时就不再需要下载翻译模型,从而避开网络慢导致的问题。

1376 次点击
所在节点    云计算
3 条回复
yumusb
2023-09-15 19:16:11 +08:00
panisertoller
2023-09-16 10:10:22 +08:00
这个模型似乎对长文翻译更友好些,而且有些单词的确很奇葩,如果要投产,恐怕得自己训练一个模型。
panisertoller
2023-09-19 17:08:35 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/974171

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX