gpt服务
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

131 line
4.9 KiB

  1. #! /usr/bin/python
  2. import tornado.web
  3. import tornado.ioloop
  4. import tornado.httpserver
  5. import tornado.options
  6. import os
  7. import datetime
  8. import openai
  9. import asyncio
  10. from tornado.web import RequestHandler
  11. from tornado.options import define,options
  12. from tornado.websocket import WebSocketHandler
  13. import openai_async
  14. import config
  15. import json
  16. openai.api_key = config.agentServer['agentApiKey'];
  17. def clearContent(content):
  18. for ck in config.agentFilterMoel['filterKeys']:
  19. content = content.replace(ck,'SmartChat')
  20. return content
  21. async def talkGPTWithStream(self,message):
  22. print("{} says {}".format(self.request.remote_ip,message))
  23. try:
  24. _msg = json.loads(message)
  25. try:
  26. if 'model' in _msg :
  27. _gptModel = _msg['model']
  28. _real_msg = _msg['messages']
  29. #print("msg is {}".format(type(_real_msg)))
  30. if _gptModel == '4':
  31. _gptModel = 'gpt-4-0314'
  32. elif _gptModel == '3':
  33. _gptModel = 'gpt-3.5-turbo'
  34. else:
  35. print(_gptModel)
  36. #_gptModel = 'gpt-3.5-turbo'
  37. else:
  38. _gptModel = 'gpt-3.5-turbo'
  39. _real_msg = _msg
  40. except Exception as gmex:
  41. _gptModel = 'gpt-3.5-turbo'
  42. _real_msg = _msg
  43. #print(_msg)
  44. async for chunk in await openai.ChatCompletion.acreate(
  45. model=_gptModel,
  46. #model='gpt-4-0314',
  47. #messages=[{'role': 'user', 'content': message}],
  48. messages=_real_msg,
  49. temperature=0.8,
  50. max_tokens=4000,
  51. stream=True # this time, we set stream=True
  52. ):
  53. content = chunk["choices"][0].get("delta", {}).get("content")
  54. role_conent = chunk["choices"][0].get("delta", {}).get("role")
  55. #print("response {}",content)
  56. if config.agentFilterMoel['isOpen']:
  57. if content is not None:
  58. ###如果是结尾
  59. if content in config.agentFilterMoel['oneMessageSplit']:
  60. self.my_replay_content = self.my_replay_content+content
  61. self.currentIsSend=True
  62. else:
  63. self.my_replay_content = self.my_replay_content + content
  64. self.currentIsSend=False
  65. if self.currentIsSend:
  66. ####过滤关键字
  67. cContent = clearContent(self.my_replay_content)
  68. self.my_replay_content='';
  69. await self.write_message(cContent)
  70. #await self.write_message(currentLineContents)
  71. else:
  72. if role_conent is not None:
  73. print('')
  74. else:
  75. await self.write_message("___talk_end___")
  76. else:
  77. if content is not None:
  78. await self.write_message(content)
  79. else:
  80. if role_conent is not None:
  81. print('')
  82. else:
  83. await self.write_message("___talk_end___")
  84. except Exception as es:
  85. print('onMessage error',es)
  86. self.close()
  87. async def talkGPT(self,message):
  88. print("{} says {}".format(self.request.remote_ip,message))
  89. try:
  90. _msg = json.loads(message)
  91. try:
  92. if 'model' in _msg :
  93. _gptModel = _msg['model']
  94. _real_msg = _msg['messages']
  95. #print("msg is {}".format(type(_real_msg)))
  96. if _gptModel == '4':
  97. _gptModel = 'gpt-4-0314'
  98. elif _gptModel == '3':
  99. _gptModel = 'gpt-3.5-turbo-0125'
  100. else:
  101. _gptModel = 'gpt-3.5-turbo-0125'
  102. else:
  103. _gptModel = 'gpt-3.5-turbo-0125'
  104. _real_msg = _msg
  105. except Exception as gmex:
  106. _gptModel = 'gpt-3.5-turbo-0125'
  107. _real_msg = _msg
  108. response = await openai.Completion.acreate(
  109. model= _gptModel,
  110. prompt= _real_msg,
  111. temperature=0,
  112. max_tokens=4000,
  113. top_p=1,
  114. frequency_penalty=0.5,
  115. presence_penalty=0
  116. )
  117. #print(f"response:{response}")
  118. response_text = response['choices'][0]['text']
  119. await self.write_message(response_text+"___talk_end___")
  120. except Exception as es:
  121. print('onMessage error',es)
  122. self.close()