免费POC, 零成本试错
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


使用Coze搭建你的知识图谱,GraphRAG原理及实战讲解(一)

发布日期:2025-08-28 08:48:00 浏览次数: 1537
作者:AI-Tech实验室

微信搜一搜,关注“AI-Tech实验室”

推荐语

从Native RAG到Graph RAG,解锁知识库搭建新姿势,解决复杂场景检索难题。

核心内容:
1. Native RAG的局限性及Graph RAG的优势对比
2. Graph RAG的核心原理:实体关系建模与存储机制
3. 实战案例解析:电影知识图谱的构建与应用

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家

之前咱们已经系统介绍了Native RAG的基本原理和使用。大家已经可以借助各种平台搭建属于自己的知识库了。

Native RAG的好处是上手比较容易,但缺点就是上限不高,无法建立块跟块之间的联系,检索效果往往只能达到6-70分的水平,根本不敢上生产。

那么今天咱们就开个新坑来聊聊Graph RAG,看看它是怎么解决复杂知识场景的。

Native RAG回顾

咱们先来简单复习一下Native RAG

Native RAG

Native RAG会有两个大的链路,入库检索

  • 入库链路主要会涉及到数据清洗数据分块向量化等。
  • 检索链路主要涉及检索优化多路召回结果重排生成优化等。
Native RAG的例子

不太了解的小伙伴也建议回去补补课:

Native RAG从理论到实践系列

Graph RAG是啥

GraphRAG 是一种结构化的、分层的检索增强生成(RAG)方法

在知识库构建的时候,会把你的知识转化成Graph结构,并存储进Graph数据库中。

Graph数据库一般不会直接存储数据片段,而是会存储数据实体(Entity),并且会建立实体和实体之间的数据关系(Relationship),这也是Graph RAG最重要的一个环节。

数据实体和数据关系

举个例子:

# 原文
电影雪季过客上映于2006年。这是一部剧情/爱情电影,豆瓣评分8.3分,2006年上映以来好评如潮。导演马克·埃文斯 ,主演艾伦·瑞克曼和埃米丽·汉普希尔。

# 实体一般都是有意义的名词,如:人名、地名、物品名等。
# 所以我们能够得到的实体是
雪季过客,2006年,剧情电影,爱情电影,豆瓣8.3分
马克·埃文斯,艾伦·瑞克曼,埃米丽·汉普希尔

# 实体关系用来描述两个实体之间的关联,一般都是动词
# 我们能得到的实体关系如下:
上映,分类,评分,导演,主演

# 最终我们得到一组实体&实体关系
Trunk1: 
(雪季过客)-[上映]->(2006年)
Trunk2:
(雪季过客)-[类型]->(剧情)
(雪季过客)-[类型]->(爱情)
(雪季过客)-[豆瓣评分]->(8.3分)
Trunk3:
(雪季过客)-[导演]->(马克埃文斯)
(雪季过客)-[主演]->(艾伦瑞克曼)
(雪季过客)-[主演]->(艾米丽汉普希尔

数据存储到Graph数据库的样子如下:

Graph数据样例

那么在检索的时候,我们就能很轻松的顺着实体关系探索相关知识。

Native RAG 对比 Graph RAG

现在我有一批电影的数据,大概几万部电影

每一部电影的数据长这样:

电影样例数据

使用Native RAG进行分块、向量化之后,我们可以很轻松的召回电影的数据。

# 例子1
Q:雪季过客啥时候上映的?
A:2006年
# 例子2
Q:雪季过客导演是谁?
A:马克·埃文斯,同时他也担任本片的编剧。

由于我们把每一步影片的基本信息当做一个Chunk存储在向量库中,那么我们很容易能够回答有关这部电影的所有问题。

但是,如果问题变成:

# 例子1
Q:雪季过客的导演还出品过哪些影片?

# 例子2
Q:今年一共上映了有多少部日本电影?

由于知识库里面,并没有这样的数据,所以检索的效果就不会太好,或者说需要在工程上做很多的补偿才能够勉强达到效果。

但是使用Graph RAG就能够很轻松的查询相关数据。

Graph RAG的工作机制

Graph RAG的实现机制会比Native RAG复杂很多。但是总体来说也是两个大的模块,数据构建数据检索

数据构建

数据构建主要会经过如下的几个步骤:

步骤
说明
数据分块
跟Native RAG相同,把复杂的文章切成长度适中的段落
实体抽取
使用大模型抽取实体和实体关系
实体入库
把实体&实体关系存储Graph数据库
社区聚类
根据实体相关性进行社区聚类,并生成社区摘要
向量化
把实体、实体关系、社区信息存入向量数据库,方便后续做语义检索

详细的流程见下图:

Graph RAG知识构建流程

数据检索

数据检索其实有非常多的策略,需要根据不同的情况进行调整,咱们后续的文章也会详细介绍。

这里介绍两种:

  • 全局搜索Global Search): 检索社区摘要信息并返回。
  • 本地搜索(Local Search): 检索实体信息,并通过实体关系扩大搜索面积。

大致的原理如下图:

Graph RAG检索流程

体验Graph RAG

了解了基本原理后,咱们就来实际上手体验一下。使用Coze工作流搭建一个简单的GraphRAG。

Graph数据库

首先咱们要选择一款Graph数据库,这里咱们使用Neo4j。

https://console.neo4j.io/

支持本地部署和在线使用两种方式,咱们可以先使用他的免费体验版。

创建实例之后,点击Query就可以连接到咱们的数据库了,右侧可以编写Cypher查询语句操作数据库。

注意创建实例的时候会生成数据库的账号和密码,要妥善保管,后续会需要用到。

Cypher

咱们简单知道Cypher语句,类似SQL就好了,可以操作数据库进行增删改查。

这里放几个最简单的例子,感兴趣的可以自己去看官方文档。

# 创建一个实体"电影",名字叫拯救大兵瑞恩
CREATE(m:电影{name:"拯救大兵瑞恩"})
# 创建另一个实体"人员",名字叫汤姆汉克斯
CREATE(p:人员{name:"汤姆汉克斯"})
# 创建一个关系,拯救大兵的主演是汤姆汉克斯
CREATE(m)-[:主演]->(p)
# 找到所有的电影和他们的主演,并返回
MATCH(m:电影)-[:主演]-(p:人员)
RETURN m.name, p.name

把上面的查询语句复制到查询框中就可以体验GraphRAG了

Coze工作流搭建电影知识图谱

完成之后的基本功能示例:

# 示例1
紫日的导演还出出品过什么其他电影?
# 示例2
有哪些日语电影?
# 示例3
紫日的基本介绍?

为了方便演示和大家理解,这里不引入向量数据库,直接构建查询语句操作图数据库。

知识图谱构建

首先使用一个循环处理多条数据:

  1. 从远端获取电影数据
  2. 清洗数据,去除无用数据
  3. 调用大模型提取实体,并生成查询语句
  4. 调用接口插入数据到数据库
知识图谱构建链路

实体、实体关系提取

其实工作流非常简单,核心是如何提取实体,这里的提示词需要根据不同的业务、数据场景进行调整。

# 角色
实体提取大师
# 任务
1. 根据输入的数据,尽可能全面的提取实体和实体关系,并建立实体和实体之间的关联。
2. 实体必须从[实体列表]中选取,不得创造实体。
3. 实体关系必须从[实体关系列表]中选取,不得创造实体关系。
4. 实体具备属性,参考[实体属性表],不得创造实体属性。
4. 不要解释,不要额外输出其他内容,严格按照输出的要求进行。
5. 最终转换成Cypher格式,方便我直接插入到neo4j数据库中。
# 实体列表
[影片, 语种...]
# 实体关系
[分类,语言...]
# 实体列表和实体关系的映射
(影片)-[上映时间]->(年份)
...
# 实体属性表
(影片{name:"String", intro:"String"})
...
# 输出示例
MERGE(m:影片{name:"拯救大兵",intro:"故事发生在..."})
MERGE(l:语种{name:"英语"})
MERGE(m)-[n:语言]-[l]
...

调用neo4j数据库

咱们使用http模块直接调用即可:

# $id 是你的数据库实例ID,在neo4j实例页面可以看到
# $key 是你的账号密码base64
# $query 你的实际查询query
# 在命令行中使用这个命令生成$key:echo -n "你的账号:你的密码" | base64
# 账号密码创建neo4j实例的时候有保存。
curl -X POST "https://$id.databases.neo4j.io/db/neo4j/query/v2" \
  -H "Authorization: Basic $key" \
  -H "Content-Type: application/json" \
  -d '{
  "statement": "$query",
  "parameters": {}
}'

知识图谱检索

  1. 使用大模型识别用户的意图,并拆解成Cypher查询语句。
  2. 实际查询数据。
  3. 根据查询到的数据和用户问题总结答案。
知识图谱检索

实体检索提示词

# 角色
neo4j数据检索助手
# 任务
1. 理解用户的问题,并把用户的问题转化成Cypher查询语句。
2. 从图数据库中尽可能全面的查询和用户问题相关的内容。
3. 不需要回答用户的问题,也不需要解释。
4. 只需要输出Cypher的查询语句,方便我后续直接调用neo4j数据库。
5. 可用的实体列表、实体关系、映射关系见下图。
6. 不要自己创造实体、实体关系和映射关系。
# 实体列表
[影片...]
# 实体关系
[分类...]
# 实体列表和实体关系的映射
(影片)-[上映时间]->(年份)
...
# 实体属性表
(影片{name:"String", intro:"String"})
...
# 输出示例
Q: 找到1994年安东尼导演的作品。
MATCH(m:影片)-[:上映时间]->(n:年份{name:1994}) WITH m MATCH(m)-[:导演]->(p:人员{name:"安东尼"}) RETURN p.name as name

结果预览

由于样例数据不多,所以检索的结果不代表真实情况哈,如果想要获得很好的检索效果,需要导入全量的电影数据。

# 示例1
Q: 有哪些日本电影?
A: 有以下日本电影:《驾驶我的车》《世界奇妙物语 06秋之特别篇》《何时是读书天》《隐剑鬼爪》《哆啦A梦:大雄与风之使者》《宛如阿修罗》《星之声》《精灵宝可梦:水都的守护神 拉帝亚斯与拉帝欧斯》《GO!大暴走》《哆啦A梦:大雄与翼之勇者》《心动》《不夜城》《海上花》《烟花》。 
# 示例2
Q:谁出演过两部以上的电影作品?
A:金城武出演过两部以上的电影作品。
# 示例3
Q:金城武都演了啥电影?
A:金城武出演的电影有《心动》《不夜城》。

总结

今天我们大概了解了Graph RAG的基本工作原理和能力边界,并且上手体验了一把Graph RAG。

目前的案例还比较简单,随着项目的深入,我们也会不断演进和迭代工作流。

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询