「A 调控 B、B 影响表型」无法靠两段各自相似拼出因果链。根因是段落相似度没有边。本方法先抽实体关系再子图扩展、回填原文。上限绑在抽取质量上,更新成本高。
本文属于 RAG 工程框架中的「2 索引与召回」环节,聚焦「Graph RAG」方法。
定位
| 维度 | 内容 |
|---|---|
| 角色 | 多跳关系检索 |
| 输入 → 输出 | query → 种子实体 → 子图 → 节点回填的 chunks |
| 默认组合 | 生产综述用 Microsoft GraphRAG;轻量用 LightRAG + Neo4j |
| 何时不用 | 无稳定实体关系、语料常改且抽不起;单跳事实用 Hybrid 即可 |
核心机制
$$
G^\star=\arg\max_{G\subseteq k\text{-hop}(e_{\mathrm{seed}})};\mathrm{rel}(q,G)
$$
再 $\mathrm{text}(v)$ 回填。匹配发生在边上。

实现路径与心智:离线抽三元组写入图库并保留节点到原文 chunk 的回指;线上把问句链到种子实体,按跳数扩子图,再取节点上的文本。底层心智:检索是沿边走路,不是给段落打相似度。上限绑在抽取与实体链接上——链错种子,后面跳得越远错得越大。
优缺点
- 优点:多跳与全局摘要类问题强。
- 缺点:IE 贵;图更新与一致性难。
契约与走通样例
输入
1 | {"query": "GAPDH knockdown 如何影响糖酵解表型?"} |
中间量
种子 GAPDH,2-hop 覆盖边 knockdown→siRNA、GAPDH→glycolysis。子图相关 $0.82$ > 单段向量 $0.55$。回填 Methods + Results 两段。
输出
1 | { |
社区实现
Microsoft GraphRAG(社区摘要);轻量 LightRAG + Neo4j。风险:抽取噪声边会被多跳放大。
工程落地
最小可运行示例
复制为 .py 后直接运行(仅标准库)。生产实体链接/图存储换成 spaCy+词典 与 Neo4j / LightRAG。
1 | """种子实体 → k-hop 子图 → 回填节点上的文本块。""" |
参数
| 参数 | 起点 | 影响 |
|---|---|---|
max_hops |
2 | 过大噪声爆炸 |
max_edges_per_hop |
30 | 子图体积 |
text_backoff |
true | 图空时退回向量 |
失效—信号—螺丝
- 实体链接错:子图全偏。信号:种子不是问句主实体。螺丝:加别名表,低置信走向量 backoff。
- 噪声边:多跳放大。螺丝:边置信阈值、人工抽检 IE。
- 子图过大:回填超窗。螺丝:降 hops,或与压缩衔接。
规模(100 篇生物学 PDF)
图存储 2–10 GB;细粒度 IE 可达 5–25 CPU·h(甚至更长)。在线含子图搜索,中到高时延。