Skip to content

Graph RAG 面试题

内容整理自学习笔记,仅供面试备考参考;不构成录用、培训或考试承诺。

1. 为什么需要 Graph RAG?

基于向量嵌入的语义搜索虽然强大,但存在精度问题。例如 "保温大棚" 和 "保温杯" 在通用语义(Embedding)上高度相关,可能作为错误的上下文引入幻觉。

知识图谱可以有效缓解这种问题:

  • 利用领域知识图的结构化关系过滤不相关结果
  • 减少纯语义搜索导致的不准确性
  • 利用实体间的关系支持多跳推理

2. 什么是 Graph RAG?

Graph RAG 是一种基于知识图谱的检索增强技术:

  • 将实体和关系以图的形式表达
  • 将知识图谱等价于一个超大规模词汇表,实体和关系对应单词
  • 在检索时将实体和关系作为单元进行联合建模

3. Graph RAG 的实现思路

核心流程:

用户查询 → 实体提取 → 子图构建(上下文) → LLM生成回答
python
def simple_graph_rag(query_str, nebulagraph_store, llm):
    entities = _get_key_entities(query_str, llm)
    graph_rag_context = _retrieve_subgraph_context(entities)
    return _synthesize_answer(query_str, graph_rag_context, llm)

详细步骤:

Step 1:提取关键实体

python
def _get_key_entities(query_str, llm=None, with_llm=True):
    # 使用 LLM 从问题中提取关键实体
    # 扩展同义词
    return _expand_synonyms(entities)

Step 2:检索子图

python
def _retrieve_subgraph_context(entities):
    # 以提取的实体为种子节点
    # 在图谱中进行 2 跳甚至更深的遍历
    # 获取子图上下文

Step 3:生成回答

python
def _synthesize_answer(query_str, graph_rag_context, llm):
    return llm.predict(PROMPT_SYNTHESIZE_AND_REFINE, query_str, graph_rag_context)

示例

查询:"Tell me events about NASA"

提取关键词:['NASA', 'events']

召回的二度关系

nasa ['public release date', 'mid-2023']
nasa ['announces', 'future space telescope programs']
nasa ['publishes images of', 'debris disk']
nasa ['discovers', 'exoplanet lhs 475 b']

这些结构化知识作为上下文送入 LLM 完成最终回答。

4. Graph RAG 与向量 RAG 的融合

知识图谱召回可以作为额外一路召回与传统向量召回进行融合,综合利用:

  • 向量召回的语义泛化能力
  • 图谱召回的结构化关系能力

5. Graph RAG 的排序优化

当图谱规模很大时,子图召回可能引入多条不相关路径。需要引入路径排序环节:

粗排阶段(LightGBM)

根据 Query 和候选路径的特征进行初筛,保留 Top-N 条路径。特征包括:

特征类别具体特征
文本特征字符重合数、词重合数、编辑距离、字符 Jaccard 相似度、词语 Jaccard 相似度
图特征路径跳数、路径长度、路径中的关系数、路径中的实体个数、路径中的答案个数
匹配特征路径字符是否全在 Query 中、Query 和路径是否都包含数字、数字 Jaccard 相似度

精排阶段(预训练语言模型)

计算 Query 与粗排阶段保留路径的语义匹配度,选择得分 Top 2-3 的答案路径作为最终答案。

6. Graph RAG 的局限性

  1. 子图噪声:召回的多条路径中可能出现不相关内容
  2. 实体识别精度:关键词提取方式较为粗暴,精度有限
  3. 依赖知识图谱质量:若图谱数据量和广度不够,可能引入噪声
  4. 两阶段排序成本:粗排+精排增加了流程复杂度