跑完索引不等于索引好用。10 个检查项里有 3 个异常,你的 GraphRAG 查询结果大概率已经在"编故事"了。
阅读提示
- 适合谁看:已经跑完索引、想知道质量怎么样的实践者
- 看完能做什么:用 10 项 Checklist 快速评估索引质量,用 Gephi 可视化知识图谱,设计 Golden QA 数据集
先给结论
- 评估分两层:索引质量(实体/关系/社区)和查询质量(答案准确性/完整性)
- 没有标准评估集时,20 组人工 QA 对就够做第一轮评估
- 实体提取准确率的算法:抽样 100 个实体,人工判断"提取是否正确",正确数/100 = 准确率
很多人跑完 GraphRAG 索引后,会直接开始查询,看到"能回答问题"就觉得 OK 了。
但"能回答"和"回答对"是两回事。你问"Scrooge 是谁",它给了一个看起来合理的答案——但这个答案是基于正确的实体关系生成的,还是基于错误的实体消歧拼凑出来的?
不评估就不知道。而 GraphRAG 的索引质量直接影响查询质量——实体提取不准确,后面所有环节都是错的。
这篇就讲清楚:怎么评估索引质量,怎么可视化知识图谱,没有标准评估集时怎么快速做人工评估。
01 先看全局:评估体系的两大维度
GraphRAG 的评估分两个维度:索引质量和查询质量。两者缺一不可。
图 1|评估体系全景图
索引质量评估关注的是"图谱本身建得好不好":
- 实体提取准确率:LLM 从文本中提取的实体是否正确?有没有漏提或多提?
- 关系质量:实体之间的关系是否正确?权重是否合理?
- 社区划分合理性:Leiden 聚类的结果是否有意义?社区主题是否清晰?
- 描述完整性:实体和关系的描述是否充分?能否支撑查询时的上下文组装?
查询质量评估关注的是"基于图谱的回答好不好":
- 答案准确性:答案是否正确?
- 答案完整性:是否遗漏了关键信息?
- 答案相关性:是否回答了用户的问题,而不是答非所问?
- 可追溯性:答案能否追溯到源文档?
02 索引质量:怎么快速检查
跑完索引后,output/目录下会生成一系列 parquet 文件。这些文件就是你评估索引质量的数据来源。
代码 1
import pandas as pd# 读取索引输出entities = pd.read_parquet("output/entities.parquet")relationships = pd.read_parquet("output/relationships.parquet")communities = pd.read_parquet("output/communities.parquet")community_reports = pd.read_parquet("output/community_reports.parquet")# 快速统计print(f"实体数量: {len(entities)}")print(f"关系数量: {len(relationships)}")print(f"社区数量: {len(communities)}")print(f"社区报告数量: {len(community_reports)}")# 实体类型分布print(f"\n实体类型分布:")print(entities['type'].value_counts())# 关系密度density = len(relationships) / len(entities)print(f"\n关系密度 (edges/nodes): {density:.2f}")# 社区层级深度print(f"\n社区层级分布:")print(communities['level'].value_counts().sort_index())关键指标的正常范围:
| 指标 | 正常范围 | 异常信号 |
|---|---|---|
| 实体数量 | 文档数 × 5~20 | 过少:prompt 不够好;过多:噪声大 |
| 关系密度 | 1.5~4.0 | <1.0:图太稀疏;>6.0:噪声关系多 |
| 社区层级 | 2~5 层 | 只有 1 层:聚类失败;>8 层:过度分裂 |
| 实体类型 | 4 种类型均有覆盖 | 单一类型 >90%:类型定义有问题 |
03 实体提取准确率怎么算
这是最核心的评估指标。没有标准答案时,用"人工抽样 + 判断"的方法。
方法:抽样 100 个实体,逐一判断
# 随机抽样 100 个实体sample = entities.sample(100, random_state=42)# 人工判断每个实体:# 1. 这个实体是否真实存在?(正确提取)# 2. 实体类型是否正确?# 3. 描述是否准确?# 计算准确率correct_count = 85 # 假设 85 个正确accuracy = correct_count / 100print(f"实体提取准确率: {accuracy:.0%}")经验判断:准确率 >85% 可以接受,>90% 算好,<80% 需要调优 prompt。
LLM-as-Judge 方法(更高效):
用 GPT-4o 做自动评估——把实体名称、类型、描述和源文本一起发给 LLM,让它判断"提取是否正确"。
judge_prompt = f"""请判断以下实体提取是否正确。实体名称: {entity_name}实体类型: {entity_type}实体描述: {entity_description}源文本片段: {source_text}判断标准:1. 实体是否真实存在于源文本中?2. 类型是否正确?3. 描述是否准确?回答: 正确/不正确,原因: ..."""这种方法比纯人工快 10 倍,但可能会有误判。建议先用人工评估 20 个,校准 LLM 的判断标准,再用 LLM 批量评估。
04 社区划分质量怎么判断
社区划分是 GraphRAG 的核心机制。划分不好,Global Search 的回答质量会直接崩。
自动评估:模块度(Modularity)
模块度衡量社区内部连接密度 vs 社区间连接密度。值在 -1 到 1 之间,>0.3 算合格,>0.5 算好。
import networkx as nx# 从 relationships 构建图G = nx.Graph()for _, row in relationships.iterrows(): G.add_edge(row['source'], row['target'], weight=row['weight'])# 需要社区 ID 映射# 读取 communities.parquet 获取每个实体的社区归属# 然后计算模块度人工评估:抽样读社区报告
# 随机抽样 5 份社区报告sample_reports = community_reports.sample(5)for _, report in sample_reports.iterrows(): print(f"社区 {report['community']}: {report['title']}") print(f"摘要: {report['summary']}") print(f"---")判断标准:
- 报告有没有明确的主题?
- 主题是否和成员实体相关?
- 关键发现是否有价值?
如果社区报告主题模糊、内容空洞,说明社区划分有问题——要么是 Leiden 的 resolution 参数不对,要么是实体提取质量差导致图结构有问题。
05 知识图谱可视化:用 Gephi 看图谱
GraphRAG 支持导出 GraphML 格式的图谱文件,可以直接用 Gephi 打开。
代码 2
# settings.yaml 中启用 GraphML 导出snapshots: graphml: true跑完索引后,output/graph.graphml就是图谱文件。用 Gephi 打开后的操作步骤:
- 导入:File → Open → 选择 graph.graphml
- 运行 Leiden:Statistics → Leiden Algorithm → Resolution=1
- 按社区着色:Appearance → Nodes → Partition → Cluster
- 按度数调整大小:Appearance → Nodes → Ranking → Degree → Min=10, Max=150
- 布局:先用 OpenORD(Liquid=50, Expansion=50),再用 ForceAtlas2(Scaling=15, Prevent Overlap=true)
可视化能帮你直观发现几个问题:
- 孤立节点:大量孤立节点说明实体提取有噪声
- 社区大小不均:一个社区特别大、其他特别小,说明聚类参数需要调
- 关系密度不均:某些区域特别密集,某些特别稀疏,说明实体提取不一致
06 查询质量评估:Golden QA 方法
评估查询质量最靠谱的方法是准备 Golden QA 数据集——一组标准问答对。
怎么快速构建 Golden QA
不需要大规模标注。20-50 组就够做第一轮评估:
- 从文档中手动提取 10 个全局问题:适合 Global Search
- “这些文档的主要主题是什么?”
- “文档中提到了哪些关键人物?”
- 从文档中手动提取 10 个实体问题:适合 Local Search
- “X 是谁?”
- “X 和 Y 什么关系?”
- 写标准答案:基于文档内容,写出你认为正确的答案
- 运行查询并打分
# 评估模板evaluation_template = """问题: {question}标准答案: {golden_answer}系统回答: {system_answer}请按以下维度打分(1-5分):1. 准确性: 答案是否正确?2. 完整性: 是否遗漏关键信息?3. 相关性: 是否回答了问题?4. 可追溯性: 答案能否在源文档中找到依据?评分:"""没有标准答案时的快速评估法
如果连标准答案都懒得写,至少做"合理性检查":
- 问 5 个你知道答案的问题,看系统回答对不对
- 问 3 个全局问题,看答案是否有明显遗漏
- 问 2 个实体关系问题,看关系是否正确
5/5 正确 → 质量不错 3-4/5 正确 → 需要调优 ❤️/5 正确 → 索引质量有问题,先修索引
07 评估与调优的闭环
图 2|评估与调优的完整闭环流程
评估不是一次性工作,而是一个闭环:
- 准备 Golden QA:20-50 组问答对
- 运行查询:分别跑 Global 和 Local
- 人工打分:准确性/完整性/相关性/可追溯性
- 计算指标:准确率/召回率/F1
- 定位问题:是实体抽取问题?社区划分问题?还是查询路由问题?
- 调优:改 prompt、改 chunk_size、改 max_gleanings
- 重新索引
- 再次评估
- 达标?是→完成;否→继续迭代
停止条件:连续 3 轮评估指标无改善,停止迭代。可能已经到了当前配置的上限,需要换思路(比如换模型、换数据源、重新设计 entity_types)。
08 最小评估 Checklist
图 3|最小评估 Checklist
这张 Checklist 是评估 GraphRAG 索引质量的最小集。每项逐一检查,绿色=通过,红色=未通过。至少 7/10 通过才建议上生产。
最容易被忽视的 3 项:
- 实体消歧效果:同名实体是否被正确区分?这直接影响 Local Search 的准确性
- 社区报告质量:社区报告是 Global Search 的核心输入,报告质量差 = Global Search 废了
- 关系密度:密度太高(>6.0)说明噪声关系多,密度太低(<1.0)说明图太稀疏
09 什么时候该停止调优
不是所有问题都能通过调优解决。以下情况建议停止:
- 连续 3 轮指标无改善:当前配置可能已经到上限
- **实体提取准确率 <70%**:prompt 需要根本性重写,不是微调能解决的
- 社区报告质量普遍差:可能是文档本身信息密度太低,不适合用 GraphRAG
- 成本已经超预算 2 倍:继续调优不划算,考虑用传统 RAG 替代
3 问判断法
- 你的实体提取准确率是否 >85%?
- 你的社区报告是否有明确主题?
- 你的 Golden QA 测试中,5/5 回答是否基本正确?
如果 3 个问题大多是否定的,先修索引再考虑查询优化。
决策帮助
- 如果你刚跑完索引:先用本文的代码做快速统计,看实体数量、关系密度、社区层级是否在正常范围
- 如果你准备上生产:用 10 项 Checklist 逐一检查,至少 7/10 通过
- 如果你最关心查询质量:先构建 20 组 Golden QA,用人工打分做第一轮评估
- 如果你只能先做一步:抽样 100 个实体算准确率,这一个指标就能告诉你索引质量的下限
学AI大模型的正确顺序,千万不要搞错了
🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!
有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!
就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋
📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇
学习路线:
✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经
以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!
我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~