Przeglądaj źródła

fix: prompt build bug

zhayujie 3 lat temu
rodzic
commit
2fa3f77ab8
3 zmienionych plików z 10 dodań i 5 usunięć
  1. 1 1
      README.md
  2. 8 3
      bot/openai/open_ai_bot.py
  3. 1 1
      config-template.json

+ 1 - 1
README.md

@@ -110,7 +110,7 @@ cp config-template.json config.json
 + 对于图像生成,在满足个人或群组触发条件外,还需要额外的关键词前缀来触发,对应配置 `image_create_prefix `
 + 关于OpenAI对话及图片接口的参数配置(内容自由度、回复字数限制、图片大小等),可以参考 [对话接口](https://beta.openai.com/docs/api-reference/completions) 和 [图像接口](https://beta.openai.com/docs/api-reference/completions)  文档直接在 [代码](https://github.com/zhayujie/chatgpt-on-wechat/blob/master/bot/openai/open_ai_bot.py) `bot/openai/open_ai_bot.py` 中进行调整。
 + `conversation_max_tokens`:表示能够记忆的上下文最大字数(一问一答为一组对话,如果累积的对话字数超出限制,就会优先移除最早的一组对话)
-+ `character_desc` 配置中保存着你对机器人说的一段话,他会记住这段话并作为他的人格设定,你可以为他塑造任何形象
++ `character_desc` 配置中保存着你对机器人说的一段话,他会记住这段话并作为他的人格设定 (需要注意的是,有了人设后知识面也会相对变弱,)
 
 
 ## 运行

+ 8 - 3
bot/openai/open_ai_bot.py

@@ -4,6 +4,7 @@ from bot.bot import Bot
 from config import conf
 from common.log import logger
 import openai
+from datetime import date
 
 user_session = dict()
 
@@ -25,14 +26,15 @@ class OpenAIBot(Bot):
             new_query = Session.build_session_query(query, from_user_id)
             logger.debug("[OPEN_AI] session query={}".format(new_query))
 
-            reply_content = self.reply_text(new_query, query)
+            reply_content = self.reply_text(new_query, from_user_id)
+            logger.debug("[OPEN_AI] new_query={}, user={}".format(new_query, from_user_id))
             Session.save_session(query, reply_content, from_user_id)
             return reply_content
 
         elif context.get('type', None) == 'IMAGE_CREATE':
             return self.create_img(query)
 
-    def reply_text(self, query, origin_query):
+    def reply_text(self, query, user_id):
         try:
             response = openai.Completion.create(
                 model="text-davinci-003",  # 对话模型的名称
@@ -47,6 +49,7 @@ class OpenAIBot(Bot):
             res_content = response.choices[0]["text"].strip().rstrip("<|im_end|>")
         except Exception as e:
             logger.exception(e)
+            Session.clear_session(user_id)
             return None
         logger.info("[OPEN_AI] reply={}".format(res_content))
         return res_content
@@ -124,7 +127,7 @@ class Session(object):
         if session:
             for conversation in session:
                 prompt += "Q: " + conversation["question"] + "\n\n\nA: " + conversation["answer"] + "<|im_end|>\n"
-                prompt += "Q: " + query + "\nA: "
+            prompt += "Q: " + query + "\nA: "
             return prompt
         else:
             return prompt + "Q: " + query + "\nA: "
@@ -139,6 +142,8 @@ class Session(object):
         conversation["question"] = query
         conversation["answer"] = answer
         session = user_session.get(user_id)
+        logger.debug(conversation)
+        logger.debug(session)
         if session:
             # append conversation
             session.append(conversation)

+ 1 - 1
config-template.json

@@ -6,5 +6,5 @@
   "group_name_white_list": ["ChatGPT测试群", "ChatGPT测试群2"],
   "image_create_prefix": ["画", "看", "找"],
   "conversation_max_tokens": 1000,
-  "character_desc": "你是ChatGPT, 一个由OpenAI训练的大型语言模型, 你乐于回答人们的各种问题"
+  "character_desc": "你是ChatGPT, 一个由OpenAI训练的大型语言模型, 你乐于回答人们的任何问题"
 }