一、核心文件分析
1.1 graphrag/light/graph_prompt.py
- 定义提示词模板,参考 LightRAG 的 prompt 设计
- 关键提示词:
- entity_extraction: 实体和关系提取的主提示词
- entity_continue_extraction: 继续提取遗漏的实体和关系
- entity_if_loop_extraction: 判断是否还有遗漏的实体
- rag_response: 基于知识图谱生成回答
- keywords_extraction: 关键词提取(高级和低级关键词)
1.2 graphrag/light/graph_extractor.py
主要流程:
1、初始化:设置提示词模板、实体类型、分隔符等
2、处理单个文档块:_process_single_content
- 使用 LLM 提取实体和关系
- 支持多轮提取(gleaning)以补全遗漏
- 通过循环判断是否还有遗漏的实体
3、解析结果:将 LLM 输出解析为节点和边
1.3 流程执行
文档块 (Chunks)
↓
实体提取 (Entity Extraction)
↓
关系提取 (Relationship Extraction)
↓
多轮补全 (Gleaning Loop)
↓
构建知识图谱 (Graph Construction)
↓
存储到 Elasticsearch/Infinity
1.4 提取特性
- 实体:("entity"<|>实体名称<|>实体类型<|>实体描述)
- 关系:("relationship"<|>源实体<|>目标实体<|>关系描述<|>关系关键词<|>关系强度)
1.5 集成方式
# 根据配置选择使用 LightRAG 还是 General 方法
kg_extractor = LightKGExt if ("method" not in kb_parser_config.get("graphrag", {}) or kb_parser_config["graphrag"]["method"] != "general"
) else GeneralKGExt
1.6 配置选项
- Method: 选择 "Light"(默认)或 "General"
- Entity types: 指定要提取的实体类型(如 organization, person, geo, event, category)
- Entity resolution: 是否启用实体消歧
- Community reports: 是否生成社区报告
1.7 输出格式
-
实体(Entities):名称、类型、描述
-
关系(Relationships):源实体、目标实体、关系描述、关系关键词、关系强度
-
内容关键词(Content Keywords):文档的高级主题关键词