📖 GraphRAG 是什么?
世界上有一种检索叫 GraphRAG。传统的 RAG 只知道"这段文字和你的问题很像",但 GraphRAG 还知道"OpenClaw 是一个 Agent 框架,它使用了 MCP 协议,MCP 是 Anthropic 提出的标准"——关系,比相似度更重要。
GraphRAG 把知识组织成网状结构:实体是节点,关系是边。检索时不仅看语义相似度,还沿着关系路径推理,找到隐含的关联。
GraphRAG vs 传统 RAG:
| 维度 | 传统 RAG | GraphRAG |
|---|---|---|
| 检索方式 | 向量相似度 | 向量 + 图谱路径 |
| 知识组织 | 文档片段 | 实体 + 关系 |
| 多跳推理 | ❌ 不支持 | ✅ 支持 |
| 关系理解 | 弱 | 强 |
| 构建成本 | 低 | 高 |
| 适合场景 | 简单问答 | 复杂推理、企业知识 |
🏗️ 架构设计
# OpenClaw GraphRAG 架构
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ 用户提问 │────▶│ 实体识别 │────▶│ 图谱检索 │
│ │ │ (NER) │ │ (Neo4j) │
└─────────────┘ └──────┬───────┘ └──────┬──────┘
│ │
┌──────▼───────┐ ┌──────▼──────┐
│ 向量检索 │────▶│ 结果融合 │
│ (Pinecone) │ │ (Rerank) │
└──────────────┘ └──────┬──────┘
│
┌──────▼──────┐
│ LLM 生成 │
│ (基于融合 │
│ 的上下文) │
└─────────────┘
⚡ 快速开始
1. 知识图谱构建
# 使用 Neo4j 存储图谱
docker run -d \
--name neo4j \
-p 7474:7474 -p 7687:7687 \
-e NEO4J_AUTH=neo4j/password \
neo4j:latest
# OpenClaw 配置
knowledgeGraph:
type: neo4j
uri: bolt://localhost:7687
user: neo4j
password: password
# 实体抽取配置
entityExtraction:
model: gpt-4o-mini # 用于NER
entityTypes:
- technology
- company
- person
- concept
- tool
# 关系抽取
relationExtraction:
enabled: true
maxRelations: 5 # 每段文本最多5个关系
2. 文档导入
// 导入文档并自动构建图谱
await agent.knowledgeGraph.import({
source: "./docs/",
pipeline: [
"text-extract", // 提取文本
"chunk-split", // 分段
"entity-extract", // 实体识别
"relation-extract", // 关系抽取
"vector-index", // 向量化
"graph-store" // 存入图谱
],
// 自动为每个chunk同时建向量索引和图谱节点
indexing: {
vector: {
enabled: true,
model: "text-embedding-3-small"
},
graph: {
enabled: true,
mergeMode: true // 合并相同实体
}
}
});
3. 混合检索
// GraphRAG 混合检索
const answer = await agent.chat({
message: "OpenClaw 和 MCP 是什么关系?",
rag: {
type: "graph", // graph | vector | hybrid
strategy: "hybrid",
params: {
// 向量检索 top-K
vectorTopK: 10,
// 图谱检索深度
graphDepth: 2,
// 图谱检索最大节点
graphMaxNodes: 20,
// 融合策略
fusion: "reciprocal-rank", # rrf | weighted | cascade
// 权重
weights: {
vector: 0.5,
graph: 0.5
}
}
}
});
🔧 进阶功能
多跳推理
// 自动多跳推理
const result = await agent.knowledgeGraph.query({
question: "OpenClaw 支持哪些AI模型的Agent?",
multiHop: true,
maxHops: 3,
// 推理路径:
// OpenClaw → 支持 → AI Models → 包括 → GPT-4, Claude, Gemini
// 比纯向量检索能找到更多关联
});
社区检测
// 自动发现知识社区
const communities = await agent.knowledgeGraph.detectCommunities({
algorithm: "louvain",
minCommunitySize: 5,
// 自动将相关实体分组
// 例如:所有 OpenClaw 相关实体聚成一个社区
});
知识图谱可视化
// 生成图谱快照用于可视化
const snapshot = await agent.knowledgeGraph.visualize({
centerEntity: "OpenClaw",
depth: 2,
format: "d3", // d3 | mermaid | graphviz
exportPath: "./graph-snapshot.html"
});
💡 最佳实践
✅ GraphRAG 黄金法则
- 从简单开始 - 先用传统RAG,遇到瓶颈再升级GraphRAG
- 实体标准化 - "OpenClaw" 和 "openclaw" 应该是同一个实体
- 关系质量控制 - 宁可少建关系,不要建错关系
- 定期更新 - 知识图谱需要持续维护和更新
- 混合策略 - 向量+图谱配合使用,不要二选一
⚠️ 踩坑提醒
- 实体爆炸 - 每段文字都提取几十个实体 → 图谱臃肿
- 关系噪声 - 错误关系导致推理走偏
- 查询性能 - 多跳推理可能很慢 → 设定深度上限
- 维护成本 - 图谱需要持续人工审核