From 7477c7c67ff98ad99923b46e5af21c6c96016daf Mon Sep 17 00:00:00 2001
From: chordfish <592229466@qq.com>
Date: Thu, 9 Mar 2023 21:16:15 +0800
Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E4=B8=80=E9=83=A8=E5=88=86?=
=?UTF-8?q?=E6=B3=A8=E9=87=8A=E5=92=8C=E8=B0=83=E8=AF=95=E5=86=85=E5=AE=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 36 +++++++++++++++++++++++-------------
config-template.py | 2 +-
pkg/openai/session.py | 35 +++++++++++++++++++----------------
3 files changed, 43 insertions(+), 30 deletions(-)
diff --git a/README.md b/README.md
index eea3218d..ab6e9983 100644
--- a/README.md
+++ b/README.md
@@ -1,16 +1,27 @@
-# QChatGPT🤖
-> 2023/3/3 官方接口疑似被墙,可考虑使用网络代理 [#198](https://github.com/RockChinQ/QChatGPT/issues/198)
-> 2023/3/3 现已在主线支持官方ChatGPT接口,使用方法查看[#195](https://github.com/RockChinQ/QChatGPT/issues/195)
-> 2023/3/2 OpenAI已发布ChatGPT官方接口,我们正在全力接入,预计明日前完成,请查看[此PR](https://github.com/RockChinQ/QChatGPT/pull/194)
-> 2023/2/16 现已支持接入ChatGPT网页版,详情请完成部署并查看底部**插件**小节或[此仓库](https://github.com/RockChinQ/revLibs)
+# QChatGPT🤖完整情景导入版
-- 到[项目Wiki](https://github.com/RockChinQ/QChatGPT/wiki)可了解项目详细信息
-- 由bilibili TheLazy制作的[视频教程](https://www.bilibili.com/video/BV15v4y1X7aP)
-- 交流、答疑群: ~~204785790~~(已满)、691226829、656285629
- - **进群提问前请您`确保`已经找遍文档和issue均无法解决**
-- QQ频道机器人见[QQChannelChatGPT](https://github.com/Soulter/QQChannelChatGPT)
+- 2023/3/9 初步追加通过json导入messages数组的方式进行情景预设,
+ 参考[api](https://platform.openai.com/docs/guides/chat/introduction),通过该方法能注入gpt本不存在的记忆。neko.json来源于[此](https://gist.github.com/ChenYFan/ffb8390aac6c4aa44869ec10fe4eb9e2)
+- 2023/3/8 fork from: [RockChinQ/QChatGPT](https://github.com/RockChinQ/QChatGPT)
-通过调用OpenAI的ChatGPT等语言模型来实现一个更加智能的QQ机器人
+## 改动一览
+
+### 切换完整情景模式
+
+- 在`config.py`中,将`preset_mode`更改为`full_scenario`
+- 将情景json放入`scenario`文件夹中,使用`!reload`和`!reset <无后缀文件名>`指令切换
+
+### 过滤脱离人设的回复
+
+- 在`config.py`中将`filter_ai_warning`改为`True`
+- 在对应情景的json中添加(**注意,使用此过滤会使得机器人无法回复有关过滤词的内容**):
+
+ ```json
+ "filter": {
+ "reg": "我的本质|抱歉|AI助手|人工智能|语言模型|无法提供|无法回应|机器人",
+ "replace": "<替换的回复>"
+ },
+ ```
## 🍺模型适配一览
@@ -227,10 +238,9 @@ python3 main.py
- [@hissincn](https://github.com/hissincn) 本项目贡献者
- [@LINSTCL](https://github.com/LINSTCL) GPT-3.5官方模型适配贡献者
- [@Haibersut](https://github.com/Haibersut) 本项目贡献者
-- [@万神的星空](https://github.com/qq255204159) 整合包发行
以及其他所有为本项目提供支持的朋友们。
## 👍赞赏
-
\ No newline at end of file
+
diff --git a/config-template.py b/config-template.py
index e519c28e..3cea74fa 100644
--- a/config-template.py
+++ b/config-template.py
@@ -89,7 +89,7 @@ preset_mode = "default"
# 过滤AI脱离人设的消息
# 这类消息在对应情景json中设置,将其替换为自定义消息,以保持人格
-# filter_ai_warning = False
+filter_ai_warning = False
# 群内响应规则
# 符合此消息的群内消息即使不包含at机器人也会响应
diff --git a/pkg/openai/session.py b/pkg/openai/session.py
index 2cd54baf..5564833b 100644
--- a/pkg/openai/session.py
+++ b/pkg/openai/session.py
@@ -145,11 +145,12 @@ class Session:
'content': 'ok'
}
]
+
# 根据设置进行prompt预设模式
if config.preset_mode == "full_scenario":
import os
- ##
+
dir = os.path.join(os.getcwd(), config.full_prompt_dir)
json_file = os.path.join(dir, use_default) + '.json'
@@ -161,15 +162,15 @@ class Session:
current_default_prompt = json_content['prompt']
if not get_only:
- self.bot_name = json_content['name'] # 读取机器人名字,用于响应信息
- self.bot_filter = json_content['filter'] # 过滤掉不符合人格的警告
+ # 读取机器人名字,用于响应信息
+ self.bot_name = json_content['name']
+ # 过滤掉不符合人格的回复
+ self.bot_filter = json_content['filter']
logging.debug("first bot filter: {}".format(self.bot_filter))
except FileNotFoundError:
logging.info("couldn't find file {}".format(json_file))
-
- # logging.info("json: {}".format(current_default_prompt))
- ##
+
else:
current_default_prompt = dprompt.get_prompt(use_default)
@@ -249,24 +250,26 @@ class Session:
# 成功获取,处理回复
res_test = message
res_ans = res_test
+
# 去除开头可能的提示
res_ans_spt = res_test.split("\n\n")
if len(res_ans_spt) > 1:
del (res_ans_spt[0])
res_ans = '\n\n'.join(res_ans_spt)
+
# 检测是否包含ai人格否定
- # logging.debug('bot_filter: {}'.format(self.bot_filter))
- # if config.filter_ai_warning and self.bot_filter:
- # import re
- # match = re.search(self.bot_filter['reg'], res_ans)
- # logging.debug(self.bot_filter)
- # logging.debug(res_ans)
- # if match:
- # logging.debug('回复:{}, 检测到人格否定,替换中。。'.format(res_ans))
- # res_ans = self.bot_filter['replace']
- # logging.debug('替换为: {}'.format(res_ans))
+ if config.filter_ai_warning and self.bot_filter:
+ import re
+ match = re.search(self.bot_filter['reg'], res_ans)
+ logging.debug(self.bot_filter)
+ logging.debug(res_ans)
+ if match:
+ logging.debug('回复:{}, 检测到人格否定,替换中。。'.format(res_ans))
+ res_ans = self.bot_filter['replace']
+ logging.debug('替换为: {}'.format(res_ans))
+
# 将此次对话的双方内容加入到prompt中
self.prompt.append({'role': 'user', 'content': text})