知识图谱实战(三):图查询调用与 GraphRAG(完整代码)

图谱建好了怎么用?三层用法:Neo4j Browser 手动查、Python API 封装调用、和 LLM 结合做 GraphRAG(把图谱当"资料库"让大模型基于图谱回答)。这篇给完整可运行代码,收尾"采集→构建→调用"全流程。

前言

《知识图谱(一)数据采集》采数据、《知识图谱(二)Neo4j 构建》建图,这篇解决"怎么用":别人/系统怎么问知识图谱?答案分三种层次:

  1. 直接查

    :Neo4j Browser 里写 Cypher(《知识图谱(二)Neo4j 构建》讲过基础);

  2. 程序调用

    :Python 把图查询封装成函数,供业务系统调用;

  3. GraphRAG

    :把"图查询结果"当作事实喂给大模型,让 LLM 基于图谱回答——这是当前最火的结合方式,比纯 RAG(向量检索)更能回答"关系型问题"。
    图片

一、Cypher 查询进阶(三种常见问题)

<span leaf=""><span>// 1. 某实体的所有直接关系</span></span>

shortestPath 回答"两人几度人脉"这类问题,是图的独有能力,SQL 很难写。

图片

二、Python API 封装(供业务调用,完整代码)

<span leaf=""><span>pip</span>&nbsp;install neo4j requests</span>
<span leaf=""><span># kg_query.py — 图查询 API 封装(完整可运行)</span></span>

运行验证python kg_query.py,期望打印出 《知识图谱(一)数据采集》/《知识图谱(二)Neo4j 构建》导入的三元组对应结果(如 华为的直接关系: [('总部位于', '深圳'), ('创始人', '任正非'), ...])——程序调用链路即通。

三、GraphRAG:图谱 + 大模型(完整代码)

核心思路:问题 → LLM 抽出实体 → 图库查该实体的周边事实 → 把事实拼给 LLM 回答。这样回答有"图谱依据",还能追关系链,比向量 RAG 更精确:

<span leaf=""><span># kg_rag.py — GraphRAG(完整可运行;需本地 Ollama,见 《ControlNet 精准控图与 LoRA》装法)</span></span>

运行验证:先确认 Ollama 在跑(ollama list),再 python kg_rag.py,期望模型基于图谱事实回答"任正非是华为的创始人"这类答案(而不是瞎编)。实体没抽准/回答不对,先看"常见坑"。

四、RAG vs GraphRAG(什么时候用哪个)

| 对比

|

向量 RAG(《RAG 知识库实战》)

|

GraphRAG(本篇)

数据形态

|

文档切片 + 向量

|

实体 + 关系图

| |

擅长

|

“文档里有什么"模糊检索

|

“A 和 B 什么关系"精确查询

| |

回答依据

|

相似段落

|

图结构事实

| |

结合使用

|

两者互补:常规问答用 RAG,关系型问题走图谱

| |

实践建议:文档多先上 RAG;关系密集(组织架构、供应链、人脉)再叠图谱——两个都做就是完整的"企业知识中台”。

五、常见坑

| 坑

|

解决

实体没抽准

|

提示词约束"从问题中提取名词实体”;图谱里做实体归一化《知识图谱(一)数据采集》

| |

图里查不到

|

实体名要和导入时一致(大小写/全称);先 MATCH (n) RETURN n.name 看有哪些

| |

Ollama 没装/没启动

|

按 《ControlNet 精准控图与 LoRA》装 Ollama 并 ollama run qwen2.5:7b 拉模型

| |

回答胡说

|

提示词里强调"仅依据图谱事实";事实不足要求"明确说明"

| |

数据太少答不了

|

扩充采集《知识图谱(一)数据采集》+ 导入《知识图谱(二)Neo4j 构建》数据量

|

六、总结

  • 一句话:图谱调用 = Cypher 查询 + Python 封装 + GraphRAG 喂给大模型

  • 三篇连起来就是完整闭环:47 采集抽取 → 48 Neo4j 建图 → 49 查询与 GraphRAG——从数据到可用的知识图谱服务;

  • 接单角度:企业知识图谱问答、智能档案检索、供应链关系分析都能用这套骨架交付,加界面/接口就是完整产品。

觉得有用点个赞收藏,知识图谱三连篇完结,有问题评论区见。