处理关系的prompt

This commit is contained in:
meng_xi_pan
2025-04-02 02:50:48 +08:00
parent af6f23615e
commit 4cce44bced
3 changed files with 39 additions and 28 deletions

View File

@@ -7,9 +7,10 @@ from ..memory_system.Hippocampus import HippocampusManager
from ..moods.moods import MoodManager from ..moods.moods import MoodManager
from ..schedule.schedule_generator import bot_schedule from ..schedule.schedule_generator import bot_schedule
from ..config.config import global_config from ..config.config import global_config
from .utils import get_embedding, get_recent_group_detailed_plain_text from .utils import get_embedding, get_recent_group_detailed_plain_text, get_recent_group_speaker
from .chat_stream import chat_manager from .chat_stream import chat_manager
from src.common.logger import get_module_logger from src.common.logger import get_module_logger
from .relationship_manager import relationship_manager
from src.heart_flow.heartflow import heartflow from src.heart_flow.heartflow import heartflow
@@ -29,6 +30,25 @@ class PromptBuilder:
# 开始构建prompt # 开始构建prompt
# 关系
who_chat_in_group = [(chat_stream.user_info.platform,
chat_stream.user_info.user_id,
chat_stream.user_info.user_nickname)]
who_chat_in_group += get_recent_group_speaker(
stream_id,
(chat_stream.user_info.platform, chat_stream.user_info.user_id),
limit=global_config.MAX_CONTEXT_SIZE,
)
relation_prompt = ""
for person in who_chat_in_group:
relation_prompt += await relationship_manager.build_relationship_info(person)
relation_prompt_all = (
f"{relation_prompt}关系等级越大,关系越好,请分析聊天记录,"
f"根据你和说话者{sender_name}的关系和态度进行回复,明确你的立场和情感。"
)
# 心情 # 心情
mood_manager = MoodManager.get_instance() mood_manager = MoodManager.get_instance()
mood_prompt = mood_manager.get_prompt() mood_prompt = mood_manager.get_prompt()
@@ -116,7 +136,7 @@ class PromptBuilder:
{chat_talking_prompt} {chat_talking_prompt}
你刚刚脑子里在想: 你刚刚脑子里在想:
{current_mind_info} {current_mind_info}
现在"{sender_name}"说的:{message_txt}。引起了你的注意,你想要在群里发言发言或者回复这条消息。\n 现在"{sender_name}"说的:{message_txt}。引起了你的注意,你想要在群里发言发言或者回复这条消息。{relation_prompt_all}\n
你的网名叫{global_config.BOT_NICKNAME},有人也叫你{"/".join(global_config.BOT_ALIAS_NAMES)}{prompt_personality} 你的网名叫{global_config.BOT_NICKNAME},有人也叫你{"/".join(global_config.BOT_ALIAS_NAMES)}{prompt_personality}
你正在{chat_target_2},现在请你读读之前的聊天记录,然后给出日常且口语化的回复,平淡一些, 你正在{chat_target_2},现在请你读读之前的聊天记录,然后给出日常且口语化的回复,平淡一些,
尽量简短一些。{keywords_reaction_prompt}请注意把握聊天内容,不要回复的太有条理,可以有个性。{prompt_ger} 尽量简短一些。{keywords_reaction_prompt}请注意把握聊天内容,不要回复的太有条理,可以有个性。{prompt_ger}

View File

@@ -137,27 +137,22 @@ class RelationshipManager:
await person_info_manager.update_one_field(person_id, "relationship_value", old_value + value, data) await person_info_manager.update_one_field(person_id, "relationship_value", old_value + value, data)
def build_relationship_info(self, person) -> str: async def build_relationship_info(self, person) -> str:
person_id = person_info_manager.get_person_id(person.user_info.platform, person.user_info.user_id) person_id = person_info_manager.get_person_id(person[0], person[1])
relationship_value = person_info_manager.get_value(person_id, "relationship_value") relationship_value = await person_info_manager.get_value(person_id, "relationship_value")
level_num = self.calculate_level_num(relationship_value) level_num = self.calculate_level_num(relationship_value)
relationship_level = ["厌恶", "冷漠", "一般", "友好", "喜欢", "暧昧"] relationship_level = ["厌恶", "冷漠", "一般", "友好", "喜欢", "暧昧"]
relation_prompt2_list = [ relation_prompt2_list = [
"冷漠回应", "厌恶回应",
"冷淡回复", "冷淡回复",
"保持理性", "保持理性",
"愿意回复", "愿意回复",
"积极回复", "积极回复",
"无条件支持", "无条件支持",
] ]
if person.user_info.user_cardname:
return ( return (
f"你对昵称为'[({person.user_info.user_id}){person.user_info.user_nickname}]{person.user_info.user_cardname}'的用户的态度为{relationship_level[level_num]}" f"你对昵称为'({person[1]}){person[2]}'的用户的态度为{relationship_level[level_num]}"
f"回复态度为{relation_prompt2_list[level_num]},关系等级为{level_num}"
)
else:
return (
f"你对昵称为'({person.user_info.user_id}){person.user_info.user_nickname}'的用户的态度为{relationship_level[level_num]}"
f"回复态度为{relation_prompt2_list[level_num]},关系等级为{level_num}" f"回复态度为{relation_prompt2_list[level_num]},关系等级为{level_num}"
) )

View File

@@ -149,7 +149,6 @@ def get_recent_group_speaker(chat_stream_id: int, sender, limit: int = 12) -> li
db.messages.find( db.messages.find(
{"chat_id": chat_stream_id}, {"chat_id": chat_stream_id},
{ {
"chat_info": 1,
"user_info": 1, "user_info": 1,
}, },
) )
@@ -160,20 +159,17 @@ def get_recent_group_speaker(chat_stream_id: int, sender, limit: int = 12) -> li
if not recent_messages: if not recent_messages:
return [] return []
who_chat_in_group = [] # ChatStream列表 who_chat_in_group = []
duplicate_removal = []
for msg_db_data in recent_messages: for msg_db_data in recent_messages:
user_info = UserInfo.from_dict(msg_db_data["user_info"]) user_info = UserInfo.from_dict(msg_db_data["user_info"])
if ( if (
(user_info.user_id, user_info.platform) != sender (user_info.platform, user_info.user_id) != sender
and (user_info.user_id, user_info.platform) != (global_config.BOT_QQ, "qq") and user_info.user_id != global_config.BOT_QQ
and (user_info.user_id, user_info.platform) not in duplicate_removal and (user_info.platform, user_info.user_id, user_info.user_nickname) not in who_chat_in_group
and len(duplicate_removal) < 5 and len(who_chat_in_group) < 5
): # 排除重复排除消息发送者排除bot(此处bot的平台强制为了qq可能需要更改),限制加载的关系数目 ): # 排除重复排除消息发送者排除bot(此处bot的平台强制为了qq可能需要更改),限制加载的关系数目
duplicate_removal.append((user_info.user_id, user_info.platform)) who_chat_in_group.append((user_info.platform, user_info.user_id, user_info.user_nickname))
chat_info = msg_db_data.get("chat_info", {})
who_chat_in_group.append(ChatStream.from_dict(chat_info))
return who_chat_in_group return who_chat_in_group