赞
踩
下面介绍一下如何构建一个使用python编写的翻译服务器软件
开源地址: gpt-translator: 构建pdftranslator server
访问方式 http://servername or serverip:8888/translate
其中Authorization 的值为.env 中的配置,可以配置多个
如果directly 为true会直接提交content作为promp,而不会添加翻译前置。(用于自定义翻译前置)
事实上这个from是不需要的,因为gpt会自己判断源语言是什么。
因为这个项目需要用到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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。