Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

56 lignes
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