[fix]Memory extraction output the core engineering effect

This commit is contained in:
lanceyq
2026-02-09 20:12:24 +08:00
parent d4571fb75b
commit c86ccf0931
2 changed files with 128 additions and 29 deletions

View File

@@ -169,10 +169,10 @@ async def query_ontology_matched_entities(end_user_id: str, config_id: Optional[
print(f" 找到 {len(entities)} 个实体")
# 4. 分类实体场景类型通用类型未匹配
scene_matched_entities = []
general_matched_entities = []
both_matched_entities = [] # 同时匹配场景和通用类型
# 4. 互斥分类实体场景类型优先 > 通用类型 > 未匹配
# 确保: 场景实体数 + 通用实体数 + 未匹配数 = 总实体数
scene_matched_entities = [] # 匹配场景类型(含同时匹配两者的)
general_matched_entities = [] # 仅匹配通用类型(不含已归入场景的)
unmatched_entities = []
scene_type_distribution = defaultdict(list)
@@ -183,11 +183,8 @@ async def query_ontology_matched_entities(end_user_id: str, config_id: Optional[
in_scene = entity_type in scene_ontology_types
in_general = entity_type in general_ontology_types
if in_scene and in_general:
both_matched_entities.append(entity)
scene_type_distribution[entity_type].append(entity)
general_type_distribution[entity_type].append(entity)
elif in_scene:
if in_scene:
# 场景类型优先,同时匹配两者的也归入场景
scene_matched_entities.append(entity)
scene_type_distribution[entity_type].append(entity)
elif in_general:
@@ -197,9 +194,8 @@ async def query_ontology_matched_entities(end_user_id: str, config_id: Optional[
unmatched_entities.append(entity)
# 5. 输出匹配场景类型的实体
total_scene_matched = len(scene_matched_entities) + len(both_matched_entities)
print(f"\n{'='*70}")
print(f"✅ 匹配场景本体类型的实体 (共 {total_scene_matched} 个)")
print(f"✅ 匹配场景本体类型的实体 (共 {len(scene_matched_entities)} 个)")
print(f"{'='*70}")
if scene_type_distribution:
@@ -219,9 +215,8 @@ async def query_ontology_matched_entities(end_user_id: str, config_id: Optional[
print(f"\n (无匹配场景类型的实体)")
# 6. 输出匹配通用类型的实体
total_general_matched = len(general_matched_entities) + len(both_matched_entities)
print(f"\n{'='*70}")
print(f"✅ 匹配通用本体类型的实体 (共 {total_general_matched} 个)")
print(f"✅ 匹配通用本体类型的实体 (共 {len(general_matched_entities)} 个)")
print(f"{'='*70}")
if general_type_distribution:
@@ -265,7 +260,6 @@ async def query_ontology_matched_entities(end_user_id: str, config_id: Optional[
# 8. 统计摘要
total_entities = len(entities)
any_matched = total_entities - len(unmatched_entities)
print(f"\n{'='*70}")
print(f"📊 统计摘要")
@@ -276,35 +270,35 @@ async def query_ontology_matched_entities(end_user_id: str, config_id: Optional[
print(f" 场景本体类型数: {len(scene_ontology_types)}")
print(f" 通用本体类型数: {len(general_ontology_types)}")
print(f"\n 匹配率统计:")
print(f"\n 互斥分类统计 (三者之和 = 总实体数):")
print(f" {'-'*50}")
scene_rate = total_scene_matched / total_entities * 100 if total_entities > 0 else 0
general_rate = total_general_matched / total_entities * 100 if total_entities > 0 else 0
any_rate = any_matched / total_entities * 100 if total_entities > 0 else 0
scene_rate = len(scene_matched_entities) / total_entities * 100 if total_entities > 0 else 0
general_rate = len(general_matched_entities) / total_entities * 100 if total_entities > 0 else 0
unmatched_rate = len(unmatched_entities) / total_entities * 100 if total_entities > 0 else 0
print(f" 匹配场景类型: {total_scene_matched} 个 ({scene_rate:.1f}%)")
print(f" 匹配通用类型: {total_general_matched} 个 ({general_rate:.1f}%)")
print(f" 同时匹配两者: {len(both_matched_entities)} 个 ({len(both_matched_entities)/total_entities*100:.1f}%)")
print(f" 仅匹配场景类型: {len(scene_matched_entities)} 个 ({len(scene_matched_entities)/total_entities*100:.1f}%)")
print(f" 仅匹配通用类型: {len(general_matched_entities)} 个 ({len(general_matched_entities)/total_entities*100:.1f}%)")
print(f" 匹配任一类型: {any_matched} 个 ({any_rate:.1f}%)")
print(f" 匹配场景类型: {len(scene_matched_entities)} 个 ({scene_rate:.1f}%)")
print(f" 匹配通用类型: {len(general_matched_entities)} 个 ({general_rate:.1f}%)")
print(f" 未匹配任何类型: {len(unmatched_entities)} 个 ({unmatched_rate:.1f}%)")
print(f" ─────────────────────────────")
print(f" 合计: {len(scene_matched_entities)} + {len(general_matched_entities)} + {len(unmatched_entities)} = {len(scene_matched_entities) + len(general_matched_entities) + len(unmatched_entities)}")
# 9. 类型分布详情
# 9. 场景类型分布详情(全部)
if scene_type_distribution:
print(f"\n 场景类型分布 (Top 10):")
print(f"\n 场景类型分布 (全部 {len(scene_type_distribution)}):")
print(f" {'-'*50}")
sorted_scene_types = sorted(scene_type_distribution.items(), key=lambda x: len(x[1]), reverse=True)
for type_name, entities_list in sorted_scene_types[:10]:
for type_name, entities_list in sorted_scene_types:
print(f" - {type_name}: {len(entities_list)}")
print(f" 场景类型实体总数: {len(scene_matched_entities)}")
# 10. 通用类型分布详情(全部)
if general_type_distribution:
print(f"\n 通用类型分布 (Top 10):")
print(f"\n 通用类型分布 (全部 {len(general_type_distribution)}):")
print(f" {'-'*50}")
sorted_general_types = sorted(general_type_distribution.items(), key=lambda x: len(x[1]), reverse=True)
for type_name, entities_list in sorted_general_types[:10]:
for type_name, entities_list in sorted_general_types:
print(f" - {type_name}: {len(entities_list)}")
print(f" 通用类型实体总数: {len(general_matched_entities)}")
except Exception as e:
print(f"\n❌ 查询出错: {str(e)}")