信息小镇的公告栏上贴满告示,某天夜里失主家中金币被盗。传统 RAG 来到公告栏前,反复比对“金币失窃”的告示,只能确认金币确实丢了——但“谁干的”三个字,公告栏上根本找不到。而 GraphRAG 不同,它先去治安官那里借来一本全镇居民的“人脉联络图”:失主近期频繁出入当铺,当铺伙计说神秘人多次典当金器,管家承认受神秘人指使……沿着“朋友的朋友”这条链,真凶浮出水面。这本联络图,就是知识图谱;沿着关系链找人,就是图推理。GraphRAG 把两种能力装进同一个 RAG 系统:既翻公告栏(向量检索),又查联络图(图谱遍历),最终把拆散的线索拼接成完整故事。这篇文章,就带你从零认识这张“联络图”是怎么画出来、怎么用起来的。

岗位关联

学会 GraphRAG,你就能让大模型回答“跨文档、多跳推理”的复杂问题——这恰恰是 AI 深度研究场景中最值钱的能力之一。

目录
  1. 可视化演示
  2. 传统RAG局限
  3. 知识图谱基础
  4. GraphRAG架构
  5. 图谱构建流程
  6. 多跳推理机制
  7. 混合检索策略
  8. 工程实践应用
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

动态展示GraphRAG工作流程:向量检索命中实体节点后,通过知识图谱多跳遍历发现隐含关联,对比向量检索与图谱推理的覆盖范围差异。

本节配有交互动效(进入视口后自动加载,约 3KB)。

GraphRAG知识图谱增强检索 知识实体 向量命中 多跳路径 查询节点 Vector+Graph→Multi-hop 图谱遍历发现隐含关系

传统RAG局限

小镇公告栏贴满告示:“金币失窃,悬赏捉拿”。传统 RAG 的做法,就是把告示按主题分类贴好,查询时挑出主题最像的那几张。可当线索藏在“失主和当铺老板熟识”这类根本没有写进告示的关系里时,公告栏就无能为力了——它只能告诉你金币丢了,却答不出谁偷的。

RAG(检索增强生成)的核心机制,是把文档切成小块,用嵌入模型转成向量,查询时找出语义最相似的片段。这个过程很像从公告栏里找内容最接近的告示:快、直观,但只认表面的“像与不像”。这里的检索打分,最常用的就是余弦相似度。

所以传统 RAG 翻遍公告栏,也只能确认“金币在失主家”,永远答不出“谁最有可能是内贼”——因为那条线索写在人际关系里,而不是公告栏的纸面上。

sim(q,d)=q⋅d∣q∣ ∣d∣\displaystyle \text{sim}(q,d)=\frac{\mathbf{q}\cdot\mathbf{d}}{|\mathbf{q}|\,|\mathbf{d}|}
余弦相似度衡量两个向量“方向是否一致”,取值在 -1 到 1,越大代表语义越接近。
  1. 分子点积把查询向量和文档向量的每个维度逐项相乘再求和,得到两者在各方向上的“共鸣强度”。
    q⋅d=∑i=1nqidi\displaystyle \mathbf{q}\cdot\mathbf{d}=\sum_{i=1}^{n}q_i d_i
  2. 分母归一化用两个向量的模长乘积做分母,把结果压到 [-1,1],避免长文本天然得分更高。
    ∣q∣=∑i=1nqi2\displaystyle |\mathbf{q}|=\sqrt{\sum_{i=1}^{n}q_i^2}
  3. 整体解读值越接近 1,两个文本语义越接近。但余弦相似度只看“词面语义”,对“实体 A 与实体 B 通过某关系间接关联”这类结构信息完全无感。

知识图谱基础

治安官手里有一本厚厚的“人脉联络图”:每一页记一个人,写着“失主——雇佣——管家”“管家——供出——主使”这样的条目。这张图的价值在于,它把散落在各张告示里的名字串成了网。谁认识谁、谁帮过谁、谁最近和谁走得近,一目了然。

知识图谱就是这么一张网。它的基本元素只有两个:实体和关系。实体是“节点”(人、公司、药物、事件),关系是“边”(雇佣、治疗、导致、位于)。每条关系都可以写成“头实体—关系—尾实体”的三元组,这是知识图谱最通用的表示法。

为什么这张图比公告栏更强?因为图天然支持“顺着边跳着走”。公告栏是平面的,联络图是立体的——从失主走到当铺,再走到神秘人,一步、两步、三步,一次跨越多个文档的完整故事就串起来了。这就是图存储的核心优势:结构即信息。

G=(V,E),三元组: (h,r,t)∈E\displaystyle G=(V,E),\quad \text{三元组: }(h,r,t)\in E
图 G 由节点集合 V 和边集合 E 组成,每条边就是一个描述“谁—怎么—谁”的三元组。
  1. 节点集合 V图中所有实体的集合,相当于联络图里所有居民的名单。
    V={v1,v2,…,vn}\displaystyle V=\{v_1,v_2,\dots,v_n\}
  2. 边集合 E所有关系的集合,每条边连接两个节点,代表一种有意义的关联。
    E={(h,r,t)∣h,t∈V, r 为关系类型}\displaystyle E=\{(h,r,t)\mid h,t\in V,\ r\ \text{为关系类型}\}
  3. 三元组语义(h,r,t) 读作“头实体 h 通过关系 r 关联到尾实体 t”,比如 (失主,雇佣,管家)。

GraphRAG架构

现在,镇上建起一个访客服务台。传统做法是只派一个人去翻公告栏;GraphRAG 则让服务台同时开着两条通道:一条连公告栏(向量检索),一条连治安官的联络图(图谱检索)。查询进来后,两边同时开工,最后在服务台汇总答案。

GraphRAG 的架构全景也分两块。离线索引阶段:把文档切片、向量化,同时跑实体识别和关系抽取,建出知识图谱。在线查询阶段:用户问题同时走向量召回和图遍历,两路结果合并后交给大模型生成答案。双通道的设计,让“语义相似”和“结构关联”互为补充。

服务台之所以高效,是因为两条通道的错误模式不同:公告栏漏掉的,联络图往往能补上;联络图抽不准的,公告栏的语义相似又能兜底。两者合并,正好对冲各自的盲区,这是 GraphRAG 架构设计的核心思想。

Score(q,x)=λ⋅Simvec(q,x)+(1−λ)⋅Simgraph(q,x)\displaystyle \text{Score}(q,x)=\lambda\cdot\text{Sim}_{\text{vec}}(q,x)+(1-\lambda)\cdot\text{Sim}_{\text{graph}}(q,x)
融合得分 = 权重 λ 调节的向量相似度 + 权重 (1-λ) 调节的图谱相关度,λ 控制两条通道的信任比例。
  1. 向量相似度项衡量问题 q 和候选内容 x 在语义层面的接近程度,是公告栏路线的产出。
    Simvec(q,x)∈[0,1]\displaystyle \text{Sim}_{\text{vec}}(q,x)\in[0,1]
  2. 图谱相关度项衡量 x 和 q 涉及实体在图上的连通强度,是联络图路线的产出。
    Simgraph(q,x)∈[0,1]\displaystyle \text{Sim}_{\text{graph}}(q,x)\in[0,1]
  3. 超参数 λ手动设定的权衡系数。λ 大则偏重语义匹配,λ 小则偏重结构推理,通常取 0.5~0.7。
    0≤λ≤1\displaystyle 0\le\lambda\le1

图谱构建流程

治安官决定把联络图画全,于是派巡逻警员挨家挨户登记:先问“你叫什么、住哪”(实体识别),再问“你和谁认识、什么关系”(关系抽取),最后把所有卡片钉到一张大墙上(图入库)。这一步一步,就是图谱构建的流水线。

技术实现上,图谱构建分为四步。文档解析切分:把原始 PDF、网页清洗成结构清晰的文本块。实体抽取识别:用命名实体识别(NER)找出人名、地名、机构名等关键实体。关系抽取连接:判断两两实体之间的关系类型。图入库存储:把三元组写入图数据库或内存图结构。现代方案常直接调用大模型完成抽取,并让多轮抽取结果互相校验。

巡逻警员的登记质量直接决定联络图好不好用:漏登一个人,后面所有侦察都会失明。同样,实体和关系抽取的准确率,就是知识图谱的天花板。正因如此,工程上往往要在抽取后加一轮人工抽检和去重合并。

P(r∣h,t)=softmax(W[eh;er;et])\displaystyle P(r\mid h,t)=\text{softmax}(W[\mathbf{e}_h;\mathbf{e}_r;\mathbf{e}_t])
给定头尾实体,模型输出每种关系类型的概率分布,取最大者作为抽取结果。
  1. 实体向量拼接把头实体向量 e_h、关系表示 e_r、尾实体向量 e_t 拼成一个长向量,作为分类特征。
    [eh;er;et]∈R3d\displaystyle [\mathbf{e}_h;\mathbf{e}_r;\mathbf{e}_t]\in\mathbb{R}^{3d}
  2. 线性变换用权重矩阵 W 将特征映射到“关系类别数”维度。
    W[eh;er;et]∈R∣R∣\displaystyle W[\mathbf{e}_h;\mathbf{e}_r;\mathbf{e}_t]\in\mathbb{R}^{|R|}
  3. softmax 归一化把打分变成概率,选概率最高的关系作为最终预测。
    P(r∣h,t)=exp⁡(sr)∑r′∈Rexp⁡(sr′)\displaystyle P(r\mid h,t)=\frac{\exp(s_r)}{\sum_{r'\in R}\exp(s_{r'})}

多跳推理机制

联络图挂满整面墙后,治安官破案的方式变了:不再只问“谁直接认识失主”,而是沿着一张张卡片往后走——失主常去当铺,当铺伙计说神秘人多次典当金器,管家又承认受神秘人指使。走了三步,真凶现形。这就是“多跳推理”。

在图谱上做多跳推理,本质是广度优先搜索(BFS)或深度优先搜索(DFS)的变体。先从种子实体出发,拿到一跳邻居,再对每个邻居继续扩展,直到达到设定的最大跳数。每找到一条路径,就给路径打个分——路径越短、边关系越可信、覆盖的实体越相关,得分越高。最后把高分路径上的实体和关系片段合成答案上下文。

“朋友的朋友”之所以能破案,是因为公告栏里的信息全是“点”,而联络图把它们连成了“链”。但这条链不是越长越好——走到第三步案情清晰,走到第十步可能已经扯到隔壁镇的八卦。所以多跳推理要同时控制深度和质量。

S(path)=∑i=1nwi\displaystyle S(\text{path})=\sum_{i=1}^{n}w_i
一条 n 跳路径的总得分,等于路径上每条边权重 w_i 之和;得分越高,这条推理链越可信。
  1. 路径定义从起点到目标节点经过的一串边,如 失主→常去→当铺→接待→神秘人。
    path={e1,e2,…,en}\displaystyle \text{path}=\{e_1,e_2,\dots,e_n\}
  2. 边权重求和把每条边的置信度加总,置信度来自关系抽取模型的预测概率。
    wi=P(ri∣hi,ti)\displaystyle w_i=P(r_i\mid h_i,t_i)
  3. 跳数 n实际遍历中通常限制 2~3 跳,因为跳数越多,噪声和计算量都指数上升。

混合检索策略

两条侦察线都回来了:公告栏那边找到“金币在失主家、当铺在街角”的告示;联络图那边找到“失主→当铺→神秘人→主使”的关系链。治安官把两份情报按重要程度排好序,钉在同一块案情板上,这才拼出全貌。这是双通道之后的融合环节。

混合检索的工程实现通常分三步。向量召回:从向量库取 top-K1 个相似片段。图召回:从图谱取 top-K2 条路径对应的上下文。融合重排序:用倒数排名融合(RRF)或加权相加把两路合并,再按分数重排,最终取前 K 条喂给大模型。RRF 的好处是不依赖两路分数的绝对尺度,只比排名。

情报板上两套线索写着同一件事的不同侧面:告示给出事实背景,联络图给出因果链条。两者合并起来,大模型才拿到“既知道金币在哪,又知道谁动了它”的完整叙事。混合检索不是简单拼接,而是通过重排序让最相关的证据排在最前面。

RRF(d)=∑r∈rankers1k+rankr(d)\displaystyle \text{RRF}(d)=\sum_{r\in\text{rankers}}\frac{1}{k+\text{rank}_r(d)}
对每个文档 d,把它在两个检索通道中的排名取倒数再求和,排名越靠前贡献越大,k 是平滑常数。
  1. 两个排序器向量检索和图谱检索各输出一个排名列表,rank_r(d) 表示文档 d 在通道 r 中的名次。
    rankr(d)∈{1,2,…,N}\displaystyle \text{rank}_r(d)\in\{1,2,\dots,N\}
  2. 倒数求和把两个名次带入 1/(k+rank) 相加;名次越靠前,分数越高,且不受分数量纲影响。
    k=60 (常用平滑值)\displaystyle k=60\ (\text{常用平滑值})
  3. 排序输出按 RRF 总分降序取 top-K 片段,作为最终上下文送入生成模型。
    final=topK(RRF(d))\displaystyle \text{final}=\text{top}_K(\text{RRF}(d))

工程实践应用

小镇试点成功后,治安官把方案推广到整个城市。可城市有十万居民,上万张告示——翻公告栏快但浅,走联络图深但慢。系统的落地不再是画一张图那么简单,而是要面对数据规模、更新频率、算力成本三道坎。

工程落地的核心挑战有三个。图谱抽取质量:大模型抽取实体关系会有幻觉,必须加校验规则和人工抽检。性能优化:图遍历在超大图上容易爆炸,常用策略是先做子图裁剪、只保留与种子实体相关的局部区域,再配合缓存加速。评估方式:用多跳问答数据集测 Hit@K 和 F1,看系统在“需要串联多个实体”的问题上是否真的变强了。

从小镇到城市,GraphRAG 的旅程告诉我们:图纸画得好不好,决定系统能用多久;管线跑得快不快,决定系统能服务多少人。知识图谱不是银弹,但只要你面对的是“关系复杂、追问多跳”的真实场景,它就是最值得优先考虑的增强方案。

---

F1=2×P×RP+R\displaystyle F1=\frac{2\times P\times R}{P+R}
F1 是精确率 P 和召回率 R 的调和平均,用来综合衡量回答质量;在复杂问答评估中越高越好。
  1. 精确率 P系统给出的答案中,真正正确的比例,衡量“答得准不准”。
    P=TPTP+FP\displaystyle P=\frac{\text{TP}}{\text{TP}+\text{FP}}
  2. 召回率 R所有正确答案中,系统找出来的比例,衡量“找得全不全”。
    R=TPTP+FN\displaystyle R=\frac{\text{TP}}{\text{TP}+\text{FN}}
  3. 调和平均当 P 和 R 差距大时 F1 会显著偏低,迫使系统两端都要兼顾。
    F1∈[0,1]\displaystyle F1\in[0,1]

AI 应用场景

企业知识库多跳问答

阶段:RAG 推理增强

解决的问题:传统 RAG 只能回答“某文档里写了什么”这类单点问题。当员工问“A 产品的新版本是否兼容我们正在用的 B 模块”时,信息分散在多个文档里,向量检索往往只召回 A 产品的介绍,漏掉 B 模块的兼容性章节。GraphRAG 把文档里的产品、模块、版本抽成图谱实体,用“依赖/兼容/升级”关系连接,沿着关系链把两个文档的证据一次拉全。

具体案例:某科技公司的内部知识库接入 GraphRAG 后,多跳类问题的回答完整率从 58% 提升到 87%。员工询问涉及“组件 C 的上游依赖是否已修复漏洞”这类跨文档问题时,系统能自动拼出“C→依赖→D→修复记录”的完整证据链,并附上每跳对应的原文出处。

医疗文献深度研究

阶段:知识发现

解决的问题:医学文献中“药物—靶点—疾病—副作用”的关联往往跨越多篇论文,人工阅读效率极低。GraphRAG 将论文中的药物、基因、疾病抽成实体,把“抑制/激活/导致”等关系建成图谱,研究者输入“某药物是否可能引起某副作用”时,系统能沿着“药物→靶点→通路→副作用”的路径给出隐含结论和证据链。

具体案例:一家药企的研发团队用 GraphRAG 分析 2 万篇文献,成功在 3 天内锁定 5 个候选药物的潜在心脏毒性风险信号,而这些信号在传统关键词检索下均未被直接召回——每条风险都来自 3 跳以上的关系路径。

金融股权穿透分析

阶段:图谱推理

解决的问题:尽调人员需要穿透多层股权结构,识别实际控制人。传统方案用 SQL 递归查询,慢且无法语义理解隐形关联。GraphRAG 把公司、自然人和持股关系建成图谱,结合公告文本,支持“谁是 X 公司的最终实控人”这类多跳问答,并自动生成穿透路径图。

具体案例:某头部券商的智能尽调系统接入 GraphRAG 后,股权穿透查询从平均 20 分钟缩短到 40 秒,且能自动发现“同一自然人通过两家公司间接持股某目标企业”的隐蔽关联,被风控团队采纳为 3 笔交易的否决依据。

Python 演示

python77 行
"""迷你 GraphRAG 演示:向量召回 + 图遍历多跳推理的融合问答""" from collections import deque  class MiniGraphRAG:    def __init__(self):        self.triples = []        self.entity_docs = {}        self.adjacency = {}     def add_triple(self, head, relation, tail, doc):        self.triples.append((head, relation, tail, doc))        self.entity_docs.setdefault(head, []).append(doc)        self.entity_docs.setdefault(tail, []).append(doc)        self.adjacency.setdefault(head, []).append((relation, tail))        self.adjacency.setdefault(tail, []).append((relation + "_inv", head))     def vector_retrieve(self, query, top_k=3):        q_words = set(query.replace("?", "").replace("?", "").split())        scored = []        for entity, docs in self.entity_docs.items():            for doc in docs:                overlap = len(q_words & set(doc.split()))                scored.append((overlap, entity, doc))        scored.sort(key=lambda x: -x[0])        return scored[:top_k]     def graph_retrieve(self, seed, max_hops=2):        found = []        visited = {seed}        queue = deque([(seed, 0)])        while queue:            node, depth = queue.popleft()            for relation, neighbor in self.adjacency.get(node, []):                if neighbor in visited:                    continue                visited.add(neighbor)                if depth + 1 <= max_hops:                    found.append((depth + 1, node, relation, neighbor))                    queue.append((neighbor, depth + 1))        return found     def query(self, question):        context = []        seeds = self.vector_retrieve(question, top_k=2)        for score, entity, doc in seeds:            if score > 0:                context.append(doc)                for hop, src, rel, dst in self.graph_retrieve(entity):                    context.append("{} --{}--> {}".format(src, rel, dst))        return context if context else ["未找到相关信息"]  def main():    rag = MiniGraphRAG()    rag.add_triple("失主", "雇佣", "管家", "失主雇佣了管家负责宅邸杂务")    rag.add_triple("失主", "常去", "当铺", "失主最近频繁出入同一条街的当铺")    rag.add_triple("当铺", "接待", "神秘人", "当铺伙计说神秘人多次典当金器")    rag.add_triple("神秘人", "指使", "管家", "管家承认受神秘人指使盗取金币")    rag.add_triple("管家", "供出", "主使", "管家供出幕后主使就是神秘人")     print("=== 传统 RAG(只看关键词匹配)===")    for score, entity, doc in rag.vector_retrieve("金币失窃 谁干的"):        print("  [{}] {}: {}".format(score, entity, doc))     print("\n=== GraphRAG(图遍历多跳推理)===")    for line in rag.query("金币失窃 谁干的"):        print("  " + line)     print("\n=== 图遍历路径(从失主出发 2 跳内)===")    for hop, src, rel, dst in rag.graph_retrieve("失主", max_hops=2):        print("  跳数{}: {} --{}--> {}".format(hop, src, rel, dst))  if __name__ == "__main__":    main()
目的:用纯标准库实现一个迷你 GraphRAG,演示“向量检索找种子实体、图遍历做多跳扩展、融合上下文输出答案”的完整链路。
  1. self.adjacency.setdefault(head, []).append((relation, tail))用邻接表存图,每个实体挂着“边关系 + 邻居实体”的列表。
  2. q_words = set(query.replace("?", "").replace("?", "").split())模拟向量检索的分词环节,用关键词重合度代替真实嵌入模型。
  3. overlap = len(q_words & set(doc.split()))词集合交集大小就是“语义相关度”的简易替身。
  4. queue = deque([(seed, 0)])BFS 队列初始化,元组第二项记录当前深度,用于控制最大跳数。
  5. for relation, neighbor in self.adjacency.get(node, [])遍历当前实体的所有邻居,这就是图检索的“扩展一步”。
  6. found.append((depth + 1, node, relation, neighbor))记录跳数、起点、关系和终点,构成一条可读的推理链。
  7. context.extend("{} --{}--> {}".format(src, rel, dst))把图路径转成文字拼进上下文,大模型据此生成最终答案。
  8. rag.add_triple("失主", "常去", "当铺", "...")录入三元组时同时建立正向和反向边,保证双向遍历。

常见误区

误区“既然有了知识图谱,向量检索就没用了,GraphRAG 应该只靠图来回答问题。”

正解GraphRAG 的核心是“增强”而非“取代”。向量检索擅长语义相似匹配,图谱擅长多跳结构推理,两者错误模式互补。只靠图谱回答,遇到文档里没有实体关系描述的问题会抓瞎;只靠向量,又答不出需要串联多实体的复杂问题。就像办案不能只看联络图而不看公告栏——告示提供背景,联络图提供路径,缺一不可。

为何常见:GraphRAG 名字里“图谱”二字太醒目,让人误以为图是唯一主角,忽略了架构图中始终存在的双通道设计。

误区“把文档丢进大模型,它就会自动抽出一张干净完美的知识图谱,不需要任何人工干预。”

正解大模型抽取实体和关系会幻觉、会漏抽、会有指代不一致(同一人两种写法)。真实工程里必须配置规则校验、实体对齐、去重合并,甚至抽检人工审核。图形容得越烂,多跳推理的结果就越离谱——这是典型的 Garbage in, garbage out。治安官的地图如果画错一条街,再好的侦察技巧也会带偏。

为何常见:技术演示里的图谱总是天然规整,让人忽略了演示数据是精心清洗过的。

误区“多跳推理嘛,跳得越多,挖得越深,答案就越准确。”

正解跳数增加会引入大量无关路径和噪声计算,3 跳之后答案准确性通常断崖式下降,时间和算力成本却指数上升。工程上普遍限制 2~3 跳,还配合路径打分剪枝。破案也不例外:朋友的朋友是重要侦查方向,朋友的朋友的朋友就开始接近八卦了。

为何常见:直觉上“深挖”总是好事,忽略了图搜索中路径爆炸是数量级问题。

误区“上线 GraphRAG 后,所有搜索问答都会变强,简单问题提升也很明显。”

正解对“某文档里的一句话是什么”这类单跳问题,传统 RAG 已经足够好。GraphRAG 额外增加图谱构建、图遍历和融合排序的延迟与维护成本,简单问题上反而可能更慢、更不稳定。它适合的是“跨文档、多实体、多跳关系”的复杂问答——选对战场,才能发挥价值。

为何常见:被复杂问答的案例演示惊艳后,容易高估其普适性,忽略了成本收益的权衡。

面试题

Q1. GraphRAG 相比传统 RAG 最核心的增强是什么?

单选题 · easy

  • A.用更大的向量模型
  • B.引入知识图谱结构← 正确答案
  • C.增加训练数据规模
  • D.改用图数据库存向量

答案:B。GraphRAG 的关键是“图谱增强”,即在向量检索之外叠加知识图谱的实体关系结构。类比小镇破案,传统 RAG 只会翻公告栏,GraphRAG 多了一张人脉联络图。A 只是换更强的公告栏,C 是加更多告示,D 只是换存储位置,都没有引入“关系”这个核心维度。

Q2. 知识图谱最基本的组成单元是什么?

单选题 · easy

  • A.文档和段落
  • B.实体和关系← 正确答案
  • C.标签和分类
  • D.关键词和权重

答案:B。知识图谱由节点(实体)和边(关系)构成,每条边配上头尾实体就是一个三元组。文档段落是 RAG 的切分单位,标签分类是文本标注概念,关键词权重是检索相关概念——它们都不是图谱的基本单元。就像联络图的核心是“人”和“人与人的联系”。

Q3. GraphRAG 索引阶段通常包含哪些环节?

多选题 · mid

  • A.实体抽取← 正确答案
  • B.关系抽取← 正确答案
  • C.向量嵌入← 正确答案
  • D.模型微调

答案:ABC。索引阶段要做两件事:一是把文档切片并做向量嵌入(C),供后续向量检索;二是从文档中抽取实体(A)和实体间关系(B),构建知识图谱。模型微调(D)属于训练环节,不是 GraphRAG 索引的固有步骤。类比巡逻警员登记居民信息时,既要记名字住址,也要记谁认识谁,最后都要录入系统。

Q4. 在三元组 (h, r, t) 中,字母 r 代表什么?

单选题 · easy

  • A.头实体
  • B.关系← 正确答案
  • C.尾实体
  • D.权重常数

答案:B。三元组 (head, relation, tail) 中 h 是头实体,r 是连接两个实体的关系,t 是尾实体。例如 (失主,雇佣,管家) 里 r 就是“雇佣”这条关系。A 和 C 是实体,D 是打分时的概念,都不是 r 的含义。

Q5. 传统 RAG 存在哪些主要局限?

多选题 · mid

  • A.多跳推理困难← 正确答案
  • B.忽略实体间关联← 正确答案
  • C.上下文碎片化← 正确答案
  • D.索引速度过慢

答案:ABC。传统 RAG 按语义相似召回文本块,无法串联跨文档的实体关系(A、B),而且召回的块彼此孤立、缺少结构(C)。索引速度(D)不是 RAG 的固有瓶颈,图索引构建虽然慢但传统 RAG 本身没有这个问题。就像只翻公告栏,看不到告示之间的人情往来。

Q6. 图遍历中控制扩展层数范围的参数是?

单选题 · mid

  • A.学习率
  • B.最大跳数← 正确答案
  • C.批次大小
  • D.嵌入维度

答案:B。最大跳数(max_hops)决定从种子实体出发最多走几步,是控制推理深度和计算量的关键参数。学习率是训练参数,批次大小是数据加载参数,嵌入维度是向量表示参数,三者都与图遍历深度无关。联络图上允许警察问几家邻居,由这个参数决定。

Q7. 混合检索中 λ 在融合公式 Score = λ·S_vec + (1-λ)·S_graph 中的作用是?

单选题 · hard

  • A.控制学习率
  • B.权衡两通道权重← 正确答案
  • C.决定图遍历深度
  • D.设置批处理规模

答案:B。λ(0 到 1 之间)调节向量检索得分和图谱得分的相对权重,λ 大更信语义相似,λ 小更信结构推理。它不参与训练速度(A)、不控制跳数(C)、不决定数据批量(D)。服务台派多少精力看公告栏、多少精力查联络图,就由 λ 说了算。

Q8. 多跳推理路径打分时通常参考哪些信息?

多选题 · mid

  • A.路径总长度← 正确答案
  • B.每条边的置信度← 正确答案
  • C.涉及实体的类型← 正确答案
  • D.向量的维度大小

答案:ABC。路径打分综合路径长度(越短越可信)、边置信度(关系抽取概率越高越可信)、实体类型(匹配问题中已知类型的实体加分)。向量维度(D)是嵌入模型的配置,与路径本身质量无关。破案时,路径越短、每条关系越确凿、涉及的人物越相关,线索越有价值。

Q9. GraphRAG 工程落地中最具挑战性的环节通常是?

单选题 · hard

  • A.图谱抽取质量保障← 正确答案
  • B.向量库选型对比
  • C.GPU 数量扩充
  • D.前端页面渲染

答案:A。实体和关系抽取的质量直接决定图谱上限,幻觉和漏抽会导致整条推理链失真,需要大量校验清洗工作。向量库选型、GPU 资源是工程成本问题,前端渲染与算法核心关系不大。联络图画错一笔,沿着错误路径找到的“真凶”就是冤案。

Q10. 下列哪些场景更适合优先采用 GraphRAG 方案?

多选题 · hard

  • A.跨文档多跳复杂问答← 正确答案
  • B.股权穿透关联分析← 正确答案
  • C.药物副作用潜在关联发现← 正确答案
  • D.关键词精确匹配搜索

答案:ABC。GraphRAG 擅长需要串联多个实体、跨越多个文档的问题:多跳问答(A)、穿透多层股权(B)、药物靶点疾病长链路关联(C)。关键词精确匹配(D)依赖传统倒排索引就足够好了,引入图谱反而增加延迟和复杂度。这些场景的共同特征是“答案藏在朋友的朋友那里”。