@@ -568,48 +568,72 @@ async def process_segments_and_update_impression(self, user_qq: str, grouped_mes
568568 print (f"\n 开始分析用户 { target_person_name } (QQ: { user_qq } ) 的消息..." )
569569
570570 total_segments_processed = 0
571- total_memory_points = 0
572571
573- # 为每个chat_id处理消息
572+ # 收集所有分段并按时间排序
573+ all_segments = []
574+
575+ # 为每个chat_id处理消息,收集所有分段
574576 for chat_id , messages in grouped_messages .items ():
575577 first_msg = messages [0 ]
576578 group_name = first_msg .get ('chat_info_group_name' , '私聊' )
577579
578- print (f"\n 处理聊天 : { group_name } (共{ len (messages )} 条消息)" )
580+ print (f"准备聊天 : { group_name } (共{ len (messages )} 条消息)" )
579581
580582 # 将消息按50条分段
581583 message_chunks = self .split_messages_by_count (messages , 50 )
582584
583585 for i , chunk in enumerate (message_chunks ):
584- print (f" 分析第 { i + 1 } /{ len (message_chunks )} 段消息 (共{ len (chunk )} 条)" )
585-
586- # 构建名称映射
587- name_mapping = await self .build_name_mapping (chunk , target_person_id , target_person_name )
588-
589- # 构建可读消息
590- readable_messages = self .build_focus_readable_messages (
591- messages = chunk ,
592- target_person_id = target_person_id
593- )
594-
595- if not readable_messages :
596- print (f" 跳过:该段落没有目标用户的消息" )
597- continue
598-
599- # 应用名称映射
600- for original_name , mapped_name in name_mapping .items ():
601- readable_messages = readable_messages .replace (f"{ original_name } " , f"{ mapped_name } " )
602-
603- # 使用最后一条消息的时间作为段落时间
586+ # 将分段信息添加到列表中,包含分段时间用于排序
604587 segment_time = chunk [- 1 ]['time' ]
605-
606- # 更新用户印象
607- try :
608- await self .update_person_impression_from_segment (target_person_id , readable_messages , segment_time )
609- total_segments_processed += 1
610- except Exception as e :
611- logger .error (f"处理段落时出错: { e } " )
612- print (f" 错误:处理该段落时出现异常" )
588+ all_segments .append ({
589+ 'chunk' : chunk ,
590+ 'chat_id' : chat_id ,
591+ 'group_name' : group_name ,
592+ 'segment_index' : i + 1 ,
593+ 'total_segments' : len (message_chunks ),
594+ 'segment_time' : segment_time
595+ })
596+
597+ # 按时间排序所有分段
598+ all_segments .sort (key = lambda x : x ['segment_time' ])
599+
600+ print (f"\n 按时间顺序处理 { len (all_segments )} 个分段:" )
601+
602+ # 按时间顺序处理所有分段
603+ for segment_idx , segment_info in enumerate (all_segments , 1 ):
604+ chunk = segment_info ['chunk' ]
605+ group_name = segment_info ['group_name' ]
606+ segment_index = segment_info ['segment_index' ]
607+ total_segments = segment_info ['total_segments' ]
608+ segment_time = segment_info ['segment_time' ]
609+
610+ segment_time_str = datetime .fromtimestamp (segment_time ).strftime ('%Y-%m-%d %H:%M:%S' )
611+ print (f" [{ segment_idx } /{ len (all_segments )} ] { group_name } 第{ segment_index } /{ total_segments } 段 ({ segment_time_str } ) (共{ len (chunk )} 条)" )
612+
613+ # 构建名称映射
614+ name_mapping = await self .build_name_mapping (chunk , target_person_id , target_person_name )
615+
616+ # 构建可读消息
617+ readable_messages = self .build_focus_readable_messages (
618+ messages = chunk ,
619+ target_person_id = target_person_id
620+ )
621+
622+ if not readable_messages :
623+ print (f" 跳过:该段落没有目标用户的消息" )
624+ continue
625+
626+ # 应用名称映射
627+ for original_name , mapped_name in name_mapping .items ():
628+ readable_messages = readable_messages .replace (f"{ original_name } " , f"{ mapped_name } " )
629+
630+ # 更新用户印象
631+ try :
632+ await self .update_person_impression_from_segment (target_person_id , readable_messages , segment_time )
633+ total_segments_processed += 1
634+ except Exception as e :
635+ logger .error (f"处理段落时出错: { e } " )
636+ print (f" 错误:处理该段落时出现异常" )
613637
614638 # 获取最终统计
615639 final_points = await person_info_manager .get_value (target_person_id , "points" ) or []
0 commit comments