From 94d3d0ad0556614cc9c4ea3a69fc1f1ba1522402 Mon Sep 17 00:00:00 2001
From: 114514 <2514624910@qq.com>
Date: Wed, 14 May 2025 21:01:30 +0800
Subject: [PATCH 1/3] =?UTF-8?q?sub=20mind=E5=8A=A0=E5=85=A5=E7=BB=B0?=
=?UTF-8?q?=E5=8F=B7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Legacy_HFC/heart_flow/sub_mind.py | 24 ++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
diff --git a/src/experimental/Legacy_HFC/heart_flow/sub_mind.py b/src/experimental/Legacy_HFC/heart_flow/sub_mind.py
index 34f94578..3c8fc80a 100644
--- a/src/experimental/Legacy_HFC/heart_flow/sub_mind.py
+++ b/src/experimental/Legacy_HFC/heart_flow/sub_mind.py
@@ -3,6 +3,7 @@ from src.chat.knowledge.knowledge_lib import qa_manager
from src.chat.models.utils_model import LLMRequest
from src.config.config import global_config
from src.chat.utils.chat_message_builder import get_raw_msg_before_timestamp_with_chat, build_readable_messages
+from src.plugins.group_nickname.nickname_manager import nickname_manager
import time
import re
import traceback
@@ -32,6 +33,10 @@ def init_prompt():
{prompt_personality}
+
+{nickname_info}
+
+
{extra_info}
{relation_prompt}
@@ -561,9 +566,25 @@ class SubMind:
# ---------- 5. 构建最终提示词 ----------
# --- Choose template based on chat type ---
- logger.debug(f"is_group_chat: {is_group_chat}")
+ nickname_injection_str = "" # 初始化为空字符串
+
if is_group_chat:
template_name = "sub_heartflow_prompt_before"
+
+ chat_stream = await chat_manager.get_stream(self.subheartflow_id)
+ if not chat_stream:
+ logger.error(f"{self.log_prefix} 无法获取 chat_stream,无法生成绰号信息。")
+ nickname_injection_str = "[获取群成员绰号信息失败]"
+ else:
+ message_list_for_nicknames = get_raw_msg_before_timestamp_with_chat(
+ chat_id=self.subheartflow_id,
+ timestamp=time.time(),
+ limit=global_config.observation_context_size,
+ )
+ nickname_injection_str = await nickname_manager.get_nickname_prompt_injection(
+ chat_stream, message_list_for_nicknames
+ )
+
prompt = (await global_prompt_manager.get_prompt_async(template_name)).format(
extra_info=self.structured_info_str,
prompt_personality=prompt_personality,
@@ -575,6 +596,7 @@ class SubMind:
hf_do_next=hf_do_next,
last_loop_prompt=last_loop_prompt,
cycle_info_block=cycle_info_block,
+ nickname_info=nickname_injection_str,
# chat_target_name is not used in group prompt
)
else: # Private chat
From b7886e2909d575afdd6f00a6c359ee802fdc4e49 Mon Sep 17 00:00:00 2001
From: 114514 <2514624910@qq.com>
Date: Wed, 14 May 2025 21:15:36 +0800
Subject: [PATCH 2/3] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=A6=82=E7=8E=87?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Legacy_HFC/heartflow_prompt_builder.py | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/src/experimental/Legacy_HFC/heartflow_prompt_builder.py b/src/experimental/Legacy_HFC/heartflow_prompt_builder.py
index 3994e665..a70cb032 100644
--- a/src/experimental/Legacy_HFC/heartflow_prompt_builder.py
+++ b/src/experimental/Legacy_HFC/heartflow_prompt_builder.py
@@ -87,7 +87,7 @@ def init_prompt():
- 最后一条消息是{bot_name}自己发的且无人回应{bot_name},同时{bot_name}也没有别的想要回复的消息
- 讨论不了解的专业话题,或你不知道的梗,且对{bot_name}来说似乎没那么重要
- {bot_name}发送了太多消息,且无人回复
- - (特殊情况){bot_name}的内心想法返回错误/无返回
+ - (特殊情况){bot_name}的内心想法返回错误/无返回/无想法
@@ -254,15 +254,15 @@ async def _build_prompt_focus(reason, current_mind_info, structured_info, chat_s
)
prompt_ger = ""
- if random.random() < 0.20:
- prompt_ger += "不用输出对方的网名或绰号"
+ if random.random() < 0.60:
+ prompt_ger += "**不用输出对方的网名或绰号**"
if random.random() < 0.00:
prompt_ger += "你喜欢用反问句"
reply_styles1 = [
- ("给出日常且口语化的回复,平淡一些", 0.4),
- ("给出非常简短的回复", 0.4),
- ("**给出省略主语的回复,简短**", 0.15),
+ ("给出日常且口语化的回复,平淡一些", 0.40),
+ ("给出非常简短的回复", 0.30),
+ ("**给出省略主语的回复,简短**", 0.30),
("给出带有语病的回复,朴实平淡", 0.00),
]
reply_style1_chosen = random.choices(
@@ -404,8 +404,8 @@ class PromptBuilder:
reply_styles2 = [
("不用回复的太有条理,可以有个性", 0.75), # 60%概率
("不用回复的太有条理,可以复读", 0.0), # 15%概率
- ("回复的认真一些", 0.2), # 20%概率
- ("可以回复单个表情符号", 0.05), # 5%概率
+ ("回复的认真一些", 0.25), # 20%概率
+ ("可以回复单个表情符号", 0.00), # 5%概率
]
reply_style2_chosen = random.choices(
[style[0] for style in reply_styles2], weights=[style[1] for style in reply_styles2], k=1
From 613274d52ea197f9a42ad6cb16231fe1e94c5d1a Mon Sep 17 00:00:00 2001
From: 114514 <2514624910@qq.com>
Date: Wed, 14 May 2025 21:43:51 +0800
Subject: [PATCH 3/3] =?UTF-8?q?prompt=E8=A1=A5=E4=B8=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/experimental/Legacy_HFC/heart_flow/sub_mind.py | 3 ++-
src/experimental/Legacy_HFC/heartflow_prompt_builder.py | 4 ++--
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/src/experimental/Legacy_HFC/heart_flow/sub_mind.py b/src/experimental/Legacy_HFC/heart_flow/sub_mind.py
index 3c8fc80a..037c691f 100644
--- a/src/experimental/Legacy_HFC/heart_flow/sub_mind.py
+++ b/src/experimental/Legacy_HFC/heart_flow/sub_mind.py
@@ -56,6 +56,7 @@ def init_prompt():
请仔细阅读当前聊天内容,分析讨论话题和群成员关系,分析你刚刚发言和别人对你的发言的反应,思考你要不要回复或发言。然后思考你是否需要使用函数工具。
+请特别留意对话的节奏。如果你发送消息后没有得到回应,那么在考虑发言或追问时,请务必谨慎。优先考虑是否你的上一条信息已经结束了当前话题,或者对方暂时不方便回复。除非你有非常重要且有时效性的新事情,否则避免在对方无明显回应意愿时进行追问。
思考并输出你真实的内心想法。
@@ -65,7 +66,7 @@ def init_prompt():
2. 不要分点、不要使用表情符号
3. 避免多余符号(冒号、引号、括号等)
4. 语言简洁自然,不要浮夸
-5. 如果你刚发言,并且没有人回复你,请谨慎考虑要不要继续发消息
+5. 当你发送消息后没人理你,你的内心想法应倾向于“耐心等待对方回复”或“思考是否对方正在忙”,而不是立即产生追问的想法。只有当你认为追问确实必要且不会打扰对方时,才考虑生成追问的意图。
6. 不要把注意力放在别人发的表情包上,它们只是一种辅助表达方式
7. 注意分辨群里谁在跟谁说话,你不一定是当前聊天的主角,消息中的“你”不一定指的是你({bot_name}),也可能是别人
8. 思考要不要回复或发言,如果要,必须**明确写出**你准备发送的消息的具体内容是什么
diff --git a/src/experimental/Legacy_HFC/heartflow_prompt_builder.py b/src/experimental/Legacy_HFC/heartflow_prompt_builder.py
index a70cb032..65c4f204 100644
--- a/src/experimental/Legacy_HFC/heartflow_prompt_builder.py
+++ b/src/experimental/Legacy_HFC/heartflow_prompt_builder.py
@@ -84,9 +84,9 @@ def init_prompt():
- {bot_name}的内心想法表达不想发言
- 话题似乎对{bot_name}来说无关/无聊/不感兴趣
- 现在说话不太合适了
+ - 仔细观察聊天记录。如果{bot_name}的上一条或最近几条发言没有获得任何回应,那么此时更合适的做法是不发言,等待新的对话契机(例如其他人发言)。避免让{bot_name}显得过于急切或不顾他人反应。
- 最后一条消息是{bot_name}自己发的且无人回应{bot_name},同时{bot_name}也没有别的想要回复的消息
- 讨论不了解的专业话题,或你不知道的梗,且对{bot_name}来说似乎没那么重要
- - {bot_name}发送了太多消息,且无人回复
- (特殊情况){bot_name}的内心想法返回错误/无返回/无想法
@@ -109,8 +109,8 @@ def init_prompt():
4. 对话处理:
- 如果最后一条消息是{bot_name}发的,而你还想操控{bot_name}继续发消息,请确保这是合适的(例如{bot_name}确实有合适的补充,或回应之前没回应的消息)
+ - 评估{bot_name}内心想法中的潜在发言是否会造成“自言自语”或“强行延续已冷却话题”的印象。如果群聊中其他人没有对{bot_name}的上一话题进行回应,那么继续围绕该话题继续发言通常是不明智的,建议no_reply。
- 注意话题的推进,如果没有必要,不要揪着一个话题不放。
- - 不要让{bot_name}自己和自己聊天