From 1828e341905461a25b3729da848d54f8c336b66a Mon Sep 17 00:00:00 2001 From: Rock Chin <1010553892@qq.com> Date: Fri, 10 Mar 2023 21:04:20 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=8C=87=E5=AE=9A=E5=BD=93=E5=89=8D=E4=BC=9A=E8=AF=9D?= =?UTF-8?q?=E7=9A=84=E6=8C=87=E5=AE=9A=E6=88=96=E5=85=A8=E9=83=A8=E5=8E=86?= =?UTF-8?q?=E5=8F=B2=E8=AE=B0=E5=BD=95=20(#239)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 3 --- pkg/database/manager.py | 16 ++++++++++++++++ pkg/openai/session.py | 8 +++++++- pkg/qqbot/command.py | 14 ++++++++++++++ 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/main.py b/main.py index bfdd7a80..99380f1f 100644 --- a/main.py +++ b/main.py @@ -352,9 +352,6 @@ if __name__ == '__main__': updater.update_all(cli=True) sys.exit(0) - # import pkg.utils.configmgr - # - # pkg.utils.configmgr.set_config_and_reload("quote_origin", False) requests.packages.urllib3.disable_warnings(InsecureRequestWarning) qqbot = main(True) diff --git a/pkg/database/manager.py b/pkg/database/manager.py index 5fde3c29..8bc7571d 100644 --- a/pkg/database/manager.py +++ b/pkg/database/manager.py @@ -35,6 +35,7 @@ class DatabaseManager: def __execute__(self, *args, **kwargs) -> Cursor: # logging.debug('SQL: {}'.format(sql)) + logging.debug('SQL: {}'.format(args)) c = self.cursor.execute(*args, **kwargs) self.conn.commit() return c @@ -240,6 +241,21 @@ class DatabaseManager: return sessions + def delete_history(self, session_name: str, index: int) -> bool: + # 删除倒序第index个session + # 查找其id再删除 + self.__execute__(""" + delete from `sessions` where `id` in (select `id` from `sessions` where `name` = '{}' order by `last_interact_timestamp` desc limit 1 offset {}) + """.format(session_name, index)) + + return self.cursor.rowcount == 1 + + def delete_all_history(self, session_name: str) -> bool: + self.__execute__(""" + delete from `sessions` where `name` = '{}' + """.format(session_name)) + return self.cursor.rowcount > 0 + # 将apikey的使用量存进数据库 def dump_api_key_usage(self, api_keys: dict, usage: dict): logging.debug('dumping api key usage...') diff --git a/pkg/openai/session.py b/pkg/openai/session.py index 38a629d1..233b9dc0 100644 --- a/pkg/openai/session.py +++ b/pkg/openai/session.py @@ -40,7 +40,7 @@ def reset_session_prompt(session_name, prompt): prompt = [ { 'role': 'system', - 'content': config.default_prompt['default'] + 'content': config.default_prompt['default'] if type(config.default_prompt) == dict else config.default_prompt } ] # 警告 @@ -366,5 +366,11 @@ class Session: def list_history(self, capacity: int = 10, page: int = 0): return pkg.utils.context.get_database_manager().list_history(self.name, capacity, page) + def delete_history(self, index: int) -> bool: + return pkg.utils.context.get_database_manager().delete_history(self.name, index) + + def delete_all_history(self) -> bool: + return pkg.utils.context.get_database_manager().delete_all_history(self.name) + def draw_image(self, prompt: str): return pkg.utils.context.get_openai_manager().request_image(prompt) diff --git a/pkg/qqbot/command.py b/pkg/qqbot/command.py index b174d453..37ba7142 100644 --- a/pkg/qqbot/command.py +++ b/pkg/qqbot/command.py @@ -256,6 +256,20 @@ def process_command(session_name: str, text_message: str, mgr, config, reply = pkg.qqbot.message.process_normal_message(to_send, mgr, config, launcher_type, launcher_id, sender_id) + elif cmd == 'del': # 删除指定会话历史记录 + if len(params) == 0: + reply = ["[bot]参数不足, 格式: !del <序号>\n可以通过!list查看序号"] + else: + if params[0] == 'all': + pkg.openai.session.get_session(session_name).delete_all_history() + reply = ["[bot]已删除所有历史会话"] + elif params[0].isdigit(): + if pkg.openai.session.get_session(session_name).delete_history(int(params[0])): + reply = ["[bot]已删除历史会话 #{}".format(params[0])] + else: + reply = ["[bot]没有历史会话 #{}".format(params[0])] + else: + reply = ["[bot]参数错误, 格式: !del <序号>\n可以通过!list查看序号"] elif cmd == 'usage': reply_str = "[bot]各api-key使用情况:\n\n" From 69610a674c7f7c1600ce95905483829d9dc6acb7 Mon Sep 17 00:00:00 2001 From: Rock Chin <1010553892@qq.com> Date: Fri, 10 Mar 2023 21:11:55 +0800 Subject: [PATCH 2/3] =?UTF-8?q?perf:=20=E6=9B=B4=E6=94=B9help=E4=B8=AD?= =?UTF-8?q?=E6=8C=87=E4=BB=A4=E4=BF=A1=E6=81=AF=E5=B8=AE=E5=8A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config-template.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/config-template.py b/config-template.py index fbb3eea0..c1e7103c 100644 --- a/config-template.py +++ b/config-template.py @@ -249,11 +249,4 @@ help_message = """此机器人通过调用OpenAI的GPT-3大型语言模型生成 每次会话最后一次交互后{}分钟后会自动结束,结束后将开启新会话,如需继续前一次会话请发送 !last 重新开启 欢迎到github.com/RockChinQ/QChatGPT 给个star -帮助信息: -!help - 显示帮助 -!reset - 重置会话 -!last - 切换到前一次的对话 -!next - 切换到后一次的对话 -!prompt - 显示当前对话所有内容 -!list - 列出所有历史会话 -!usage - 列出各个api-key的使用量""".format(session_expire_time // 60) +指令帮助信息请查看: https://github.com/RockChinQ/QChatGPT/wiki/%E5%8A%9F%E8%83%BD%E4%BD%BF%E7%94%A8#%E6%9C%BA%E5%99%A8%E4%BA%BA%E6%8C%87%E4%BB%A4""".format(session_expire_time // 60) From b920ced6d4fede1eea8625c42651be974ba65a2b Mon Sep 17 00:00:00 2001 From: Rock Chin <1010553892@qq.com> Date: Fri, 10 Mar 2023 21:20:19 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20!delhst=20=E6=8C=87=E4=BB=A4?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E7=AE=A1=E7=90=86=E5=91=98=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E4=BC=9A=E8=AF=9D=E5=8E=86=E5=8F=B2=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/database/manager.py | 6 ++++++ pkg/qqbot/command.py | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/pkg/database/manager.py b/pkg/database/manager.py index 8bc7571d..752664d0 100644 --- a/pkg/database/manager.py +++ b/pkg/database/manager.py @@ -256,6 +256,12 @@ class DatabaseManager: """.format(session_name)) return self.cursor.rowcount > 0 + def delete_all_session_history(self) -> bool: + self.__execute__(""" + delete from `sessions` + """) + return self.cursor.rowcount > 0 + # 将apikey的使用量存进数据库 def dump_api_key_usage(self, api_keys: dict, usage: dict): logging.debug('dumping api key usage...') diff --git a/pkg/qqbot/command.py b/pkg/qqbot/command.py index 37ba7142..f63ffbef 100644 --- a/pkg/qqbot/command.py +++ b/pkg/qqbot/command.py @@ -336,6 +336,18 @@ def process_command(session_name: str, text_message: str, mgr, config, reply = ["[bot]err: 未找到情景预设:{}".format(params[0])] else: reply = ["[bot]err: 仅管理员可设置默认情景预设"] + elif cmd == "delhst" and is_admin: + if len(params) == 0: + reply = ["[bot]err:请输入要删除的会话名: group_<群号> 或者 person_, 或使用 !delhst all 删除所有会话的历史记录"] + else: + if params[0] == "all": + pkg.utils.context.get_database_manager().delete_all_session_history() + reply = ["[bot]已删除所有会话的历史记录"] + else: + if pkg.utils.context.get_database_manager().delete_all_history(params[0]): + reply = ["[bot]已删除会话 {} 的所有历史记录".format(params[0])] + else: + reply = ["[bot]未找到会话 {} 的历史记录".format(params[0])] elif cmd == 'reload' and is_admin: def reload_task(): pkg.utils.reloader.reload_all()