第30回 知识图谱基础——图、三元组与图算法
线索不是一条线,往往织成一张网。
若能把网画出来,寻路自有章法在。
上回我们讲“长上下文 vs RAG”:
长上下文像通读卷宗,RAG 像取证入卷。
可看官很快会遇到第三种案件:
答案不在某一段话里,而在“多段证据的关系链”里。
比如:
- “A 属于 B,B 属于 C,那 A 属于 C 吗?”
- “甲公司控股乙公司,乙公司投资丙公司,甲与丙是什么关系?”
- “这条政策引用了哪条法规,而那条法规又修订了什么条款?”
这种问题最像“办案走线索”:
要把“点与点之间的关系”显式化。
这就是知识图谱(Knowledge Graph, KG)的用武之地。
近两年(2024–2026)“LLM + KG”也成为热门方向:
一方面 LLM 能辅助构图与抽取,另一方面 KG 能提供可解释的结构化证据与多跳推理路径。1
这一回先不讲高深模型,只讲“图谱的内功”:
- 三元组怎么表示
- 图怎么存
- 最短路/多跳怎么查
一、图是什么:点与边,外加一张“关系表”
高二数学里你见过函数图像、坐标系;
知识图谱里的“图”,更像离散数学里的图:
- 点(节点):实体,比如“北京”“清华”“张三”
- 边(关系):比如“位于”“就读于”“朋友”
与普通图不同的是:
知识图谱的边通常“带标签”,说清楚是什么关系。
二、三元组:最小证据颗粒
知识图谱最常用的表示是三元组:
(头实体,关系,尾实体)
例如:
- (张三,就读于,清华)
- (清华,位于,北京)
- (北京,属于,中国)
有了三元组,很多“多跳推理”就变成了“沿边走路”:
张三 → 清华 → 北京 → 中国
三、图算法在 KG 里怎么用:最常见是“找路”
知识图谱最常用的三个基础算法(高二直觉版):
- BFS(广度优先搜索):一圈一圈往外扩,找最短跳数路径
- 最短路(带权图时):如果边有代价,就用 Dijkstra 一类算法
- 连通性与子图:查某个实体相关的局部网络
在“多跳问答”里,BFS 就很够用:
它能找到“从 A 到 B 最少需要几步关系”。
四、极简可跑代码:一个三元组图谱 + BFS 找关系链
下面代码实现:
- 用三元组存图谱
- 建邻接表(从一个实体能走到哪些实体)
- 用 BFS 找从
src到dst的最短关系链
from collections import deque, defaultdict
TRIPLES = [
("张三", "就读于", "清华"),
("清华", "位于", "北京"),
("北京", "属于", "中国"),
("李四", "就读于", "北大"),
("北大", "位于", "北京"),
("清华", "友校", "北大"),
]
def build_graph(triples):
g = defaultdict(list)
for h, r, t in triples:
g[h].append((t, r))
return g
def bfs_path(g, src, dst, max_hops=4):
q = deque()
q.append(src)
prev = {src: None}
prev_edge = {}
depth = {src: 0}
while q:
u = q.popleft()
if u == dst:
break
if depth[u] >= max_hops:
continue
for v, r in g.get(u, []):
if v in prev:
continue
prev[v] = u
prev_edge[v] = r
depth[v] = depth[u] + 1
q.append(v)
if dst not in prev:
return None
nodes = []
rels = []
cur = dst
while cur is not None:
nodes.append(cur)
if cur != src:
rels.append(prev_edge[cur])
cur = prev[cur]
nodes.reverse()
rels.reverse()
return nodes, rels
if __name__ == "__main__":
g = build_graph(TRIPLES)
for src, dst in [("张三", "中国"), ("张三", "北大"), ("李四", "中国")]:
ans = bfs_path(g, src, dst, max_hops=4)
print(src, "->", dst, ":", ans)
输出里你会看到:
- 张三到中国能走通(就读于→位于→属于)
- 张三到北大也能走通(清华—友校→北大)
这就是“多跳证据链”的最小可运行版本:
它天然带“可解释性”:每一步都写清楚走了哪条关系。
五、知识图谱与 RAG 的关系:图是“结构化证据”,RAG 是“文本证据”
把两者并列看:
- RAG:从文本块里取证据
- KG:从关系网里取证据
两者结合起来就很自然:
- 先从文本抽取三元组,构图
- 问答时先在图上找关系链
- 再回到原文段落做引用与核查
这样既有“图的路径解释”,也有“原文引用的可追溯”。
第三篇到这里就埋下一颗伏笔:
第四篇我们会讲 GraphRAG,把图当成检索与推理的骨架,把“相关段落”升级成“相关子图”。
六、小结:第三篇收束——把记忆做成“可查、可证、可追溯”
第三篇十回(21–30)到此告一段落:
我们从“智能体骨架”讲到“检索证据”,再讲到“结构化关系网”。
你现在手里有三样本事:
- 会让模型用工具(第22回)
- 会让模型取证并评估(第23–29回)
- 会把证据组织成可解释的关系链(第30回)
从下一篇(第四篇)起,我们要把这些本事拼成“能行动、能协作”的系统:
知识图谱怎么构建?GraphRAG 怎么跑?多智能体怎么分工?失败怎么复盘?
欲知后事如何,且听下回分解。
幻觉核查
- “LLM+KG”作为研究方向的动机与分类:可核对 2024 综述对 KG-augmented LLMs、LLM-augmented KGs 等范式的划分。1
- 本回的 KG 定义为入门抽象(实体/关系/三元组),未覆盖超关系、时间戳、置信度等工业扩展字段。
逻辑审计
- 与第29回衔接:第29回讨论“取证与可控”,本回把取证从文本块提升到关系链,强调可解释路径。
- 与导读一致:导读强调“事实校验与可追溯”,KG 的路径天然可审计,并可与原文引用结合。
- 为第四篇铺路:GraphRAG 与图检索需要先理解三元组与找路;本回提供最小可运行 BFS 作为骨架。
引用与溯源
Footnotes
-
Ibrahim, N., et al. A survey on augmenting knowledge graphs (KGs) with large language models (LLMs): models, evaluation metrics, benchmarks, and challenges (Discover Artificial Intelligence, 2024) https://link.springer.com/article/10.1007/s44163-024-00175-8 ↩ ↩2