处理关系的prompt
This commit is contained in:
@@ -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}
|
||||||
|
|||||||
@@ -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}。"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user