Agent-10-07.图数据库与GraphRAG

系列:00 索引 · 上一篇:06 混合 RAG · 下一篇:08 HITL


1. 行业常见问题

问题类型 纯向量 RAG 的局限
「A 方法输入什么、预测什么指标?」 段落相似≠关系明确
「与 B 方法相比差异?」 需多文档对照,易漏
方法-工具-论文-指标多跳 检索 top-k 难覆盖结构

典型领域:方法库、药物-靶点-通路、合规规则链、供应链


2. 该技术如何解决

属性图 存实体与关系;查询时用 Cypher(或 Gremlin)做子图扩展;把 子图 + 关联文本 喂给 LLM,即 Graph RAG

与混合 RAG 互补:文献叙述用向量;方法关系用图。


3. 核心原理

3.1 属性图三元组

1
2
3
4
(方法)-[:接受输入]->(特征类型)
(方法)-[:预测]->(指标)
(方法)-[:实现于]->(软件)
(方法)-[:引自]->(论文)

3.2 Graph RAG 流程

1
NL 问题 → 实体链接 → Cypher 子图(1–2 hop)→ 序列化 → LLM + 引用 node/edge

3.3 子图过大问题

  • 限制 hop、按关系类型过滤
  • 只取 top 相关节点(度、权重、向量初筛)

4. 典型实现与代码示例

Graph RAG 同样分 Part A 建图 ingestPart B Agent 调用。实现在 mcp/mcp_rag_methods/graph/,Method KB Agent 消费 query_graph MCP tool。

4.1 Part A:MethodGraphStore 建图

1
2
3
4
5
6
7
8
9
10
11
12
# mcp/mcp_rag_methods/graph/store.py(节选)
class MethodGraphStore:
def ingest_method_doc(self, domain, source_path, *, doc_id="") -> dict:
# graph.json 节点字段:
# id — query_graph 命中与 citation 的 node_id
# type — Domain / Concept 等,写入 context header
# label — 段落首行摘要,参与 score_nodes 词项匹配
# text — 完整段落,供 LLM grounded 生成
# 边:from/to/type — expand_subgraph BFS 扩展子图
graph["nodes"].append({"id": nid, "type": "Concept", "label": ..., "text": para})
graph["edges"].append({"from": root_id, "to": nid, "type": "CONTAINS"})
self._save_graph(domain, graph)

4.2 Part B:子图检索 + citation

1
2
3
4
5
6
7
# mcp/mcp_rag_methods/graph/query.py → query_graph 返回
# citations[] 字段:
# node_id — Skill 要求回答中标注
# type/label — build_graph_context header
# text — 证据正文
# paths — 可选关系路径,多跳问答审计
# context — 带 [编号] 的图证据块,注入 AgentRuntime 消息栈

MCP 暴露为 query_graph(domain, question, top_k);Method KB Agent Skill 要求标注 node_id

4.3 工程验收

1
2
3
4
5
6
7
# Part A
uv run python -m agent.method_kb.cli ingest-samples --domain sirna_methods
uv run python -m agent.method_kb.cli smoke-query sirna_methods "转录本选择策略?"

# Part B
uv run python -m agent.method_kb.cli chat --mock-llm \
"siRNA 转录本选择策略?请 query_graph sirna_methods 并标注 node_id。"

与 Hybrid RAG 分工

知识类型 存储 Agent 典型问题
基因文献 kb_gene literature 「BRCA1 哪条 siRNA 效果好?」
公共方法 kb_methods method_kb 「转录本选择策略有哪些?」

大规模可迁移 Neo4j(NEO4J_URI 占位);Cypher 建图见原文 3.1 三元组示例。


5. 替代方案与优缺点

方案 优点 缺点
Neo4j 生态成熟、Cypher 友好 需运维(可 Docker)
Kuzu 嵌入式、单机快 分布式弱
NetworkX 内存图 原型快 无持久化查询语言
三元组存 SQL + JOIN 团队熟悉 SQL 多跳查询繁琐
Microsoft GraphRAG 社区摘要 全局问答强 构建重、成本高
仅向量 + 元数据过滤 简单 关系弱

6. 自检题

  1. 什么类型的问题更适合 Graph RAG 而非 Hybrid RAG?
  2. 为什么入库需要 HITL 或 staging?
  3. 2-hop 与 3-hop 扩展各适合什么规模?

7. 延伸阅读

-------------本文结束感谢您的阅读-------------