fix(emoji): 优化表情包描述匹配并修复潜在错误
- 改进在描述模式下选择表情包的匹配算法,从精确匹配改为更灵活的包含匹配和关键词匹配,显著提高匹配成功率。 - 初始化 `chosen_emotion` 变量,以避免在某些逻辑分支下因变量未定义而引发错误。 - 统一并简化了发送表情包后记录到prompt中的提示语,使其更加通用和简洁。
This commit is contained in:
@@ -98,6 +98,7 @@ class EmojiAction(BaseAction):
|
|||||||
|
|
||||||
available_emotions = list(emotion_map.keys())
|
available_emotions = list(emotion_map.keys())
|
||||||
emoji_base64, emoji_description = "", ""
|
emoji_base64, emoji_description = "", ""
|
||||||
|
chosen_emotion = "表情包" # 默认描述,避免变量未定义错误
|
||||||
|
|
||||||
# 4. 根据配置选择不同的表情选择模式
|
# 4. 根据配置选择不同的表情选择模式
|
||||||
if global_config.emoji.emoji_selection_mode == "emotion":
|
if global_config.emoji.emoji_selection_mode == "emotion":
|
||||||
@@ -207,18 +208,29 @@ class EmojiAction(BaseAction):
|
|||||||
emoji_base64, emoji_description = random.choice(all_emojis_data)
|
emoji_base64, emoji_description = random.choice(all_emojis_data)
|
||||||
else:
|
else:
|
||||||
chosen_description = chosen_description.strip().replace('"', "").replace("'", "")
|
chosen_description = chosen_description.strip().replace('"', "").replace("'", "")
|
||||||
|
chosen_emotion = chosen_description # 在描述模式下,用描述作为情感标签
|
||||||
logger.info(f"{self.log_prefix} LLM选择的描述: {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:
|
if matched_emoji:
|
||||||
emoji_base64, emoji_description = 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:
|
else:
|
||||||
logger.warning(
|
logger.warning(f"{self.log_prefix} LLM选择的描述无法匹配任何表情包, 将随机选择")
|
||||||
f"{self.log_prefix} LLM选择的描述 '{chosen_description}' 不在可用列表中, 将随机选择一个表情包"
|
|
||||||
)
|
|
||||||
emoji_base64, emoji_description = random.choice(all_emojis_data)
|
emoji_base64, emoji_description = random.choice(all_emojis_data)
|
||||||
else:
|
else:
|
||||||
logger.error(f"{self.log_prefix} 无效的表情选择模式: {global_config.emoji.emoji_selection_mode}")
|
logger.error(f"{self.log_prefix} 无效的表情选择模式: {global_config.emoji.emoji_selection_mode}")
|
||||||
@@ -229,9 +241,9 @@ class EmojiAction(BaseAction):
|
|||||||
|
|
||||||
if not success:
|
if not success:
|
||||||
logger.error(f"{self.log_prefix} 表情包发送失败")
|
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, "表情包发送失败"
|
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}"
|
return True, f"发送表情包: {emoji_description}"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user