From 16a0717c6e8fff021b2d7c20ec5ec456c6ae5a7d Mon Sep 17 00:00:00 2001 From: SengokuCola <1026294844@qq.com> Date: Thu, 5 Jun 2025 13:25:56 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E4=BF=AE=E5=A4=8D=E5=A5=BD?= =?UTF-8?q?=E6=84=9Fprompt=E6=B2=A1=E5=90=AF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../info_processors/relationship_processor.py | 22 +++++-------------- .../info_processors/self_processor.py | 6 ----- .../info_processors/tool_processor.py | 9 -------- .../focus_chat/planners/planner_simple.py | 5 ----- .../observation/chatting_observation.py | 3 ++- src/chat/normal_chat/normal_prompt.py | 3 +-- src/chat/utils/chat_message_builder.py | 5 ++--- src/person_info/impression_update_task.py | 16 +++++++++++--- src/person_info/relationship_manager.py | 20 +++++++++++------ 9 files changed, 37 insertions(+), 52 deletions(-) diff --git a/src/chat/focus_chat/info_processors/relationship_processor.py b/src/chat/focus_chat/info_processors/relationship_processor.py index 005561923..19c31f99c 100644 --- a/src/chat/focus_chat/info_processors/relationship_processor.py +++ b/src/chat/focus_chat/info_processors/relationship_processor.py @@ -29,7 +29,7 @@ def init_prompt(): 现在请你根据现有的信息,总结你和群里的人的关系 1. 当聊天记录中提到你时,请输出你和这个人之间的关系 2. 当聊天记录中提到其他人时,请输出你和这个人之间的关系 -3. 如果没有特别需要提及的关系,请输出“没有特别在意的人” +3. 如果没有特别需要提及的关系,就不用输出这个人 输出内容平淡一些,说中文。 请注意不要输出多余内容(包括前后缀,括号(),表情包,at或 @等 )。只输出关系内容,记得明确说明这是你的关系。 @@ -93,18 +93,6 @@ class RelationshipProcessor(BaseProcessor): tuple: (current_mind, past_mind, prompt) 当前想法、过去的想法列表和使用的prompt """ - for observation in observations: - if isinstance(observation, ChattingObservation): - is_group_chat = observation.is_group_chat - chat_target_info = observation.chat_target_info - chat_target_name = "对方" # 私聊默认名称 - person_list = observation.person_list - - relation_prompt = "" - for person in person_list: - if len(person) >= 3 and person[0] and person[1]: - relation_prompt += await relationship_manager.build_relationship_info(person, is_id=True) - if observations is None: observations = [] for observation in observations: @@ -131,9 +119,11 @@ class RelationshipProcessor(BaseProcessor): relation_prompt_init = "你对群聊里的人的印象是:\n" else: relation_prompt_init = "你对对方的印象是:\n" - + + relation_prompt = "" for person in person_list: - relation_prompt += await relationship_manager.build_relationship_info(person, is_id=True) + relation_prompt += f"{await relationship_manager.build_relationship_info(person, is_id=True)}\n" + if relation_prompt: relation_prompt = relation_prompt_init + relation_prompt else: @@ -162,7 +152,7 @@ class RelationshipProcessor(BaseProcessor): if content == "None": content = "" # 记录初步思考结果 - logger.debug(f"{self.log_prefix} 关系识别prompt: \n{prompt}\n") + logger.info(f"{self.log_prefix} 关系识别prompt: \n{prompt}\n") logger.info(f"{self.log_prefix} 关系识别: {content}") return content diff --git a/src/chat/focus_chat/info_processors/self_processor.py b/src/chat/focus_chat/info_processors/self_processor.py index e993c4f48..8c610e0f4 100644 --- a/src/chat/focus_chat/info_processors/self_processor.py +++ b/src/chat/focus_chat/info_processors/self_processor.py @@ -104,12 +104,6 @@ class SelfProcessor(BaseProcessor): chat_target_name = "对方" # 私聊默认名称 person_list = observation.person_list - - relation_prompt = "" - for person in person_list: - if len(person) >= 3 and person[0] and person[1]: - relation_prompt += await relationship_manager.build_relationship_info(person, is_id=True) - if observations is None: observations = [] for observation in observations: diff --git a/src/chat/focus_chat/info_processors/tool_processor.py b/src/chat/focus_chat/info_processors/tool_processor.py index 55ab7d0eb..49de65fbb 100644 --- a/src/chat/focus_chat/info_processors/tool_processor.py +++ b/src/chat/focus_chat/info_processors/tool_processor.py @@ -128,15 +128,6 @@ class ToolProcessor(BaseProcessor): for running_memory in running_memorys: memory_str += f"{running_memory['topic']}: {running_memory['content']}\n" - # 构建关系信息 - relation_prompt = "【关系信息】\n" - for person in person_list: - relation_prompt += await relationship_manager.build_relationship_info(person, is_id=True) - - # 获取个性信息 - - # prompt_personality = individuality.get_prompt(x_person=2, level=2) - # 获取时间信息 time_now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) diff --git a/src/chat/focus_chat/planners/planner_simple.py b/src/chat/focus_chat/planners/planner_simple.py index ba123e639..48bb21d3a 100644 --- a/src/chat/focus_chat/planners/planner_simple.py +++ b/src/chat/focus_chat/planners/planner_simple.py @@ -7,7 +7,6 @@ from src.config.config import global_config from src.chat.focus_chat.info.info_base import InfoBase from src.chat.focus_chat.info.obs_info import ObsInfo from src.chat.focus_chat.info.cycle_info import CycleInfo -from src.chat.focus_chat.info.mind_info import MindInfo from src.chat.focus_chat.info.action_info import ActionInfo from src.chat.focus_chat.info.structured_info import StructuredInfo from src.chat.focus_chat.info.self_info import SelfInfo @@ -129,8 +128,6 @@ class ActionPlanner(BasePlanner): observed_messages_str = info.get_talking_message_str_truncate() chat_type = info.get_chat_type() is_group_chat = chat_type == "group" - elif isinstance(info, MindInfo): - current_mind = info.get_current_mind() elif isinstance(info, CycleInfo): cycle_info = info.get_observe_info() elif isinstance(info, SelfInfo): @@ -171,7 +168,6 @@ class ActionPlanner(BasePlanner): is_group_chat=is_group_chat, # <-- Pass HFC state chat_target_info=None, observed_messages_str=observed_messages_str, # <-- Pass local variable - current_mind=current_mind, # <-- Pass argument structured_info=structured_info, # <-- Pass SubMind info current_available_actions=current_available_actions, # <-- Pass determined actions cycle_info=cycle_info, # <-- Pass cycle info @@ -284,7 +280,6 @@ class ActionPlanner(BasePlanner): is_group_chat: bool, # Now passed as argument chat_target_info: Optional[dict], # Now passed as argument observed_messages_str: str, - current_mind: Optional[str], structured_info: Optional[str], current_available_actions: Dict[str, ActionInfo], cycle_info: Optional[str], diff --git a/src/chat/heart_flow/observation/chatting_observation.py b/src/chat/heart_flow/observation/chatting_observation.py index e7bfd2260..83ec21997 100644 --- a/src/chat/heart_flow/observation/chatting_observation.py +++ b/src/chat/heart_flow/observation/chatting_observation.py @@ -278,8 +278,9 @@ class ChattingObservation(Observation): show_actions=True, ) # print(f"构建中:self.talking_message_str_truncate: {self.talking_message_str_truncate}") - + self.person_list = await get_person_id_list(self.talking_message) + # print(f"构建中:self.person_list: {self.person_list}") logger.trace( diff --git a/src/chat/normal_chat/normal_prompt.py b/src/chat/normal_chat/normal_prompt.py index 422da67fb..561368c17 100644 --- a/src/chat/normal_chat/normal_prompt.py +++ b/src/chat/normal_chat/normal_prompt.py @@ -114,8 +114,7 @@ class PromptBuilder: relation_prompt = "" for person in who_chat_in_group: - if len(person) >= 3 and person[0] and person[1]: - relation_prompt += await relationship_manager.build_relationship_info(person) + relation_prompt += await relationship_manager.build_relationship_info(person) mood_prompt = mood_manager.get_mood_prompt() diff --git a/src/chat/utils/chat_message_builder.py b/src/chat/utils/chat_message_builder.py index 07a2b6188..782b7500d 100644 --- a/src/chat/utils/chat_message_builder.py +++ b/src/chat/utils/chat_message_builder.py @@ -673,9 +673,8 @@ async def get_person_id_list(messages: List[Dict[str, Any]]) -> List[str]: person_ids_set = set() # 使用集合来自动去重 for msg in messages: - user_info = msg.get("user_info", {}) - platform = user_info.get("platform") - user_id = user_info.get("user_id") + platform = msg.get("user_platform") + user_id = msg.get("user_id") # 检查必要信息是否存在 且 不是机器人自己 if not all([platform, user_id]) or user_id == global_config.bot.qq_account: diff --git a/src/person_info/impression_update_task.py b/src/person_info/impression_update_task.py index ffb691719..52e09725b 100644 --- a/src/person_info/impression_update_task.py +++ b/src/person_info/impression_update_task.py @@ -22,9 +22,19 @@ class ImpressionUpdateTask(AsyncTask): async def run(self): try: - # 获取最近10分钟的消息 - current_time = int(time.time()) - start_time = current_time - 6000 # 10分钟前 + if random.random() < 0.5: + # 获取最近10分钟的消息 + current_time = int(time.time()) + start_time = current_time - 6000 # 10分钟前 + # 取一个月内任意一个小时的时间段 + else: + now = int(time.time()) + # 30天前的时间戳 + month_ago = now - 30 * 24 * 60 * 60 + # 随机选择一个小时的起点 + random_start = random.randint(month_ago, now - 3600) + start_time = random_start + current_time = random_start + 3600 # 一个小时后 # 获取所有消息 messages = get_raw_msg_by_timestamp(timestamp_start=start_time, timestamp_end=current_time, limit=100) diff --git a/src/person_info/relationship_manager.py b/src/person_info/relationship_manager.py index 21f5c63bc..331e377b4 100644 --- a/src/person_info/relationship_manager.py +++ b/src/person_info/relationship_manager.py @@ -133,6 +133,7 @@ class RelationshipManager: gender_list = json.loads(gender) gender = random.choice(gender_list) except json.JSONDecodeError: + logger.error(f"性别解析错误: {gender}") pass if gender and "女" in gender: @@ -146,34 +147,39 @@ class RelationshipManager: nickname_str = await person_info_manager.get_value(person_id, "nickname") platform = await person_info_manager.get_value(person_id, "platform") - relation_prompt = f"你认识 {person_name} ,{gender_prompt}在{platform}上的昵称是{nickname_str}。你对{gender_prompt}的印象是" - + relation_prompt = f"'{person_name}' ,{gender_prompt}在{platform}上的昵称是{nickname_str}。" + # person_impression = await person_info_manager.get_value(person_id, "person_impression") # if person_impression: # relation_prompt += f"你对ta的印象是:{person_impression}。" traits = await person_info_manager.get_value(person_id, "traits") + gender = await person_info_manager.get_value(person_id, "gender") + relation = await person_info_manager.get_value(person_id, "relation") + identity = await person_info_manager.get_value(person_id, "identity") + meme = await person_info_manager.get_value(person_id, "meme") + + if traits or gender or relation or identity or meme: + relation_prompt += f"你对{gender_prompt}的印象是:" + if traits: relation_prompt += f"{gender_prompt}的性格特征是:{traits}。" - gender = await person_info_manager.get_value(person_id, "gender") if gender: relation_prompt += f"{gender_prompt}的性别是:{gender}。" - relation = await person_info_manager.get_value(person_id, "relation") + if relation: relation_prompt += f"你与{gender_prompt}的关系是:{relation}。" - identity = await person_info_manager.get_value(person_id, "identity") if identity: relation_prompt += f"{gender_prompt}的身份是:{identity}。" - meme = await person_info_manager.get_value(person_id, "meme") if meme: relation_prompt += f"你与{gender_prompt}之间的梗是:{meme}。" - print(f"relation_prompt: {relation_prompt}") + # print(f"relation_prompt: {relation_prompt}") return relation_prompt async def update_person_impression(self, person_id, chat_id, reason, timestamp):