等不是办法,干才有希望,快速跑通graphRag
感谢
且不去理会各种繁杂的概念,先把项目跑起来体验一下。
运行环境配置
AI 相关的库更新迭代速度极快,今天学习的内容可能明天就已更新。因此,确保版本一致性至关重要,以下是本教程所需的核心环境:
- Python 3.12
- GraphRAG 2.1.0
安装主要依赖:
bash
pip install graphrag==2.1.0
其余依赖项会在安装过程中自动下载,无需手动配置。
1 初始化
使用以下命令初始化项目:
bash
graphrag init --root graphrag-demo
执行后将生成如下基本目录结构:
bash
graphrag-demo
├── prompts
│ ├── basic_search_system_prompt.txt # 基础搜索系统提示文件
│ ├── community_report_graph.txt # 社区报告图谱生成提示文件
│ ├── community_report_text.txt # 社区报告文本生成提示文件
│ ├── drift_reduce_prompt.txt # 漂移减少提示文件
│ ├── drift_search_system_prompt.txt # 漂移搜索系统提示文件
│ ├── extract_claims.txt # 提取声明/主张的提示文件
│ ├── extract_graph.txt # 从文本提取图谱关系的提示文件
│ ├── global_search_knowledge_system_prompt.txt # 全局搜索知识系统提示文件
│ ├── global_search_map_system_prompt.txt # 全局搜索映射系统提示文件
│ ├── global_search_reduce_system_prompt.txt # 全局搜索归约系统提示文件
│ ├── local_search_system_prompt.txt # 本地搜索系统提示文件
│ ├── question_gen_system_prompt.txt # 问题生成系统提示文件
│ ├── summarize_descriptions.txt # 描述摘要生成提示文件
├── settings.yaml # 配置文件,包含模型设置、输入输出设置等
└── .env # 环境变量文件,存储API密钥等敏感信息
2 修改提示词
将 extract_claims.txt
和 extract_graph.txt
中的 English
改为 Chinese
,使系统返回中文的实体和关系。
3 配置环境
需要对 settings.yaml
进行配置,并在 .env
文件中设置相应的环境变量:


注意事项:
- 本教程使用的是
grok-2-1212
模型,可能会出现encoding_model
找不到的错误,需要手动指定该参数 - 对于 embedding_model,建议选择支持较大token长度的模型(如硅基流动),实测发现火山豆包等模型可能会出现错误

4 运行
bash
graphrag index

5 查询
社区查询
bash
graphrag query --method local --query "都有哪些实体"

全局查询
bash
graphrag query --method global --query "按时间叙事"

output结构
csharp
├── output # 输出目录,存储处理结果
│ ├── communities.parquet # 社区数据,存储识别出的主题社区信息
│ ├── community_reports.parquet # 社区报告数据,存储为每个社区生成的详细报告
│ ├── context.json # 上下文信息,存储处理过程中的上下文数据
│ ├── documents.parquet # 文档数据,存储处理后的文档信息
│ ├── entities.parquet # 实体数据,存储从文本中提取的实体信息
│ ├── lancedb # LanceDB向量数据库目录
│ │ ├── default-community-full_content.lance # 社区全文内容的向量存储
│ │ │ ├── _transactions # 事务记录
│ │ │ │ ├── 0-b8903013-e496-49d2-8056-26cdafbcb6da.txn # 事务文件
│ │ │ │ └── 1-c4e75ee4-4179-431a-afde-15ce230ebf52.txn # 事务文件
│ │ │ ├── _versions # 版本管理
│ │ │ │ ├── 1.manifest # 版本1清单
│ │ │ │ └── 2.manifest # 版本2清单
│ │ │ └── data # 数据存储
│ │ │ └── c4779283-b391-463d-a1e0-8af73d66a4fa.lance # 数据文件
│ │ ├── default-entity-description.lance # 实体描述的向量存储
│ │ │ ├── _transactions # 事务记录
│ │ │ │ ├── 0-f0aeed1e-f954-4fef-9987-e4ab2c441961.txn # 事务文件
│ │ │ │ └── 1-cf687bea-4335-4238-bec4-9006851c1aaf.txn # 事务文件
│ │ │ ├── _versions # 版本管理
│ │ │ │ ├── 1.manifest # 版本1清单
│ │ │ │ └── 2.manifest # 版本2清单
│ │ │ └── data # 数据存储
│ │ │ └── 2585fe1e-7787-4a4e-afa3-9b87b1925d86.lance # 数据文件
│ │ └── default-text_unit-text.lance # 文本单元的向量存储
│ │ ├── _transactions # 事务记录
│ │ │ ├── 0-53a32157-64a8-444b-a838-a60a38c76e67.txn # 事务文件
│ │ │ └── 1-859fd3ea-20d0-4db0-b000-d90e2a85c1a1.txn # 事务文件
│ │ ├── _versions # 版本管理
│ │ │ ├── 1.manifest # 版本1清单
│ │ │ └── 2.manifest # 版本2清单
│ │ └── data # 数据存储
│ │ └── 7cb17cae-41b3-4003-845d-abde65e0ee6a.lance # 数据文件
│ ├── relationships.parquet # 关系数据,存储实体间的关系信息
│ ├── stats.json # 统计数据,存储处理过程的统计信息
│ └── text_units.parquet # 文本单元数据,存储文本分割后的基本单元
后续随缘更新