Skip to content

Commit c09b142

Browse files
committed
更新关系回溯脚本
1 parent fb6de49 commit c09b142

1 file changed

Lines changed: 55 additions & 31 deletions

File tree

scripts/message_retrieval_script.py

Lines changed: 55 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)