本文档介绍了 RAGFlow 的 GraphRAG 系统,该系统从文档中提取知识图谱,以实现基于图谱的检索和推理。知识图谱集成与传统的向量搜索并行运行,通过实体关系和社区结构来增强文档理解。
有关查询处理和检索机制的信息,请参阅 查询处理。有关可视化代理工作流系统的详细信息,请参阅 代理工作流系统。
知识图谱集成系统通过实体提取、关系映射和社区检测,将文档内容转化为结构化的图谱表示。该系统支持两种提取方法,并与更广泛的 RAG 管道集成。
来源: graphrag/general/index.py41-123 graphrag/utils.py1-617 graphrag/general/extractor.py1-247
系统通过 kb_parser_config.graphrag.method 设置提供两种提取方法。
轻量级方法使用基于 LightRAG 的简化提示,通过更少的 LLM 调用实现更快的处理。
来源: graphrag/light/graph_extractor.py27-125 graphrag/light/graph_prompt.py8-255
通用方法遵循 Microsoft GraphRAG 模式,经过多轮信息提取和结构化实体类型验证。
来源: graphrag/general/graph_extractor.py34-152 graphrag/general/graph_prompt.py8-124
Extractor 基类通过并行处理和合并功能处理实体和关系提取。
| 组件 | 功能 | 目的 |
|---|---|---|
handle_single_entity_extraction() | 解析实体记录 | 验证并结构化实体数据 |
handle_single_relationship_extraction() | 解析关系记录 | 创建带有权重的关系对象 |
_merge_nodes() | 合并实体 | 合并重复的实体描述 |
_merge_edges() | 合并关系 | 聚合关系权重和关键词 |
来源: graphrag/general/extractor.py36-247 graphrag/utils.py233-277
EntityResolution 类使用语义相似度和编辑距离度量来合并相似实体,以减少图谱冗余。
来源: graphrag/entity_resolution.py44-193 graphrag/entity_resolution_prompt.py
系统使用 Leiden 算法识别知识图谱中的社区,并生成详细的社区报告。
来源: graphrag/general/community_reports_extractor.py33-155 graphrag/general/leiden.py95-142 graphrag/general/community_report_prompt.py8-158
知识图谱存储在 Elasticsearch 中,具有专用的字段映射,可在查询处理期间高效检索。
| 字段名 | 类型 | 目的 |
|---|---|---|
knowledge_graph_kwd | 关键字 | 标识符:“entity”, “relation”, “graph”, “subgraph”, “community_report” |
entity_kwd | 关键字 | 节点块的实体名称 |
entity_type_kwd | 关键字 | 实体类型分类 |
from_entity_kwd | 关键字 | 关系块的源实体 |
to_entity_kwd | 关键字 | 关系块的目标实体 |
content_with_weight | 文本 | JSON 序列化的图谱数据 |
source_id | 关键字 | 对该图谱元素有贡献的文档 ID |
来源: graphrag/utils.py432-499 graphrag/utils.py302-378 graphrag/general/index.py276-321
知识图谱系统通过主 run_graphrag() 编排函数与 RAGFlow 的文档处理管道集成。
来源: graphrag/general/index.py41-124 graphrag/general/index.py126-225 rag/utils/redis_conn.py
该系统实现了多个缓存层,以优化图谱构建过程中的 LLM 调用和嵌入生成。
| 缓存类型 | 功能 | 存储 | 目的 |
|---|---|---|---|
| LLM 缓存 | get_llm_cache() / set_llm_cache() | Redis (24 小时 TTL) | 缓存用于实体提取的 LLM 响应 |
| 嵌入缓存 | get_embed_cache() / set_embed_cache() | Redis (24 小时 TTL) | 缓存实体/关系嵌入 |
| 标签缓存 | get_tags_from_cache() / set_tags_to_cache() | Redis (10 分钟 TTL) | 缓存知识库标签 |