构建一个简单的基于gpt的翻译服务器软件

下面介绍一下如何构建一个使用python编写的翻译服务器软件

开源地址: gpt-translator: 构建pdftranslator server

访问方式 http://servername or serverip:8888/translate

 其中Authorization 的值为.env 中的配置,可以配置多个

 

 如果directly 为true会直接提交content作为promp,而不会添加翻译前置。(用于自定义翻译前置)

事实上这个from是不需要的,因为gpt会自己判断源语言是什么。

为什么使用python

因为这个项目需要用到openai,相对于其他语言来说,使用python可以利用官方的包,并且可以很简单地调用。

需要用到的软件包

import openai
import tornado
from tornado_server import make_app

也就是openai 和 tornado.

架构策略

main.py

import openai
import tornado
from tornado_server import make_app
from auth import all_keys
if __name__ == "__main__":
    file_path = "./.env"  # 替换为你的env文件路径
    key = all_keys
    # 打开文件
    with open(file_path, "r") as file:
        # 读取文件内容并去除每行末尾的换行符
        lines = [line.strip() for line in file.readlines()]
        for line in lines:
            key.append(line.strip())
    openai.api_key = "sk-transla4teds3gsd3fsdfsdf34232ppngi4"
    openai.api_base = "https://api.atpgroup.work/v1"
    app = make_app()
    port = 8888
    app.listen(port)
    print(f"server is serve at http://localhost:{port}")
    tornado.ioloop.IOLoop.current().start()

上面是main文件,我们根据main文件,进行介绍。这是一个简单的翻译服务器软件。

但是也包含了验证策略,不过是 基于配置文件读取内存型验证。

首先读取.env 文件的内容,.env文件的每一行是一个访问该软件接口的密钥。

其中all_keys是一个全局变量。

载入key之后,首先设置api_key 和api_base.

注意要添加v1或者自定义path。

然后构建软件,启动软件。

服务接口

tornado_server.py
import json

import openai
import tornado.ioloop
import tornado.web

from Translate import translate_object_hook
from auth import all_keys


class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, Tornado!")

    def post(self):
        self.write("Hello, Tornado!")


class TranslateHandler(tornado.web.RequestHandler):
    def post(self):
        authorization_header = self.request.headers.get("Authorization")
        if authorization_header not in all_keys:
            self.send_error(401)
        # 获取请求体内容
        json_str = self.request.body.decode('utf-8')
        # 将JSON字符串转换为Translate对象
        translate = json.loads(json_str, object_hook=translate_object_hook)
        try:
            response = openai.ChatCompletion.create(
                model="gpt-3.5-turbo",
                messages=[
                    {"role": "user", "content": translate.getRequestPrompt()}
                ],
                stream=True
            )
            # 按流读取数据
            for message in response:
                # 处理响应消息
                # 这里可以根据需要进行自定义逻辑
                if "content" in message["choices"][0]["delta"]:
                    self.write(message["choices"][0]["delta"]["content"])

        except:
            self.send_error()


def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
        (r"/translate", TranslateHandler),
    ])

 主要的处理在

TranslateHandler这个处理器。

处理内容是:

先读取请求头中的密钥,如果和配置文件/载入到all_keys中的密钥不符,直接返回错误。

然后结构请求体,并构建流式请求,最后流式地返回信息。

模型

Translate.py


class Translate:
    def __init__(self, directly: bool, from_lang: str, to_lang: str, content: str):
        self.directly = directly
        self.from_lang = from_lang
        self.to_lang = to_lang
        self.content = content

    def getRequestPrompt(self):
        if self.directly:
            return f"{self.content}"
        else:
            return f"translate the following text into {self.to_lang}\n{self.content}"


def translate_object_hook(d):
    return Translate(bool(d['directly']), d['from'], d['to'], d['content'])

 剩余的文件

该服务器软件仅包含四个文件

除了上述三个文件

还有下面的文件

auth.py

all_keys = []

其他

可能出现的错误

端口被占用,你需要使用一个没有被占用的端口

你需要替换自己的api源和密钥

如果想要加密通信,你需要自己配置https

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枫叶kx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值