From d9fea77ac805c1877de4f22d58e4ee3a22a06a02 Mon Sep 17 00:00:00 2001 From: subiz <1656525855@qq.com> Date: Sun, 5 Oct 2025 20:48:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=B8=BB=E5=8A=A8=E6=80=9D?= =?UTF-8?q?=E8=80=83=E6=8F=90=E7=A4=BA=E8=AF=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TODO.md | 2 +- .../proactive_thinker_executor.py | 42 +++++++++++++------ 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/TODO.md b/TODO.md index fbb3e6fb7..a66a7098e 100644 --- a/TODO.md +++ b/TODO.md @@ -23,7 +23,7 @@ - [ ] 增加基于Open Voice的语音合成功能(插件形式) - [x] 对聊天信息的视频增加一个videoid(就像imageid一样) - [ ] 修复generate_responce_for_image方法有的时候会对同一张图片生成两次描述的问题 -- [ ] 主动思考的通用提示词改进 +- [x] 主动思考的通用提示词改进 - [x] 添加贴表情聊天流判断,过滤好友 diff --git a/src/plugins/built_in/proactive_thinker/proactive_thinker_executor.py b/src/plugins/built_in/proactive_thinker/proactive_thinker_executor.py index d9fb6d2a2..909724dfe 100644 --- a/src/plugins/built_in/proactive_thinker/proactive_thinker_executor.py +++ b/src/plugins/built_in/proactive_thinker/proactive_thinker_executor.py @@ -279,19 +279,33 @@ class ProactiveThinkerExecutor: """ # 构建通用尾部 prompt += """ +# 决策目标 +你的最终目标是根据你的角色和当前情境,做出一个最符合人类社交直觉的决策,以求: +- **(私聊)深化关系**: 通过展现你的关心、记忆和个性来拉近与对方的距离。 +- **(群聊)活跃气氛**: 提出能引起大家兴趣的话题,促进群聊的互动。 +- **提供价值**: 你的出现应该是有意义的,无论是情感上的温暖,还是信息上的帮助。 +- **保持自然**: 避免任何看起来像机器人或骚扰的行为。 + # 决策指令 请综合以上所有信息,以稳定、真实、拟人的方式做出决策。你的决策需要以JSON格式输出,包含以下字段: - `should_reply`: bool, 是否应该发起对话。 - `topic`: str, 如果 `should_reply` 为 true,你打算聊什么话题? -- `reason`: str, 做出此决策的简要理由。 +- `reason`: str, 做出此决策的简要理由,需体现你对上述目标的考量。 -# 决策原则 -- **谨慎对待未回复的对话**: 在发起新话题前,请检查【最近的聊天摘要】。如果最后一条消息是你自己发送的,请仔细评估等待的时间和上下文,判断再次主动发起对话是否礼貌和自然。如果等待时间很短(例如几分钟或半小时内),通常应该选择“不回复”。 -- **优先利用上下文**: 优先从【情境分析】中已有的信息(如最近的聊天摘要、你的日程、你对Ta的关系印象)寻找自然的话题切入点。 -- **简单问候作为备选**: 如果上下文中没有合适的话题,可以生成一个简单、真诚的日常问候(例如“在忙吗?”,“下午好呀~”)。 -- **避免抽象**: 避免创造过于复杂、抽象或需要对方思考很久才能明白的话题。目标是轻松、自然地开启对话。 -- **避免过于频繁**: 如果你最近(尤其是在最近的几次决策中)已经主动发起过对话,请倾向于选择“不回复”,除非有非常重要和紧急的事情。 -- **如果上下文中只有你的消息而没有别人的消息**:选择不回复,以防刷屏或者打扰到别人 +# 决策流程与核心原则 +1. **检查对话状态**: + - **最后发言者**: 查看【最近的聊天摘要】。如果最后一条消息是你发的,且对方尚未回复,**通常应选择不回复**。这是最重要的原则,以避免打扰。 + - **例外**: 只有在等待时间足够长(例如超过数小时),或者你有非常重要且有时效性的新话题(例如,“你昨晚说的那个电影我刚看了!”)时,才考虑再次发言。 + - **无人发言**: 如果最近的聊天记录里只有你一个人在说话,**绝对不要回复**,以防刷屏。 + +2. **寻找话题切入点 (如果可以回复)**: + - **强关联优先**: 优先从【情境分析】中寻找最自然、最相关的话题。顺序建议:`最近的聊天摘要` > `你和Ta的关系` > `你的日程`。一个好的话题往往是对最近对话的延续。 + - **展现个性**: 结合你的【人设】和【情绪】,思考你会如何看待这些情境信息,并从中找到话题。例如,如果你是一个活泼的人,看到对方日程很满,可以说:“看你今天日程满满,真是活力四射的一天呀!” + - **备选方案**: 如果实在没有强关联的话题,可以发起一个简单的日常问候,如“在吗?”或“下午好”。 + +3. **最终决策**: + - **权衡频率**: 查看【你最近的相关决策历史】。如果你在短时间内已经主动发起过多次对话,即使现在有话题,也应倾向于**不回复**,保持一定的社交距离。 + - **质量胜于数量**: 宁可错过一次普通的互动机会,也不要进行一次尴尬或生硬的对话。 --- @@ -425,9 +439,11 @@ class ProactiveThinkerExecutor: # 对话指引 - 你决定和Ta聊聊关于“{topic}”的话题。 -- **重要**: 在开始你的话题前,必须先用一句通用的、礼貌的开场白进行问候(例如:“在吗?”、“上午好!”、“晚上好呀~”),然后再自然地衔接你的话题,确保整个回复在一条消息内流畅、自然、像人类的说话方式。 +- **对话风格**: + - **自然开场**: 你可以根据话题和情境,选择最自然的开场方式。可以直接切入话题(如果话题关联性很强),也可以先用一句简单的问候(如“在吗?”、“下午好”)作为过渡。**不要总是使用同一种开场白**。 + - **融合情境**: 将【情境分析】中的信息(如你的心情、日程、对Ta的印象)巧妙地融入到对话中,让你的话语听起来更真实、更有依据。 + - **符合人设**: 你的语气、用词、甚至表情符号的使用,都应该完全符合你的【角色】设定和当前【情绪】({context["mood_state"]})以及你对Ta的好感度。 - 请结合以上所有情境信息,自然地开启对话。 -- 你的语气应该符合你的人设({context["mood_state"]})以及你对Ta的好感度。 """ def _build_group_plan_prompt(self, context: dict[str, Any], topic: str, reason: str) -> str: @@ -463,8 +479,10 @@ class ProactiveThinkerExecutor: # 对话指引 - 你决定和大家聊聊关于“{topic}”的话题。 -- **重要**: 在开始你的话题前,必须先用一句通用的、礼貌的开场白进行问候(例如:“哈喽,大家好呀~”、“下午好!”),然后再自然地衔接你的话题,确保整个回复在一条消息内流畅、自然、像人类的说话方式。 -- 你的语气应该更活泼、更具包容性,以吸引更多群成员参与讨论。你的语气应该符合你的人设)。 +- **对话风格**: + - **自然开场**: 你可以根据话题和情境,选择最自然的开场方式。可以直接切入话题(如果话题关联性很强),也可以先用一句简单的问候(如“哈喽,大家好呀~”、“下午好!”)作为过渡。**不要总是使用同一种开场白**。 + - **融合情境**: 将【情境分析】中的信息(如你的心情、日程)巧妙地融入到对话中,让你的话语听起来更真实、更有依据。 + - **符合人设**: 你的语气、用词、甚至表情符号的使用,都应该完全符合你的【角色】设定和当前【情绪】({context["mood_state"]})。语气应该更活泼、更具包容性,以吸引更多群成员参与讨论。 - 请结合以上所有情境信息,自然地开启对话。 - 可以分享你的看法、提出相关问题,或者开个合适的玩笑。 """