From 7b8a311dde72345b878efec8d96155076c04cd94 Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Mon, 25 Sep 2023 12:03:17 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Dgocq=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E4=B8=8BQQ=E9=A2=91=E9=81=93=E6=97=A0=E6=B3=95=E9=80=9A?= =?UTF-8?q?=E8=BF=87@=E5=9B=9E=E5=A4=8D=E6=B6=88=E6=81=AF=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20feat:=20=20=E6=94=AF=E6=8C=81=E9=87=8D?= =?UTF-8?q?=E7=BD=AE=E4=BC=9A=E8=AF=9D=E6=97=B6=E4=BF=9D=E7=95=99=E4=BA=BA?= =?UTF-8?q?=E6=A0=BC=20perf:=20=E6=B8=85=E9=99=A4=E9=83=A8=E5=88=86?= =?UTF-8?q?=E6=97=A0=E7=94=A8=E6=97=A5=E5=BF=97=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cores/qqbot/core.py | 2 +- model/command/command_openai_official.py | 28 ++++++++++++------- model/command/command_rev_chatgpt.py | 31 +++++++++++++++------- model/platform/qq.py | 2 +- model/platform/qqchan.py | 2 +- model/provider/provider_openai_official.py | 3 ++- 6 files changed, 45 insertions(+), 23 deletions(-) diff --git a/cores/qqbot/core.py b/cores/qqbot/core.py index 68da366aa..36c29554f 100644 --- a/cores/qqbot/core.py +++ b/cores/qqbot/core.py @@ -504,7 +504,7 @@ def oper_msg(message, if isinstance(i, At): # @机器人 if message.type == "GuildMessage": - if i.qq == message.user_id: + if i.qq == message.user_id or i.qq == message.self_tiny_id: with_tag = True if message.type == "FriendMessage": if i.qq == message.self_id: diff --git a/model/command/command_openai_official.py b/model/command/command_openai_official.py index b0f2cd1c7..bc2fc5b6a 100644 --- a/model/command/command_openai_official.py +++ b/model/command/command_openai_official.py @@ -11,6 +11,7 @@ class CommandOpenAIOfficial(Command): self.provider = provider self.cached_plugins = {} self.global_object = global_object + self.personality_str = "" super().__init__(provider, global_object) def check_command(self, @@ -37,7 +38,7 @@ class CommandOpenAIOfficial(Command): if hit: return True, res if self.command_start_with(message, "reset", "重置"): - return True, self.reset(session_id) + return True, self.reset(session_id, message) elif self.command_start_with(message, "his", "历史"): return True, self.his(message, session_id) elif self.command_start_with(message, "token"): @@ -77,11 +78,18 @@ class CommandOpenAIOfficial(Command): return True, super().help_messager(commands, self.platform, cached_plugins), "help" - def reset(self, session_id: str): + def reset(self, session_id: str, message: str = "reset"): if self.provider is None: return False, "未启动OpenAI ChatGPT语言模型.", "reset" - self.provider.forget(session_id) - return True, "重置成功", "reset" + l = message.split(" ") + if len(l) == 1: + self.provider.forget(session_id) + return True, "重置成功", "reset" + if len(l) == 2 and l[1] == "p": + self.provider.forget(session_id) + if self.personality_str != "": + self.set(self.personality_str, session_id) # 重新设置人格 + return True, "重置成功", "reset" def his(self, message: str, session_id: str): if self.provider is None: @@ -131,13 +139,13 @@ class CommandOpenAIOfficial(Command): sponsor = key_stat[key]['sponsor'] chatgpt_cfg_str += f" |-{index}: {key_stat[key]['used']}/{max} {sponsor}赞助{tag}\n" index += 1 - return True, f"⭐使用情况({str(gg_count)}个已用):\n{chatgpt_cfg_str}⏰全频道已用{total}tokens", "status" + return True, f"⭐使用情况({str(gg_count)}个已用):\n{chatgpt_cfg_str}", "status" def count(self): if self.provider is None: - return False, "未启动OpenAI ChatGPT语言模型.", "reset" + return False, "未启动OpenAI ChatGPT语言模型。", "reset" guild_count, guild_msg_count, guild_direct_msg_count, session_count = self.provider.get_stat() - return True, f"当前会话数: {len(self.provider.session_dict)}\n共有频道数: {guild_count} \n共有消息数: {guild_msg_count}\n私信数: {guild_direct_msg_count}\n历史会话数: {session_count}", "count" + return True, f"【本指令部分统计可能已经过时】\n当前会话数: {len(self.provider.session_dict)}\n共有频道数: {guild_count} \n共有消息数: {guild_msg_count}\n私信数: {guild_direct_msg_count}\n历史会话数: {session_count}", "count" def key(self, message: str): if self.provider is None: @@ -167,7 +175,7 @@ class CommandOpenAIOfficial(Command): if len(l) == 1: return True, f"【人格文本由PlexPt开源项目awesome-chatgpt-pr \ ompts-zh提供】\n设置人格: \n/set 人格名。例如/set 编剧\n人格列表: /set list\n人格详细信息: \ - /set view 人格名\n自定义人格: /set 人格文本\n清除人格: /unset\n【当前人格】: {str(self.provider.now_personality)}", "set" + /set view 人格名\n自定义人格: /set 人格文本\n重置会话(清除人格): /reset\n重置会话(保留人格): /reset p\n【当前人格】: {str(self.provider.now_personality)}", "set" elif l[1] == "list": msg = "人格列表:\n" for key in personalities.keys(): @@ -202,7 +210,8 @@ class CommandOpenAIOfficial(Command): 'single-tokens': 0 } self.provider.session_dict[session_id].append(new_record) - return True, f"人格{ps}已设置.", "set" + self.personality_str = message + return True, f"人格{ps}已设置。", "set" else: self.provider.now_personality = { 'name': '自定义人格', @@ -218,6 +227,7 @@ class CommandOpenAIOfficial(Command): } self.provider.session_dict[session_id] = [] self.provider.session_dict[session_id].append(new_record) + self.personality_str = message return True, f"自定义人格已设置。 \n人格信息: {ps}", "set" def draw(self, message): diff --git a/model/command/command_rev_chatgpt.py b/model/command/command_rev_chatgpt.py index 7f41f2911..d1cb7e748 100644 --- a/model/command/command_rev_chatgpt.py +++ b/model/command/command_rev_chatgpt.py @@ -8,6 +8,7 @@ class CommandRevChatGPT(Command): self.provider = provider self.cached_plugins = {} self.global_object = global_object + self.personality_str = "" super().__init__(provider, global_object) def check_command(self, @@ -36,7 +37,7 @@ class CommandRevChatGPT(Command): if self.command_start_with(message, "help", "帮助"): return True, self.help(cached_plugins) elif self.command_start_with(message, "reset"): - return True, self.reset(session_id) + return True, self.reset(session_id, message) elif self.command_start_with(message, "update"): return True, self.update(message, role) elif self.command_start_with(message, "set"): @@ -47,15 +48,21 @@ class CommandRevChatGPT(Command): return True, (False, "未知指令", "unknown_command") return False, None - def reset(self, session_id): - self.provider.forget(session_id) - return True, "重置完毕。", "reset" + def reset(self, session_id, message: str): + l = message.split(" ") + if len(l) == 1: + self.provider.forget(session_id) + return True, "重置完毕。", "reset" + if len(l) == 2 and l[1] == "p": + self.provider.forget(session_id) + ret = self.provider.text_chat(self.personality_str) + return True, f"重置完毕(保留人格)。\n\n{ret}", "reset" def set(self, message: str, session_id: str): l = message.split(" ") if len(l) == 1: - return True, f"设置人格: \n/set 人格名。例如/set 编剧\n人格列表: /set list\n人格详细信息: \ - /set view 人格名\n清除人格: /reset", "set" + return True, f"设置人格: \n/set 人格名或人格文本。例如/set 编剧\n人格列表: /set list\n人格详细信息: \ + /set view 人格名\n重置会话(清除人格): /reset\n重置会话(保留人格): /reset p", "set" elif l[1] == "list": msg = "人格列表:\n" for key in personalities.keys(): @@ -76,11 +83,15 @@ class CommandRevChatGPT(Command): else: ps = l[1].strip() if ps in personalities: - self.reset(session_id) - self.provider.text_chat(personalities[ps], session_id) - return True, f"人格【{ps}】已设置。", "set" + self.reset(session_id, "reset") + self.personality_str = personalities[ps] + ret = self.provider.text_chat(self.personality_str, session_id) + return True, f"人格【{ps}】已设置。\n\n{ret}", "set" else: - return True, f"人格【{ps}】不存在。", "set" + self.reset(session_id, "reset") + self.personality_str = ps + ret = self.provider.text_chat(ps, session_id) + return True, f"人格信息已设置。\n\n{ret}", "set" def switch(self, message: str, session_id: str): ''' diff --git a/model/platform/qq.py b/model/platform/qq.py index e057b9820..016cdbe1f 100644 --- a/model/platform/qq.py +++ b/model/platform/qq.py @@ -101,7 +101,7 @@ class QQ: node.uin = source.self_id node.name = f"To {source.sender.nickname}:" node.time = int(time.time()) - print(node) + # print(node) nodes=[node] await self.client.sendGroupForwardMessage(source.group_id, nodes) return diff --git a/model/platform/qqchan.py b/model/platform/qqchan.py index 94ec82f58..3856b3819 100644 --- a/model/platform/qqchan.py +++ b/model/platform/qqchan.py @@ -112,7 +112,7 @@ class QQChan(): elif isinstance(res, str): plain_text = res - print(plain_text, image_path) + # print(plain_text, image_path) if image_path is not None: msg_ref = None diff --git a/model/provider/provider_openai_official.py b/model/provider/provider_openai_official.py index 6bc20f437..12e2d65b4 100644 --- a/model/provider/provider_openai_official.py +++ b/model/provider/provider_openai_official.py @@ -16,7 +16,7 @@ class ProviderOpenAIOfficial(Provider): self.key_list = [] if 'api_base' in cfg and cfg['api_base'] != 'none' and cfg['api_base'] != '': openai.api_base = cfg['api_base'] - print(f"设置apibase为:{openai.api_base}") + print(f"设置apibase为: {openai.api_base}") if cfg['key'] != '' and cfg['key'] != None: self.key_list = cfg['key'] else: @@ -113,6 +113,7 @@ class ProviderOpenAIOfficial(Provider): f.close() cache_data_list, new_record, req = self.wrap(prompt, session_id) + gu.log(f"OPENAI REQUEST: {str(req)}", level=gu.LEVEL_DEBUG, max_len=9999) retry = 0 response = None err = ''