🕸️ OpenClaw 知识图谱增强 RAG

GraphRAG 实战:当向量检索遇上图谱推理

GraphRAG 知识图谱 RAG 实体关系

📖 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 黄金法则

  1. 从简单开始 - 先用传统RAG,遇到瓶颈再升级GraphRAG
  2. 实体标准化 - "OpenClaw" 和 "openclaw" 应该是同一个实体
  3. 关系质量控制 - 宁可少建关系,不要建错关系
  4. 定期更新 - 知识图谱需要持续维护和更新
  5. 混合策略 - 向量+图谱配合使用,不要二选一

⚠️ 踩坑提醒

  1. 实体爆炸 - 每段文字都提取几十个实体 → 图谱臃肿
  2. 关系噪声 - 错误关系导致推理走偏
  3. 查询性能 - 多跳推理可能很慢 → 设定深度上限
  4. 维护成本 - 图谱需要持续人工审核

🔗 相关资源