基于 Microsoft GraphRAG 的知识图谱构建与查询项目,使用中文企业数据(华为、小米、阿里巴巴)进行实体提取、社区检测和报告生成。
graphrag_quickstart/
├── .env # 环境变量(API Key 等)
├── settings.yaml # GraphRAG 配置文件
├── input/ # 输入数据
│ └── companyInfo.txt # 企业信息文档
├── output/ # 索引输出结果
│ ├── entities.parquet # 实体
│ ├── relationships.parquet # 关系
│ ├── communities.parquet # 社区
│ ├── community_reports.parquet # 社区报告
│ ├── documents.parquet # 文档
│ ├── text_units.parquet # 文本单元
│ └── lancedb/ # 向量数据库
├── prompts/ # 提示词模板
├── cache/ # 缓存
├── logs/ # 日志
└── rag/ # RAG 相关(预留)
| 用途 | 模型 | 提供商 |
|---|---|---|
| 文本生成 | qwen-turbo |
阿里云 DashScope |
| 文本嵌入 | bge-m3 |
Ollama (本地) |
- DashScope:
https://dashscope.aliyuncs.com/compatible-mode/v1 - Ollama:
http://localhost:11434/v1
mkdir graphrag_quickstart
cd graphrag_quickstartpython -m venv .venv# Windows
.venv\Scripts\activatepip install graphraggraphrag init此命令会在当前目录生成 settings.yaml、.env、prompts/ 等默认配置文件。
将企业信息文档放入 input/ 目录:
# 创建 input/companyInfo.txt,内容包含华为、小米、阿里巴巴的公司介绍修改 settings.yaml,配置 LLM 模型和嵌入模型:
- completion_models: 使用阿里云 DashScope 的
qwen-turbo模型 - embedding_models: 使用本地 Ollama 的
bge-m3模型 - input: 文本类型输入
- chunking: Token 分块,大小 1200,重叠 100
- entity_types:
[organization, person, geo, event]
# 设置 API Key
GRAPHRAG_API_KEY=your_api_key_heregraphrag index索引构建会依次执行以下工作流:
- 加载输入文档
- 创建文本单元
- 提取实体和关系图
- 创建社区
- 生成社区报告
- 生成文本嵌入
索引结果输出到 output/ 目录。
# 本地搜索(基于实体和社区)
graphrag query --method local --query "华为和小米之间有什么关系?"
# 全局搜索(基于社区报告摘要)
graphrag query --method global --query "这三家公司的共同特点是什么?"| 指标 | 值 |
|---|---|
| 文档数 | 1 |
| 总耗时 | 23.6 秒 |
| 实体提取 | 0.67 秒 |
| 社区报告生成 | 10.5 秒 |
| 文本嵌入生成 | 10.9 秒 |
| 文件 | 描述 |
|---|---|
entities.parquet |
提取的实体列表 |
relationships.parquet |
实体之间的关系 |
communities.parquet |
社区聚类结果 |
community_reports.parquet |
社区摘要报告 |
documents.parquet |
处理后的文档 |
text_units.parquet |
文本分块单元 |
lancedb/ |
LanceDB 向量存储 |
- Python: 3.11.9
- GraphRAG: Microsoft GraphRAG
- LLM: 阿里云 DashScope (qwen-turbo)
- 嵌入模型: BGE-M3 (Ollama 本地部署)
- 向量数据库: LanceDB