feat(emoji): 优化表情识别提示词以提升描述质量
重构了表情包识别和描述生成的提示词,以获得更详尽、准确且符合网络文化的描述。同时调整了TTS插件的错误处理机制。 主要变更: - **表情识别提示词(Prompt)优化**: - 为静态和动态表情包设计了更结构化的描述要求,引导模型识别主题、核心元素、角色出处、网络梗以及图片内文字。 - 强调了对特殊网络文化符号(如“滑稽”表情)的准确识别,避免泛化描述。 - 优化了“点睛之笔”精炼描述的提示词,使其能更好地结合上下文信息,生成更自然的描述。 - **TTS插件错误处理重构**: - 移除了`TTSVoiceAction`中合成失败时向用户发送动态错误消息的逻辑。 - 改为静默失败,仅在后台记录详细的错误日志,避免在语音服务暂时不可用时对用户造成干扰。
This commit is contained in:
@@ -969,7 +969,7 @@ class EmojiManager:
|
||||
image_base64_frames = get_image_manager().transform_gif(image_base64)
|
||||
if not image_base64_frames:
|
||||
raise RuntimeError("GIF表情包转换失败")
|
||||
prompt = "这是一个GIF动图表情包的关键帧。请用不超过250字,详细描述它的核心内容:1. 动态画面展现了什么变化?2. 它传达了什么核心情绪或玩的是什么梗?3. 通常在什么场景下使用?请确保描述既包含关键信息,又能充分展现其内涵。重要规则:如果图片中包含清晰的文字,请务必完整地转述出来,这部分文字不计入250字限制。"
|
||||
prompt = "这是一个GIF动图表情包的关键帧。请用不超过250字,进行详尽且严谨的描述。请按照以下结构组织:首先,概括图片的主题和整体氛围。其次,详细描述图片中的核心元素,如果包含二次元角色,请尝试识别角色名称和出处。接着,描述动态画面展现了什么变化,以及它传达的核心情绪或玩的梗。最后,如果图片中包含任何文字,请准确地转述出来,这部分不计入字数限制。请特别注意识别网络文化中的特殊含义,例如,“滑稽”表情应被识别为“滑稽”,而不仅仅是“黄色的脸”。"
|
||||
description = None
|
||||
for i in range(3):
|
||||
try:
|
||||
@@ -985,7 +985,7 @@ class EmojiManager:
|
||||
logger.warning("表情包识别失败,将在1秒后重试...")
|
||||
await asyncio.sleep(1)
|
||||
else:
|
||||
prompt = "这是一个表情包。请用不超过250字,详细描述它的核心内容:1. 画面描绘了什么?2. 它传达了什么核心情绪或玩的是什么梗?3. 通常在什么场景下使用?请确保描述既包含关键信息,又能充分展现其内涵。重要规则:如果图片中包含清晰的文字,请务必完整地转述出来,这部分文字不计入250字限制。"
|
||||
prompt = "这是一个表情包。请用不超过250字,进行详尽且严谨的描述。请按照以下结构组织:首先,概括图片的主题和整体氛围。其次,详细描述图片中的核心元素,如果包含二次元角色,请尝试识别角色名称和出处。接着,描述它传达的核心情绪或玩的梗。最后,如果图片中包含任何文字,请准确地转述出来,这部分不计入字数限制。请特别注意识别网络文化中的特殊含义,例如,“滑稽”表情应被识别为“滑稽”,而不仅仅是“黄色的脸”。"
|
||||
description = None
|
||||
for i in range(3):
|
||||
try:
|
||||
@@ -1058,7 +1058,7 @@ class EmojiManager:
|
||||
if emotions: # 只有在成功提取关键词后才进行精炼
|
||||
logger.info("[自然语言精炼] 开始生成“点睛之笔”的自然语言描述")
|
||||
refine_prompt = f"""
|
||||
你的任务是为一张表情包生成一句简洁的精炼描述,用于后续的AI模型处理。
|
||||
你的任务是为一张表情包生成一句自然的、包含核心信息的精炼描述。
|
||||
|
||||
这里是关于这个表情包的分析信息:
|
||||
# 详细描述
|
||||
@@ -1068,17 +1068,18 @@ class EmojiManager:
|
||||
{emotions_text}
|
||||
|
||||
# 你的任务
|
||||
请结合以上所有信息,用一句话概括出这个表情包的核心内容,既要描述客观事实,也要点明其传达的核心情绪。
|
||||
请结合以上所有信息,用一句自然的语言,概括出这个表情包的核心内容。
|
||||
|
||||
# 规则 (非常重要!)
|
||||
1. **平衡客观与情感**:首先客观描述画面中的主体、表情和动作,然后点出其最主要的情绪(如:喜悦、悲伤、讽刺等)。
|
||||
2. **包含核心文字**:如果表情包中有文字,必须将文字完整地包含在描述中。
|
||||
3. **简洁精炼**:用最少的文字概括最多的信息。
|
||||
4. **输出格式**:**请直接返回这句描述,不要添加任何前缀、标题、引号或多余的解释。**
|
||||
1. **自然流畅**:描述应该像一个普通人看到图片后的自然反应,而不是生硬的机器分析。
|
||||
2. **包含关键信息**:如果详细描述中识别出了角色名称、出处,必须包含在精炼描述中。
|
||||
3. **体现情绪**:描述需要体现出表情包传达的核心情绪。
|
||||
4. **包含核心文字**:如果表情包中有文字,必须将文字完整地包含在描述中。
|
||||
5. **输出格式**:**请直接返回这句描述,不要添加任何前缀、标题、引号或多余的解释。**
|
||||
|
||||
示例:
|
||||
- 原始信息:一只猫戴着墨镜,关键词是“酷、得意”。
|
||||
- 正确输出:一只戴着黑色墨镜的猫,表情得意。
|
||||
- 详细描述:“图片的核心是一位面带微笑的少女,她被识别为游戏《崩坏3rd》中的角色爱莉希雅(Elysia)...”
|
||||
- 正确输出:游戏《崩坏3rd》中的角色爱莉希雅,她面带微笑,看起来很开心。
|
||||
"""
|
||||
refined_description, _ = await self.llm_emotion_judge.generate_response_async(
|
||||
refine_prompt, temperature=0.7, max_tokens=100
|
||||
|
||||
Reference in New Issue
Block a user