From 5e3efd31489c0eea5cccfab7a7995529a7ca2131 Mon Sep 17 00:00:00 2001 From: tt-P607 <68868379+tt-P607@users.noreply.github.com> Date: Fri, 12 Sep 2025 22:50:37 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E6=8F=90=E4=BE=9B?= =?UTF-8?q?=E7=9A=84=20git=20diff=20=E5=88=86=E6=9E=90=EF=BC=8C=E8=BF=99?= =?UTF-8?q?=E6=98=AF=E4=B8=80=E4=B8=AA=E9=87=8D=E6=9E=84=E5=8F=98=E6=9B=B4?= =?UTF-8?q?=EF=BC=8C=E4=B8=BB=E8=A6=81=E6=98=AF=E4=BF=AE=E6=94=B9=E4=BA=86?= =?UTF-8?q?=E5=BC=82=E6=AD=A5=E5=86=85=E5=AD=98=E5=8C=85=E8=A3=85=E5=99=A8?= =?UTF-8?q?=E7=9A=84=E5=AF=BC=E5=85=A5=E5=92=8C=E4=BD=BF=E7=94=A8=E6=96=B9?= =?UTF-8?q?=E5=BC=8F=E3=80=82=E4=BB=A5=E4=B8=8B=E6=98=AF=E7=94=9F=E6=88=90?= =?UTF-8?q?=E7=9A=84=E5=B8=B8=E8=A7=84=E6=8F=90=E4=BA=A4=E6=B6=88=E6=81=AF?= =?UTF-8?q?=EF=BC=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit refactor(prompt): 重构异步即时内存包装器的导入和使用方式 - 将 async_memory 导入更改为 get_async_instant_memory 函数 - 简化内存获取逻辑,通过工厂函数创建包装器实例 - 更新参数传递方式,使用 target 替代 sender 参数 - 减少代码行数,提高可读性 --- src/chat/utils/prompt.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/chat/utils/prompt.py b/src/chat/utils/prompt.py index 88584f51d..5fc9f7842 100644 --- a/src/chat/utils/prompt.py +++ b/src/chat/utils/prompt.py @@ -567,7 +567,7 @@ class Prompt: try: from src.chat.memory_system.memory_activator import MemoryActivator - from src.chat.memory_system.async_instant_memory_wrapper import async_memory + from src.chat.memory_system.async_instant_memory_wrapper import get_async_instant_memory # 获取聊天历史 chat_history = "" @@ -589,10 +589,8 @@ class Prompt: ) # 获取即时记忆 - instant_memory = await async_memory.get_memory_with_fallback( - chat_id=self.parameters.chat_id, - target_user=self.parameters.sender - ) + async_memory_wrapper = get_async_instant_memory(self.parameters.chat_id) + instant_memory = await async_memory_wrapper.get_memory_with_fallback(self.parameters.target) # 构建记忆块 memory_parts = [] From 70511d3c264e08165c961dcb8f07a592de114253 Mon Sep 17 00:00:00 2001 From: tt-P607 <68868379+tt-P607@users.noreply.github.com> Date: Sat, 13 Sep 2025 00:48:54 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix(emoji):=20=E4=BC=98=E5=8C=96=E8=A1=A8?= =?UTF-8?q?=E6=83=85=E5=8C=85=E6=8F=8F=E8=BF=B0=E5=8C=B9=E9=85=8D=E5=B9=B6?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=BD=9C=E5=9C=A8=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 改进在描述模式下选择表情包的匹配算法,从精确匹配改为更灵活的包含匹配和关键词匹配,显著提高匹配成功率。 - 初始化 `chosen_emotion` 变量,以避免在某些逻辑分支下因变量未定义而引发错误。 - 统一并简化了发送表情包后记录到prompt中的提示语,使其更加通用和简洁。 --- src/plugins/built_in/core_actions/emoji.py | 28 +++++++++++++++------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/plugins/built_in/core_actions/emoji.py b/src/plugins/built_in/core_actions/emoji.py index c00e9ba66..c29a9394b 100644 --- a/src/plugins/built_in/core_actions/emoji.py +++ b/src/plugins/built_in/core_actions/emoji.py @@ -98,6 +98,7 @@ class EmojiAction(BaseAction): available_emotions = list(emotion_map.keys()) emoji_base64, emoji_description = "", "" + chosen_emotion = "表情包" # 默认描述,避免变量未定义错误 # 4. 根据配置选择不同的表情选择模式 if global_config.emoji.emoji_selection_mode == "emotion": @@ -207,18 +208,29 @@ class EmojiAction(BaseAction): emoji_base64, emoji_description = random.choice(all_emojis_data) else: chosen_description = chosen_description.strip().replace('"', "").replace("'", "") + chosen_emotion = chosen_description # 在描述模式下,用描述作为情感标签 logger.info(f"{self.log_prefix} LLM选择的描述: {chosen_description}") - # 查找与选择的描述匹配的表情包 - matched_emoji = next((item for item in all_emojis_data if item == chosen_description), None) + # 简单关键词匹配 + matched_emoji = next((item for item in all_emojis_data if chosen_description.lower() in item[1].lower() or item[1].lower() in chosen_description.lower()), None) + + # 如果包含匹配失败,尝试关键词匹配 + if not matched_emoji: + keywords = ['惊讶', '困惑', '呆滞', '震惊', '懵', '无语', '萌', '可爱'] + for keyword in keywords: + if keyword in chosen_description: + for item in all_emojis_data: + if any(k in item[1] for k in ['呆', '萌', '惊', '困惑', '无语']): + matched_emoji = item + break + if matched_emoji: + break if matched_emoji: emoji_base64, emoji_description = matched_emoji - logger.info(f"{self.log_prefix} 找到匹配描述 '{chosen_description}' 的表情包") + logger.info(f"{self.log_prefix} 找到匹配描述的表情包: {emoji_description}") else: - logger.warning( - f"{self.log_prefix} LLM选择的描述 '{chosen_description}' 不在可用列表中, 将随机选择一个表情包" - ) + logger.warning(f"{self.log_prefix} LLM选择的描述无法匹配任何表情包, 将随机选择") emoji_base64, emoji_description = random.choice(all_emojis_data) else: logger.error(f"{self.log_prefix} 无效的表情选择模式: {global_config.emoji.emoji_selection_mode}") @@ -229,9 +241,9 @@ class EmojiAction(BaseAction): if not success: logger.error(f"{self.log_prefix} 表情包发送失败") - await self.store_action_info(action_build_into_prompt = True,action_prompt_display =f"发送了一个{chosen_emotion}的表情包,但失败了",action_done= False) + await self.store_action_info(action_build_into_prompt = True,action_prompt_display =f"发送了一个表情包,但失败了",action_done= False) return False, "表情包发送失败" - await self.store_action_info(action_build_into_prompt = True,action_prompt_display =f"发送了一个{chosen_emotion}的表情包",action_done= True) + await self.store_action_info(action_build_into_prompt = True,action_prompt_display =f"发送了一个表情包",action_done= True) return True, f"发送表情包: {emoji_description}"