From bb0bb0c4251a9c5c796f827d6ac3a08753729f48 Mon Sep 17 00:00:00 2001 From: Rock Chin <1010553892@qq.com> Date: Mon, 12 Dec 2022 14:00:50 +0800 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0default=5Fprompt?= =?UTF-8?q?=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config-template.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/config-template.py b/config-template.py index b368b6f2..b0e3d688 100644 --- a/config-template.py +++ b/config-template.py @@ -1,5 +1,4 @@ # 配置文件: 注释里标[必需]的参数必须修改, 其他参数根据需要修改, 但请勿删除 - import logging # [必需] Mirai的配置 @@ -25,12 +24,15 @@ openai_config = { admin_qq = 0 # 敏感词过滤开关,以同样数量的*代替敏感词回复 -# 开启后可能会降低机器人的回复速度 # 请在sensitive.json中添加敏感词 sensitive_word_filter = True +# 每个会话的预设信息 +# 可以通过这个字段指定某些情况的回复,可直接用自然语言描述指令 +default_prompt = "" + # OpenAI的completion API的参数 -# 不了解的话请不要修改,具体请查看OpenAI的文档 +# 具体请查看OpenAI的文档 completion_api_params = { "model": "text-davinci-003", "temperature": 0.6, # 数值越低得到的回答越理性,取值范围[0, 1] From 9a7e7d3862b6b51d1ea49304ba57b8a0ae822ace Mon Sep 17 00:00:00 2001 From: Rock Chin Date: Mon, 12 Dec 2022 17:18:50 +0800 Subject: [PATCH 2/4] =?UTF-8?q?fix:=20=E6=89=A7=E8=A1=8C=E5=91=BD=E4=BB=A4?= =?UTF-8?q?=E5=87=BA=E9=94=99=E5=90=8E=E6=97=A0=E6=B3=95=E5=86=8D=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/qqbot/manager.py | 54 +++++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/pkg/qqbot/manager.py b/pkg/qqbot/manager.py index 3318ed10..e9ee62e3 100644 --- a/pkg/qqbot/manager.py +++ b/pkg/qqbot/manager.py @@ -190,20 +190,21 @@ class QQBotManager: else: processing.append("person_{}".format(event.sender.id)) - # 超时则重试,重试超过次数则放弃 - failed = 0 - for i in range(self.retry): - try: - reply = self.process_message('person', event.sender.id, str(event.message_chain)) - break - except FunctionTimedOut: - failed += 1 - continue + try: + # 超时则重试,重试超过次数则放弃 + failed = 0 + for i in range(self.retry): + try: + reply = self.process_message('person', event.sender.id, str(event.message_chain)) + break + except FunctionTimedOut: + failed += 1 + continue - if failed == self.retry: - reply = "[bot]err:请求超时" - - processing.remove("person_{}".format(event.sender.id)) + if failed == self.retry: + reply = "[bot]err:请求超时" + finally: + processing.remove("person_{}".format(event.sender.id)) if reply != '': return await self.bot.send(event, reply) @@ -225,20 +226,21 @@ class QQBotManager: processing.append("group_{}".format(event.sender.id)) - # 超时则重试,重试超过次数则放弃 - failed = 0 - for i in range(self.retry): - try: - reply = self.process_message('group', event.group.id, str(event.message_chain).strip()) - break - except FunctionTimedOut: - failed += 1 - continue + try: + # 超时则重试,重试超过次数则放弃 + failed = 0 + for i in range(self.retry): + try: + reply = self.process_message('group', event.group.id, str(event.message_chain).strip()) + break + except FunctionTimedOut: + failed += 1 + continue - if failed == self.retry: - reply = "err:请求超时" - - processing.remove("group_{}".format(event.sender.id)) + if failed == self.retry: + reply = "err:请求超时" + finally: + processing.remove("group_{}".format(event.sender.id)) if reply != '': return await self.bot.send(event, reply) From ce104d15eefb2df21b8fcd1ae5c4703a7daeefc1 Mon Sep 17 00:00:00 2001 From: Rock Chin Date: Mon, 12 Dec 2022 17:21:02 +0800 Subject: [PATCH 3/4] =?UTF-8?q?fix:=20=E6=9C=AA=E5=90=91=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=9C=80=E5=A4=A7=E5=9B=9E=E5=90=88=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/openai/session.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkg/openai/session.py b/pkg/openai/session.py index 1ec76f14..b1b50f15 100644 --- a/pkg/openai/session.py +++ b/pkg/openai/session.py @@ -100,12 +100,13 @@ class Session: def append(self, text: str) -> str: self.last_interact_timestamp = int(time.time()) - max_length = config.prompt_submit_length if config.prompt_submit_length is not None else 1024 + max_rounds = config.prompt_submit_round_amount if hasattr(config, 'prompt_submit_round_amount') else 7 + max_length = config.prompt_submit_length if hasattr(config, "prompt_submit_length") else 1024 # 向API请求补全 response = pkg.openai.manager.get_inst().request_completion(self.cut_out(self.prompt + self.user_name + ':' + text + '\n' + self.bot_name + ':', - 7, max_length), self.user_name + ':') + max_rounds, max_length), self.user_name + ':') self.prompt += self.user_name + ':' + text + '\n' + self.bot_name + ':' # print(response) From 37a30da06898732a84e6319b9269d35573dfff35 Mon Sep 17 00:00:00 2001 From: Rock Chin Date: Mon, 12 Dec 2022 17:21:37 +0800 Subject: [PATCH 4/4] =?UTF-8?q?feat=EF=BC=9A=E6=94=AF=E6=8C=81=E9=A2=84?= =?UTF-8?q?=E8=AE=BE=E6=8C=87=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config-template.py | 4 +++- pkg/openai/session.py | 14 ++++++++++---- sensitive.json | 2 +- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/config-template.py b/config-template.py index b0e3d688..20062827 100644 --- a/config-template.py +++ b/config-template.py @@ -27,8 +27,10 @@ admin_qq = 0 # 请在sensitive.json中添加敏感词 sensitive_word_filter = True -# 每个会话的预设信息 +# 每个会话的预设信息,影响所有会话,无视指令重置 # 可以通过这个字段指定某些情况的回复,可直接用自然语言描述指令 +# 例如: 如果我之后想获取帮助,请你说“输入!help获取帮助” +# 可参考 https://github.com/PlexPt/awesome-chatgpt-prompts-zh default_prompt = "" # OpenAI的completion API的参数 diff --git a/pkg/openai/session.py b/pkg/openai/session.py index b1b50f15..96d8bd6d 100644 --- a/pkg/openai/session.py +++ b/pkg/openai/session.py @@ -51,13 +51,19 @@ def dump_session(session_name: str): del sessions[session_name] +# 从配置文件获取会话预设信息 +def get_default_prompt(): + return "You:{}\nBot:好的\n".format(config.default_prompt) if hasattr(config, 'default_prompt') and \ + config.default_prompt != "" else '' + + # 通用的OpenAI API交互session # session内部保留了对话的上下文, # 收到用户消息后,将上下文提交给OpenAI API生成回复 class Session: name = '' - prompt = '' + prompt = get_default_prompt() user_name = 'You' bot_name = 'Bot' @@ -155,7 +161,7 @@ class Session: # 持久化session def persistence(self): - if self.prompt == '': + if self.prompt == get_default_prompt(): return db_inst = pkg.database.manager.get_inst() @@ -170,14 +176,14 @@ class Session: # 重置session def reset(self, explicit: bool = False, expired: bool = False, schedule_new: bool = True): - if self.prompt != '': + if self.prompt != get_default_prompt(): self.persistence() if explicit: pkg.database.manager.get_inst().explicit_close_session(self.name, self.create_timestamp) if expired: pkg.database.manager.get_inst().set_session_expired(self.name, self.create_timestamp) - self.prompt = '' + self.prompt = get_default_prompt() self.create_timestamp = int(time.time()) self.last_interact_timestamp = int(time.time()) self.just_switched_to_exist_session = False diff --git a/sensitive.json b/sensitive.json index dd7dfa2f..40ebc4df 100644 --- a/sensitive.json +++ b/sensitive.json @@ -33,7 +33,7 @@ "中华民国", "pornhub", "Pornhub", - "youporn", + "[Yy]ou[Pp]orn", "porn", "Porn", "[Xx][Vv]ideos",