Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

56 lines
2.0KB

  1. import time
  2. from bot.bot import Bot
  3. from revChatGPT.revChatGPT import Chatbot
  4. from common.log import logger
  5. from config import conf
  6. user_session = dict()
  7. last_session_refresh = time.time()
  8. # ChatGPT web接口 (暂时不可用)
  9. class ChatGPTBot(Bot):
  10. def __init__(self):
  11. config = {
  12. "Authorization": "<Your Bearer Token Here>", # This is optional
  13. "session_token": conf().get("session_token")
  14. }
  15. self.chatbot = Chatbot(config)
  16. def reply(self, query, context=None):
  17. from_user_id = context['from_user_id']
  18. logger.info("[GPT]query={}, user_id={}, session={}".format(query, from_user_id, user_session))
  19. now = time.time()
  20. global last_session_refresh
  21. if now - last_session_refresh > 60 * 8:
  22. logger.info('[GPT]session refresh, now={}, last={}'.format(now, last_session_refresh))
  23. self.chatbot.refresh_session()
  24. last_session_refresh = now
  25. if from_user_id in user_session:
  26. if time.time() - user_session[from_user_id]['last_reply_time'] < 60 * 5:
  27. self.chatbot.conversation_id = user_session[from_user_id]['conversation_id']
  28. self.chatbot.parent_id = user_session[from_user_id]['parent_id']
  29. else:
  30. self.chatbot.reset_chat()
  31. else:
  32. self.chatbot.reset_chat()
  33. logger.info("[GPT]convId={}, parentId={}".format(self.chatbot.conversation_id, self.chatbot.parent_id))
  34. try:
  35. res = self.chatbot.get_chat_response(query, output="text")
  36. logger.info("[GPT]userId={}, res={}".format(from_user_id, res))
  37. user_cache = dict()
  38. user_cache['last_reply_time'] = time.time()
  39. user_cache['conversation_id'] = res['conversation_id']
  40. user_cache['parent_id'] = res['parent_id']
  41. user_session[from_user_id] = user_cache
  42. return res['message']
  43. except Exception as e:
  44. logger.exception(e)
  45. return None