当前位置:   article > 正文

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

gpt-translator

下面介绍一下如何构建一个使用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

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

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

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

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

其中all_keys是一个全局变量。

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

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

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

服务接口

tornado_server.py
  1. import json
  2. import openai
  3. import tornado.ioloop
  4. import tornado.web
  5. from Translate import translate_object_hook
  6. from auth import all_keys
  7. class MainHandler(tornado.web.RequestHandler):
  8. def get(self):
  9. self.write("Hello, Tornado!")
  10. def post(self):
  11. self.write("Hello, Tornado!")
  12. class TranslateHandler(tornado.web.RequestHandler):
  13. def post(self):
  14. authorization_header = self.request.headers.get("Authorization")
  15. if authorization_header not in all_keys:
  16. self.send_error(401)
  17. # 获取请求体内容
  18. json_str = self.request.body.decode('utf-8')
  19. # 将JSON字符串转换为Translate对象
  20. translate = json.loads(json_str, object_hook=translate_object_hook)
  21. try:
  22. response = openai.ChatCompletion.create(
  23. model="gpt-3.5-turbo",
  24. messages=[
  25. {"role": "user", "content": translate.getRequestPrompt()}
  26. ],
  27. stream=True
  28. )
  29. # 按流读取数据
  30. for message in response:
  31. # 处理响应消息
  32. # 这里可以根据需要进行自定义逻辑
  33. if "content" in message["choices"][0]["delta"]:
  34. self.write(message["choices"][0]["delta"]["content"])
  35. except:
  36. self.send_error()
  37. def make_app():
  38. return tornado.web.Application([
  39. (r"/", MainHandler),
  40. (r"/translate", TranslateHandler),
  41. ])

 主要的处理在

TranslateHandler这个处理器。

处理内容是:

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

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

模型

Translate.py

  1. class Translate:
  2. def __init__(self, directly: bool, from_lang: str, to_lang: str, content: str):
  3. self.directly = directly
  4. self.from_lang = from_lang
  5. self.to_lang = to_lang
  6. self.content = content
  7. def getRequestPrompt(self):
  8. if self.directly:
  9. return f"{self.content}"
  10. else:
  11. return f"translate the following text into {self.to_lang}\n{self.content}"
  12. def translate_object_hook(d):
  13. return Translate(bool(d['directly']), d['from'], d['to'], d['content'])

 剩余的文件

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

除了上述三个文件

还有下面的文件

auth.py

all_keys = []

其他

可能出现的错误

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/347787
推荐阅读
相关标签
  

闽ICP备14008679号