正在学习知识图谱系列的朋友,一定对知识图谱与RAG(检索增强生成)的结合很感兴趣。二者结合最大优势在于实现全局数据关系表示。
传统RAG只能找到top-k个文本块,一旦文本块过多超出LLM上下文限制,回答质量就会受影响,而知识图谱能轻松解决这类问题。
比如用户问“有多少位于Germany的供应商” ,LLM结合知识图谱,通过Cypher查询可直接给出“有3家供应商位于Germany”的答案。
为了今天分享,从数据处理到构建知识图谱,如今要将KG接入RAG。
没看过之前内容的朋友,可回顾:
- day1:数据处理,转为知识图谱标准数据
- day2:构建知识图谱,存到Neo4J
- day3:企业批量创建,工程化处理知识数据
- day4:RAG学习,深入学langchain核心
- day5:GraphRAG融合,也就是本篇内容
今天将由浅入深,边实践边学方法论。
下面直接进入干货:
一、向量与相似文本检索
向量在机器学习中,是将对象和概念表示为连续数字(向量嵌入),通过向量空间距离判断语义相似性 。
常用的文本嵌入模型有Word2Vec、GLoVE等,图像嵌入常用VGG等CNN模型。
计算向量距离判断相似性,常见指标有欧氏距离、余弦相似度等,想深入了解可评论交流。
二、用neo4j图空间创建索引
在neo4j创建索引并接入RAG时,因图数据库数据量大,需指定索引节点。比如公司不同部门数据要隔离,避免泄密。
实操时,先激活conda环境,进入jupyter,检查.env文件key。然后加载key,用以下代码索引指定节点:
三、发起查询找相似元数据
索引完成后,可进行检索。先从单次查询入手,如查询"Andrew"员工节点:
四、精锁查询
比如只查询国家为“UK”的节点:
五、搭建chat应用
掌握上述内容后,用三步搭建图数据库chat应用:
1. 定义提示词:告知模型不知道的内容不要乱答
2. 创建查询引擎:用索引和提示词模板组成
3. 发起查询:如询问“介绍一下 Andrew?” ,模型会从节点获取信息并回答
六、自然语言转Cypher
索引占用资源,RAG实时性强。新数据到neo4j后,可用LLM将自然语言转Cypher实现实时访问修改,但需提前分配权限避免数据被误操作。
先连接neo4j,再用Few-Shot Prompting方法编写提示词教LLM写Cypher,并创建链式实例处理:
领取专属 10元无门槛券
私享最新 技术干货