feat(proactive-thinking): 优化提示词以生成更具情境感知和人性化的主动互动
本次更新重构了主动思维执行器的核心提示词,旨在显著提升AI主动发起互动的质量,使其更自然、更有同理心,并与聊天上下文更紧密地结合。 主要改进包括: - 将单一的“抛出话题” (`throw_topic`) 行动升级为分层次的“有目的的互动”模型。 - 建立了新的互动优先级: 1. **延续约定或提醒** (最高优先级) 2. **展现真诚的关心** 3. **开启新话题** (最低优先级) - 增加了获取的聊天记录上下文数量(从20条增至40条),为AI提供更全面的决策依据。 - 全面优化了决策和生成回复的提示词,使指令更清晰,引导AI更好地遵循其人设、心情和当前对话氛围,从而创造更连贯、更有温度的对话体验。
This commit is contained in:
@@ -66,7 +66,7 @@ class ProactiveThinkingPlanner:
|
||||
# 2. 获取最近的聊天记录
|
||||
recent_messages = await message_api.get_recent_messages(
|
||||
chat_id=stream_id,
|
||||
limit=20,
|
||||
limit=40,
|
||||
limit_mode="latest",
|
||||
hours=24
|
||||
)
|
||||
@@ -217,10 +217,10 @@ class ProactiveThinkingPlanner:
|
||||
if last_topic:
|
||||
last_decision_text += f"\n- 话题: {last_topic}"
|
||||
|
||||
return f"""你是一个有着独特个性的AI助手。你的人设是:
|
||||
return f"""你的人设是:
|
||||
{context['bot_personality']}
|
||||
|
||||
现在是 {context['current_time']},你正在考虑是否要主动在 "{context['stream_name']}" 中说些什么。
|
||||
现在是 {context['current_time']},你正在考虑是否要在与 "{context['stream_name']}" 的对话中主动说些什么。
|
||||
|
||||
【你当前的心情】
|
||||
{context.get('current_mood', '感觉很平静')}
|
||||
@@ -235,37 +235,37 @@ class ProactiveThinkingPlanner:
|
||||
【最近的聊天记录】
|
||||
{context['recent_chat_history']}
|
||||
|
||||
请根据以上信息(包括你的心情和上次决策),决定你现在应该做什么:
|
||||
请根据以上信息,决定你现在应该做什么:
|
||||
|
||||
**选项1:什么都不做 (do_nothing)**
|
||||
- 适用场景:现在可能是休息时间、工作时间,或者气氛不适合说话
|
||||
- 也可能是:最近聊天很活跃不需要你主动、没什么特别想说的、此时说话会显得突兀
|
||||
- 心情影响:如果心情不好(如生气、难过),可能更倾向于保持沉默
|
||||
- 适用场景:气氛不适合说话、最近对话很活跃、没什么特别想说的、或者此时说话会显得突兀。
|
||||
- 心情影响:如果心情不好(如生气、难过),可能更倾向于保持沉默。
|
||||
|
||||
**选项2:简单冒个泡 (simple_bubble)**
|
||||
- 适用场景:群里有点冷清,你想引起注意或活跃气氛
|
||||
- 方式:简单问个好、发个表情、说句无关紧要的话,没有深意,就是刷个存在感
|
||||
- 心情影响:心情好时可能更活跃;心情不好时也可能需要倾诉或找人陪伴
|
||||
- 适用场景:对话有些冷清,你想缓和气氛或开启新的互动。
|
||||
- 方式:说一句轻松随意的话,旨在建立或维持连接。
|
||||
- 心情影响:心情会影响你冒泡的方式和内容。
|
||||
|
||||
**选项3:抛出一个话题 (throw_topic)**
|
||||
- 适用场景:历史消息中有未讨论完的话题、你有自己的想法、或者想深入聊某个主题
|
||||
- 方式:明确提出一个话题,希望得到回应和讨论
|
||||
- 心情影响:心情会影响你想聊的话题类型和语气
|
||||
**选项3:发起一次有目的的互动 (throw_topic)**
|
||||
- 适用场景:你想延续对话、表达关心、或深入讨论某个具体话题。
|
||||
- **【互动类型1:延续约定或提醒】(最高优先级)**:检查最近的聊天记录,是否存在可以延续的互动。例如,如果昨晚的最后一条消息是“晚安”,现在是早上,一个“早安”的回应是绝佳的选择。如果之前提到过某个约定(如“待会聊”),现在可以主动跟进。
|
||||
- **【互动类型2:展现真诚的关心】(次高优先级)**:如果不存在可延续的约定,请仔细阅读聊天记录,寻找对方提及的个人状况(如天气、出行、身体、情绪、工作学习等),并主动表达关心。
|
||||
- **【互动类型3:开启新话题】**:当以上两点都不适用时,可以考虑开启一个你感兴趣的新话题。
|
||||
- 心情影响:心情会影响你想发起互动的方式和内容。
|
||||
|
||||
请以JSON格式回复你的决策:
|
||||
{{
|
||||
"action": "do_nothing" | "simple_bubble" | "throw_topic",
|
||||
"reasoning": "你的决策理由,说明为什么选择这个行动(要结合你的心情和上次决策考虑)",
|
||||
"topic": "(仅当action=throw_topic时填写)你想抛出的具体话题"
|
||||
"reasoning": "你的决策理由(请结合你的心情、聊天环境和对话历史进行分析)",
|
||||
"topic": "(仅当action=throw_topic时填写)你的互动意图(如:回应晚安并说早安、关心对方的考试情况、讨论新游戏)"
|
||||
}}
|
||||
|
||||
注意:
|
||||
1. 如果最近聊天很活跃(不到1小时),倾向于选择 do_nothing
|
||||
2. 如果你对这个环境兴趣不高(<0.4),倾向于选择 do_nothing 或 simple_bubble
|
||||
3. 考虑你的心情:心情会影响你的行动倾向和表达方式
|
||||
4. 参考上次决策:避免重复相同的话题,也可以根据上次效果调整策略
|
||||
3. 只有在真的有话题想聊时才选择 throw_topic
|
||||
4. 符合你的人设,不要太过热情或冷淡
|
||||
1. 兴趣度较低(<0.4)时或者最近聊天很活跃(不到1小时),倾向于 `do_nothing` 或 `simple_bubble`。
|
||||
2. 你的心情会影响你的行动倾向和表达方式。
|
||||
3. 参考上次决策,避免重复,并可根据上次的互动效果调整策略。
|
||||
4. 只有在真的有感而发时才选择 `throw_topic`。
|
||||
5. 保持你的人设,确保行为一致性。
|
||||
"""
|
||||
|
||||
async def generate_reply(
|
||||
@@ -370,10 +370,10 @@ class ProactiveThinkingPlanner:
|
||||
)
|
||||
|
||||
if action == "simple_bubble":
|
||||
return f"""你是一个有着独特个性的AI助手。你的人设是:
|
||||
return f"""你的人设是:
|
||||
{context['bot_personality']}
|
||||
|
||||
现在是 {context['current_time']},你决定在 "{context['stream_name']}" 中简单冒个泡。
|
||||
距离上次对话已经有一段时间了,你决定主动说些什么,轻松地开启新的互动。
|
||||
|
||||
【你当前的心情】
|
||||
{context.get('current_mood', '感觉很平静')}
|
||||
@@ -385,21 +385,21 @@ class ProactiveThinkingPlanner:
|
||||
【最近的聊天记录】
|
||||
{context['recent_chat_history']}
|
||||
{expression_habits}
|
||||
请生成一条简短的消息,用于水群。要求:
|
||||
1. 非常简短(5-15字)
|
||||
2. 轻松随意,不要有明确的话题或问题
|
||||
3. 可以是:问候、表达心情、随口一句话
|
||||
4. 符合你的人设和当前聊天风格
|
||||
5. **你的心情应该影响消息的内容和语气**(比如心情好时可能更活泼,心情不好时可能更低落)
|
||||
6. 如果有表达方式参考,在合适时自然使用
|
||||
7. 合理参考历史记录
|
||||
请生成一条简短的消息,用于水群。
|
||||
【要求】
|
||||
1. 风格简短随意(5-20字)
|
||||
2. 不要提出明确的话题或问题,可以是问候、表达心情或一句随口的话。
|
||||
3. 符合你的人设和当前聊天风格。
|
||||
4. **你的心情应该影响消息的内容和语气**。
|
||||
5. 如果有表达方式参考,在合适时自然使用。
|
||||
6. 合理参考历史记录。
|
||||
直接输出消息内容,不要解释:"""
|
||||
|
||||
else: # throw_topic
|
||||
return f"""你是一个有着独特个性的AI助手。你的人设是:
|
||||
return f"""你的人设是:
|
||||
{context['bot_personality']}
|
||||
|
||||
现在是 {context['current_time']},你决定在 "{context['stream_name']}" 中抛出一个话题。
|
||||
现在是 {context['current_time']},你决定在与 "{context['stream_name']}" 的对话中主动发起一次互动。
|
||||
|
||||
【你当前的心情】
|
||||
{context.get('current_mood', '感觉很平静')}
|
||||
@@ -412,17 +412,22 @@ class ProactiveThinkingPlanner:
|
||||
【最近的聊天记录】
|
||||
{context['recent_chat_history']}
|
||||
|
||||
【你想抛出的话题】
|
||||
【你的互动意图】
|
||||
{topic}
|
||||
{expression_habits}
|
||||
请根据这个话题生成一条消息,要求:
|
||||
1. 明确提出话题,引导讨论
|
||||
2. 长度适中(20-50字)
|
||||
3. 自然地引入话题,不要生硬
|
||||
4. 可以结合最近的聊天记录
|
||||
5. 符合你的人设和当前聊天风格
|
||||
6. **你的心情应该影响话题的选择和表达方式**(比如心情好时可能更积极,心情不好时可能需要倾诉或寻求安慰)
|
||||
7. 如果有表达方式参考,在合适时自然使用
|
||||
【构思指南】
|
||||
请根据你的互动意图,生成一条有温度的消息。
|
||||
- 如果意图是**延续约定**(如回应“晚安”),请直接生成对应的问候。
|
||||
- 如果意图是**表达关心**(如跟进对方提到的事),请生成自然、真诚的关心话语。
|
||||
- 如果意图是**开启新话题**,请自然地引入话题。
|
||||
|
||||
请根据这个意图,生成一条消息,要求:
|
||||
1. 自然地引入话题或表达关心。
|
||||
2. 长度适中(20-50字)。
|
||||
3. 可以结合最近的聊天记录,使对话更连贯。
|
||||
4. 符合你的人设和当前聊天风格。
|
||||
5. **你的心情会影响你的表达方式**。
|
||||
6. 如果有表达方式参考,在合适时自然使用。
|
||||
|
||||
直接输出消息内容,不要解释:"""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user