系统性完整课程 · 4 个模块

知识图谱
GraphRAG

从三元组到多跳推理,从 Neo4j 到 LLM 增强生成。面向具备基础数据库与 NLP 知识的学习者,由浅入深,直达前沿。

01 · 基础概念 02 · 数据模型 03 · 构建全流程 04 · GraphRAG
01

知识图谱基础概念

理解知识图谱的本质:它不只是一张"图",而是一种让机器理解世界的语言。

知识图谱是什么?

想象一下图书馆的索引卡片系统——每张卡片不仅记录一本书的信息,还标注了"这本书的作者还写了哪些书"、"这个主题与哪些主题相关"。知识图谱就是这样一个系统:用节点表示事物,用表示关系,构建出一张可以被机器理解和推理的语义网络。

爱因斯坦
提出了
相对论

上面这个结构叫做三元组(Triple),是知识图谱的最小单位。格式永远是:主语(Subject)→ 谓语(Predicate)→ 宾语(Object)

💡
核心洞察:知识 = 实体 + 关系

人类的知识本质上是"事物"与"事物之间关系"的集合。知识图谱把这个直觉形式化了——任何可以用"A 与 B 有某种关系"表达的事实,都可以存入知识图谱。

四大核心组成

🔵

实体(Entity)

现实世界中可以独立存在的"事物"。人物、地点、组织、概念都是实体。例如:「北京」「苹果公司」「机器学习」。

🔗

关系(Relation)

连接两个实体的有向边,描述它们之间的语义联系。例如:「创立于」「位于」「属于」「发表了」。

🏷️

属性(Attribute)

描述实体自身特征的键值对。例如:「爱因斯坦.出生年份 = 1879」「北京.人口 = 2100万」。

📐

模式(Schema)

定义图谱的"蓝图":有哪些实体类型、哪些关系类型、每种类型有哪些属性。相当于数据库的表结构定义。

知识图谱 vs 关系型数据库 vs 本体

三者都是组织知识的方式,但侧重点截然不同。理解这个区别,能帮你在实际项目中做出正确的技术选型。

维度 关系型数据库 本体(Ontology) 知识图谱
核心结构表格(行×列)类层次+约束规则节点+有向边
关系表达外键 JOIN,固定 Schema类与属性的逻辑定义一等公民,灵活多样
推理能力强(OWL 推理器)中等(规则+嵌入)
Schema 灵活性严格固定严格定义可半结构化
典型用途事务处理、OLTP领域建模、语义 Web搜索增强、问答、推荐
🔍
关键区别:关系是"一等公民"

在关系型数据库中,"关系"只是外键约束,是二等公民。在知识图谱中,关系本身可以有属性(如"爱因斯坦在1905年发表了相对论"——"发表"这条边上有时间属性),这让它能表达更丰富的语义。

真实世界中的知识图谱

🔍
Google Knowledge Graph

当你搜索"爱因斯坦"时,右侧出现的信息卡片就来自 Google 的知识图谱。它包含超过 5000 亿个事实,支撑着搜索结果的语义理解。

🌐
Wikidata

维基百科背后的结构化数据库,包含超过 1 亿个条目,完全开放。是学术研究和开源项目最常用的知识图谱数据源。

🏥
医疗知识图谱

连接疾病、症状、药物、基因的图谱,支持辅助诊断和药物发现。UMLS(统一医学语言系统)包含超过 300 万个医学概念。

🏢
企业级知识图谱

阿里巴巴的商品知识图谱、美团的 POI 图谱、金融机构的风控图谱——连接企业内部数据孤岛,支撑智能搜索和推荐系统。

核心术语速查

RDF
资源描述框架(Resource Description Framework)

W3C 标准,用三元组描述资源关系。每个节点和边都用 URI 唯一标识,是语义 Web 的基础。

OWL
Web 本体语言(Web Ontology Language)

在 RDF 基础上增加了逻辑推理能力。可以定义"如果 A 是 B 的父类,且 C 是 A 的实例,则 C 也是 B 的实例"这样的推理规则。

SPARQL
RDF 图查询语言

类似 SQL,但专为图结构设计。可以查询"所有在 2000 年后发表过论文、且与图灵奖得主合作过的研究者"这样的复杂模式。

KGE
知识图谱嵌入(Knowledge Graph Embedding)

将实体和关系映射到低维向量空间,使得机器可以通过向量运算进行推理。TransE、RotatE 等是经典算法。

🧠 模块一 · 理解检验

场景

你的团队正在为一家电商平台构建智能推荐系统。数据包括:用户购买记录、商品分类、品牌信息,以及"购买了 A 的用户也购买了 B"这类关联规则。

Q1. 相比传统关系型数据库,知识图谱在这个场景中最核心的优势是什么?

Q2. 「爱因斯坦 → 提出了 → 相对论」这个结构在知识图谱中叫做什么?

Q3. 你需要为医院构建系统,要求能推理出"如果患者有症状X且症状Y,则可能患有疾病Z"。哪种技术最适合?

02

经典模式与数据模型

RDF 三元组 vs 属性图——两种截然不同的世界观,各有其适用的战场。

RDF:万物皆可用 URI 描述

想象一下互联网上的每个网页都有一个唯一地址(URL)。RDF 把这个思路推广到数据世界:用 URI 标识一切,用三元组连接一切。

RDF TURTLE 语法
# 声明命名空间前缀
@prefix ex: <http://example.org/> .
@prefix schema: <http://schema.org/> .

# 三元组:主语 谓语 宾语
ex:Einstein
  schema:name      "Albert Einstein" ;
  schema:birthDate "1879-03-14" ;
  ex:proposed     ex:TheoryOfRelativity .
逐行解读

声明简写前缀 ex:,代替冗长的完整 URI

引入 schema.org 的标准词汇表,复用已有定义

主语:爱因斯坦这个实体(用 URI 唯一标识)

属性:他的名字是字符串 "Albert Einstein"

属性:出生日期

关系:他「提出了」相对论(宾语也是一个实体 URI)

🌐
RDF 的超能力:数据互联

因为所有实体都用全球唯一的 URI 标识,来自不同数据源的 RDF 数据可以自动合并。Wikidata 里的爱因斯坦和 DBpedia 里的爱因斯坦,只要 URI 相同,就是同一个节点——这就是「链接数据(Linked Data)」的核心思想。

属性图:更贴近工程师直觉的模型

如果说 RDF 是学术界的语言,那属性图就是工程师的语言。Neo4j 的 Cypher 查询语言让图操作变得像写英语一样自然:

NEO4J CYPHER
// 创建节点和关系
CREATE (e:Person {
  name: "Albert Einstein",
  born: 1879
})
CREATE (t:Theory {
  name: "Theory of Relativity",
  year: 1905
})
CREATE (e)-[:PROPOSED {
  year: 1905
}]->(t)

// 查询:找到爱因斯坦提出的所有理论
MATCH (p:Person {name: "Einstein"})
      -[:PROPOSED]->(t:Theory)
RETURN t.name, t.year
逐行解读

创建一个「人物」节点,带有姓名和出生年份属性

创建一个「理论」节点,带有名称和年份属性

创建一条「提出了」关系,关系本身也有属性(年份)——这是属性图的独特优势

查询语句:找到名叫爱因斯坦的人...

...通过「提出了」关系连接到的所有理论节点

返回理论的名称和年份

何时选 RDF?何时选属性图?

✅ 选 RDF 当你需要...
🌐跨机构数据互联(政府、学术、开放数据)
🔗与语义 Web 标准(schema.org)集成
🧠OWL 推理能力(自动推断隐含事实)
📚学术研究、知识库发布(Wikidata 风格)
🔄数据长期存档,需要标准化互操作性
✅ 选属性图当你需要...
高性能图遍历(社交网络、推荐系统)
👨‍💻工程团队快速上手,Cypher 比 SPARQL 更直观
🏢企业内部知识图谱(不需要跨机构互联)
🔍GraphRAG、智能搜索、欺诈检测等应用
🛠️需要丰富的生态工具(Neo4j 有完整可视化)
🎯
实用建议

如果你在构建企业级应用(推荐、搜索、问答),选 Neo4j 属性图。如果你在做开放数据发布或需要与语义 Web 集成,选 RDF + SPARQL。两者并不互斥——很多大型系统同时使用两种模型。

OWL:让图谱会「思考」

OWL 让知识图谱具备了自动推理能力。就像侦探从已知线索推断出未知事实,OWL 推理器可以从已有三元组推断出新的三元组:

规则

「哺乳动物」是「动物」的子类

+
事实

「狗」是「哺乳动物」的实例

推断

「狗」也是「动物」的实例(自动推断)

OWL / TURTLE
# 定义类层次
ex:Mammal rdfs:subClassOf ex:Animal .

# 定义对称关系(A是B的兄弟 → B也是A的兄弟)
ex:isSiblingOf
  a owl:SymmetricProperty .

# 定义传递关系(A是B祖先,B是C祖先 → A是C祖先)
ex:isAncestorOf
  a owl:TransitiveProperty .
逐行解读

声明「哺乳动物」是「动物」的子类——推理器会自动继承所有动物的属性

声明「是兄弟姐妹」是对称关系——如果 A 是 B 的兄弟,则 B 也是 A 的兄弟(无需重复存储)

声明「是祖先」是传递关系——如果 A 是 B 的祖先,B 是 C 的祖先,则 A 也是 C 的祖先

SPARQL:图谱的查询语言

SPARQL 的核心思想是「模式匹配」——你描述你想找的图模式,数据库返回所有匹配的子图:

SPARQL 查询示例
SELECT ?person ?award
WHERE {
  ?person rdf:type    ex:Scientist .
  ?person ex:wonAward ?award .
  ?award  rdf:type    ex:NobelPrize .
  ?person ex:bornIn   ?country .
  FILTER(?country = "Germany")
}
ORDER BY ?person
逐行解读

我想要返回「人物」和「奖项」两个变量

条件开始:这个人必须是「科学家」类型

这个人必须获得了某个奖项

这个奖项必须是「诺贝尔奖」类型

这个人必须出生在某个国家

过滤:只要出生在德国的

按人名排序返回结果

🧠 模块二 · 理解检验

场景

你的公司要构建一个内部员工知识图谱,连接员工、项目、技能、部门。主要用途是智能搜索和组织架构分析。数据完全在公司内部,不需要与外部系统互联。

Q1. 你会选择哪种数据模型?

Q2. OWL 定义了「上级」是传递属性,且「A 是 B 的上级,B 是 C 的上级」。查询「A 的所有下属」会返回什么?

03

知识图谱构建全流程

从原始数据到可查询的图谱,8 个步骤,每步都有工具和代码示例。

构建流水线总览

构建知识图谱就像建造一座城市:先规划蓝图,再采集建材,清洗加工,最后组装成型并持续维护。每个阶段都有专门的工具和方法论。

1
定义范围与本体设计

确定领域边界、实体类型、关系体系——这是整个图谱的「宪法」

ProtégéOWLdraw.io
2
数据采集

从结构化(DB/CSV)、半结构化(JSON/XML)、非结构化(文本/网页)多源采集

ScrapyApache KafkaPandas
3
数据清洗与预处理

去重、归一化、缺失值处理——垃圾进,垃圾出

PandasOpenRefineDedupe
4
知识抽取

NER(命名实体识别)+ RE(关系抽取)——从文本中挖掘三元组

spaCyBERTStanford OpenIE
5
知识融合

实体对齐、消歧——确保「苹果公司」和「Apple Inc.」是同一个节点

DeepMatcherLIMESSilk
6
知识存储

图数据库或三元组存储——选择合适的存储引擎

Neo4jAmazon NeptuneApache Jena
7
知识推理与查询

SPARQL/Cypher 查询 + 规则推理 + 嵌入式推理(KGE)

SPARQLCypherPyKEEN
8
维护与更新

增量更新、质量评估——图谱是活的,需要持续维护

Apache AirflowGreat Expectations

步骤 4:知识抽取——从文本挖掘三元组

这是整个流程中技术含量最高的环节。给定一段文本,我们需要自动识别出其中的命名实体,并抽取它们之间的关系。

PYTHON · spaCy NER
import spacy

# 加载预训练的 Transformer 模型
nlp = spacy.load("en_core_web_trf")

text = "Elon Musk founded SpaceX in 2002."
doc = nlp(text)

for ent in doc.ents:
    print(ent.text, ent.label_)

# 输出:
# Elon Musk  PERSON
# SpaceX     ORG
# 2002       DATE
逐行解读

导入 spaCy——工业级 NLP 工具包

加载基于 Transformer 的预训练模型(精度更高)

输入文本:一句关于马斯克创立 SpaceX 的句子

用模型处理文本,生成包含实体信息的文档对象

遍历识别出的所有命名实体,打印文本和类型

识别结果:人名、组织名、日期都被正确标注

PYTHON · 关系抽取(RE)
from transformers import pipeline

# 使用 REBEL 端到端关系抽取模型
re_pipe = pipeline(
    "text2text-generation",
    model="Babelscape/rebel-large"
)

text = "Elon Musk founded SpaceX in 2002."
result = re_pipe(text, max_length=512)

# 解析输出的三元组:
# subject:  Elon Musk
# relation: founded by
# object:   SpaceX
逐行解读

从 HuggingFace Transformers 库导入 pipeline 工具

加载 REBEL 模型——专门训练用于端到端关系抽取的 BART 模型

输入原始文本,无需预先标注实体

模型直接输出结构化的三元组文本

解析结果:主语「Elon Musk」、关系「创立了」、宾语「SpaceX」

步骤 5:知识融合——解决「同名异实」与「异名同实」

现实数据中,同一个实体可能有多种写法:「苹果公司」「Apple Inc.」「AAPL」。知识融合就是把这些不同的表述统一到同一个节点上。

🔗 知识融合过程模拟
0 / 5 条消息

步骤 6:知识存储——选择合适的引擎

🔵

Neo4j

最流行的属性图数据库。原生图存储,Cypher 查询语言,完整的可视化工具。适合企业级应用和 GraphRAG。

☁️

Amazon Neptune

AWS 托管的图数据库,同时支持属性图(Gremlin)和 RDF(SPARQL)。适合云原生架构,免运维。

🦅

Apache Jena

Java 生态的 RDF 框架,内置 TDB 三元组存储和 SPARQL 引擎。适合学术研究和语义 Web 应用。

Virtuoso

高性能 RDF 三元组存储,DBpedia 和 Wikidata 的底层存储引擎。支持超大规模数据集(数十亿三元组)。

步骤 7:知识图谱嵌入(KGE)——让图谱会「预测」

KGE 的核心思想:把实体和关系都变成向量,然后用向量运算来预测缺失的三元组。

PYTHON · PyKEEN TransE
from pykeen.pipeline import pipeline

# 训练 TransE 模型
result = pipeline(
    model='TransE',
    dataset='FB15k237',
    epochs=100,
    embedding_dim=128
)

# 链接预测:给定主语和谓语,预测宾语
model = result.model
scores = model.predict_t(
    h='Paris',
    r='capital_of'
)
# 返回最可能的宾语:France(置信度最高)
逐行解读

导入 PyKEEN——专门用于知识图谱嵌入的 Python 库

使用 TransE 算法:核心思想是 h + r ≈ t

在 FB15k-237 基准数据集上训练 100 轮

嵌入维度 128——每个实体和关系用 128 维向量表示

链接预测:给定「巴黎」和「首都_of」关系

模型预测最可能的宾语——「法国」得分最高

🧮
KGE 的工程价值

KGE 不只是学术玩具。它可以用于:补全图谱中缺失的关系(链接预测)、发现潜在的实体相似性(实体对齐)、以及为 GraphRAG 提供语义相似度计算能力。

完整流水线数据流动画

追踪一条数据从原始文本到图谱节点的完整旅程:

📄
原始文本
🔍
NER 抽取
🔗
知识融合
🗄️
图谱存储
💡
查询推理
点击「下一步」开始追踪数据流
0 / 5 步

🧠 模块三 · 理解检验

场景

你在构建一个新闻知识图谱,从每天数千篇新闻文章中自动抽取人物、组织、事件之间的关系。你发现同一个人物「张伟」在不同文章中出现了 47 次,但其中有些是不同的人(这是中国最常见的名字之一)。

Q1. 这个问题属于知识图谱构建的哪个环节,应该用什么方法解决?

Q2. TransE 模型的核心公式是 h + r ≈ t。给定「巴黎 + 首都_of」,模型能做什么?

04

前沿扩展:GraphRAG

当知识图谱遇上大语言模型——多跳推理、可解释性、减少幻觉的下一代问答系统。

先回顾:什么是 RAG?

RAG 解决了 LLM 的两大痛点:知识截止日期和幻觉。它的工作方式就像开卷考试——先查资料,再作答:

1

用户提问

2

向量检索相关文档片段

3

将文档注入提示词

4

LLM 基于上下文生成回答

⚠️
传统向量 RAG 的局限

向量检索擅长找「语义相似」的文档,但对于需要多步推理的问题(如「找出所有与诺贝尔奖得主合作过、且研究方向与量子计算相关的中国科学家」),它会失败——因为这需要在图上进行多跳遍历,而不是简单的相似度匹配。

GraphRAG:用图谱作为检索骨架

GraphRAG 的核心创新:把「检索」从向量空间搬到图空间。

传统向量 RAG
📄检索单元:文档片段(chunk)
🔢检索方式:向量余弦相似度
🔗关系感知:无(片段之间孤立)
🧩多跳推理:困难
🔍可解释性:低(黑盒相似度)
🌀幻觉风险:较高
GraphRAG
🕸️检索单元:子图(实体 + 关系路径)
🗺️检索方式:图遍历 + 路径匹配
🔗关系感知:强(显式关系路径)
🧩多跳推理:原生支持
🔍可解释性:高(路径可追溯)
幻觉风险:显著降低

GraphRAG 完整流水线

让我们用一个真实问题追踪 GraphRAG 的完整工作流程:「哪些科学家既获得了诺贝尔奖,又与图灵奖得主有合作关系?」

🤖 GraphRAG 问答流程模拟
0 / 5 步骤

GraphRAG 四步流水线

📚
① 构建图谱
从文档语料中抽取实体和关系,构建或接入已有知识图谱
🔄
② 查询转化
将用户自然语言查询转化为图遍历操作(Cypher/SPARQL)
🕸️
③ 子图检索
在图谱中执行多跳遍历,检索相关实体、关系和路径
④ 增强生成
将结构化子图上下文注入 LLM,生成有据可查的回答
🎯
GraphRAG 的三大核心优势

多跳推理(沿关系路径跨越多个节点)、可解释性(每个回答都有图路径作为证据链)、减少幻觉(LLM 基于结构化事实生成,而非凭空想象)。

实战:Neo4j + OpenAI 构建 GraphRAG Pipeline

以下是一个完整的 GraphRAG 问答 Pipeline,使用 LangChain 连接 Neo4j 和 OpenAI:

PYTHON · LangChain + Neo4j GraphRAG
from langchain_community.graphs import Neo4jGraph
from langchain.chains import GraphCypherQAChain
from langchain_openai import ChatOpenAI

# 1. 连接 Neo4j 知识图谱
graph = Neo4jGraph(
    url="bolt://localhost:7687",
    username="neo4j",
    password="password"
)

# 2. 初始化 LLM
llm = ChatOpenAI(
    model="gpt-4o",
    temperature=0
)

# 3. 构建 GraphRAG Chain
chain = GraphCypherQAChain.from_llm(
    llm=llm,
    graph=graph,
    verbose=True
)

# 4. 自然语言问答
result = chain.invoke(
    "Who are the scientists that won Nobel Prize and collaborated with Turing Award winners?"
)
print(result["result"])
逐行解读

导入 Neo4j 图数据库连接器

导入 GraphCypherQAChain——自动将自然语言转为 Cypher 查询的核心组件

导入 OpenAI 的 GPT-4o 模型

连接本地 Neo4j 数据库(生产环境替换为实际地址)

初始化 LLM,temperature=0 确保回答稳定可重复

构建 GraphRAG Chain:LLM 负责将问题转为 Cypher,执行查询,再生成回答

verbose=True 会打印中间生成的 Cypher 查询,方便调试

用自然语言提问,Chain 自动完成「问题→Cypher→图查询→回答」全流程

主流工具与框架

🏢
Microsoft GraphRAG

微软开源的 GraphRAG 框架,自动从文档语料构建层次化知识图谱(社区摘要),支持全局查询和局部查询两种模式。特别适合大规模文档语料的问答场景。

🦙
LlamaIndex Knowledge Graph

LlamaIndex 内置的知识图谱索引,支持自动从文本抽取三元组并存入图数据库,提供 KnowledgeGraphQueryEngine 进行图增强问答。

🔗
LangChain + Neo4j

LangChain 提供 Neo4jGraph、GraphCypherQAChain 等组件,可以快速将 Neo4j 知识图谱接入 LLM 问答流程。是目前工程落地最成熟的方案。

🌐
NebulaGraph + LLM

国产开源图数据库 NebulaGraph 提供了与 LlamaIndex 和 LangChain 的集成方案,支持超大规模图谱(数十亿节点)的 GraphRAG 应用。

Microsoft GraphRAG 快速上手

Microsoft GraphRAG 的核心创新是「社区摘要」——它不只是存储三元组,还会自动识别图谱中的社区结构,为每个社区生成摘要,支持全局性问题的回答:

BASH · Microsoft GraphRAG
# 安装
pip install graphrag

# 初始化项目
python -m graphrag.index --init \
  --root ./my-project

# 将文档放入 input/ 目录后,构建图谱
python -m graphrag.index \
  --root ./my-project

# 全局查询(适合宏观问题)
python -m graphrag.query \
  --root ./my-project \
  --method global \
  --query "What are the main themes?"

# 局部查询(适合具体实体问题)
python -m graphrag.query \
  --root ./my-project \
  --method local \
  --query "Who is the key person?"
逐行解读

安装 Microsoft GraphRAG 包

初始化项目目录,生成配置文件(需要填入 OpenAI API Key)

将你的文档(.txt/.pdf 等)放入 input/ 目录

构建图谱:自动抽取实体关系、识别社区、生成摘要(耗时较长)

全局查询:适合「这批文档的主要主题是什么」这类宏观问题

局部查询:适合「某个具体实体的相关信息」这类精确问题

🔬
全局查询 vs 局部查询

Microsoft GraphRAG 的独特之处在于支持两种查询模式:全局查询利用社区摘要回答宏观问题(如「这批文档的整体主题」),局部查询利用实体邻域回答具体问题(如「某人的相关信息」)。传统 RAG 只能做局部查询。

🧠 模块四 · 理解检验

场景

你在为一家律师事务所构建智能问答系统。用户会问类似「找出所有涉及 A 公司、且与 B 案件有关联、同时在 2020 年后发生的合同纠纷案例」这样的复杂问题。

Q1. 为什么这个场景更适合 GraphRAG 而不是传统向量 RAG?

Q2. GraphRAG 相比传统向量 RAG 可解释性更高,这种可解释性具体体现在哪里?

Q3. Microsoft GraphRAG 相比普通 GraphRAG 最独特的创新是什么?

🎓 课程总结

01
知识图谱基础

三元组是最小单位,实体+关系+属性构成图谱,Schema 定义蓝图。知识图谱让关系成为一等公民。

02
数据模型选型

RDF 适合跨机构互联和语义 Web,属性图(Neo4j)适合企业应用。OWL 提供推理能力,SPARQL/Cypher 提供查询能力。

03
构建全流程

8 步流水线:本体设计→数据采集→清洗→NER/RE 抽取→知识融合→存储→推理→维护。每步都有成熟工具支撑。

04
GraphRAG 前沿

知识图谱 + LLM 的最佳结合点。多跳推理、可解释性、减少幻觉——GraphRAG 是下一代企业智能问答的核心架构。

🚀
下一步学习路径

推荐实践路径:① 用 Neo4j Sandbox 免费体验图数据库;② 在 Wikidata 上练习 SPARQL 查询;③ 用 LangChain + Neo4j 构建一个小型 GraphRAG 问答系统;④ 阅读 Microsoft GraphRAG 论文(arxiv: 2404.16130)。