【AI落地应用实战】RAGFlow + 知识图谱Knowledge Graph + Deepseek + 知识库构建初步探索
之前有提到,检索增强生成(Retrieval-Augmented Generation, RAG)作为一种结合信息检索与生成模型的技术,已经在问答系统、知识库构建等领域展现了强大的能力。然而,随着应用场景的复杂化,传统RAG系统的局限性逐渐显现,尤其是在处理涉及多实体、多关系的复杂查询时,表现不尽如人意。知识图谱(Knowledge Graph, KG)作为一种结构化的知识表示方式,能够有效捕捉实体间的复杂关系,为RAG系统提供了新的优化方向。
本文将探讨为什么需要在RAG中引入知识图谱,并分析其技术优势与实践价值。
一、写在前面
1.1、传统RAG为什么表现不尽如意?
用RAG搭建过知识库就知道,在使用RAG搭建知识库的时候,整个索引、检索是基于文本块的,当有请求过来的时候,RAG首先根据请求去寻找哪些文本块是最相关、最匹配的,再把找到的文本块作为参考资料,连同请求一起给到大模型。这种流程是极度依赖于基于相似度的向量检索技术,存在几个核心问题:
- 知识结构的空心化:人类专家的知识体系是立体建构的,既有学科主干脉络,又能自由调用跨领域知识节点。而LLM的知识表征更接近平面化的概率分布,当处理需要深度领域知识交叉的问题时,容易暴露概念关联的脆弱性。举个例子,用户询问“哪些药物可以治疗高血压?”,而知识库中有一段描述“β受体阻滞剂可以降低心率,从而减轻心脏负担”。尽管这段文本与高血压治疗相关,但由于未明确提及“高血压”,传统RAG可能根本无法将其纳入检索结果。
- 逻辑推理链条的断裂:LLM都是通过概率建模习得知识的表层特征,在面对需多步推演的任务(比如桥梁设计需同步整合地质勘探报告、荷载计算模型与环保法规等等流程)时,模型容易陷入"知识拼贴"的陷阱,很多时候,其更像博闻强记的策展人,而非真正意义上的思考者。
- TopK截断问题:在检索过程中,系统通常只保留相似度最高的TopK个文档片段。而对于全局性问题往往涉及到非常多的上下文文档,这种截断策略可能导致与查询相关但相似度较低的文档被忽略,生成答案时遗漏重要内容。
对应以上核心技术问题就会导致两个很普遍的现象:
- 缺少事情之间关系的理解:当需要关联不同信息以提供综合见解时,传统 RAG 很难将这些点连接起来。
- 缺乏整体视角:当要求 RAG 全面理解大型知识库甚至单个大型文档的整体语义概念时,缺乏宏观视角。
1.2、为什么要在RAG中引入知识图谱?
知识图谱是对现实世界实体及其关系的结构化表示。它们由两个主要部分组成:节点和边。节点表示独立的实体,例如人物、地点、物体或概念。而边则表示节点之间的关系,表示它们如何相互关联。这种结构使 LLM 能够访问精确且与上下文相关的的数据,从而极大地提高了其生成信息丰富答案的能力,其核心优势在于:
-
捕捉复杂关系:知识图谱能够表示实体间的多层次、多类型关系。例如,在医疗领域,知识图谱可以表示“药物-疾病-症状”之间的复杂关联。
-
支持语义推理:基于图结构的遍历和推理能力,知识图谱能够回答涉及多跳关系(Multi-hop Reasoning)的复杂查询。例如在电影领域,知识图谱可以表示“演员-电影-导演”之间的关系。当用户查询“汤姆·克鲁斯主演的科幻电影有哪些?”时,系统可以通过图谱快速找到相关电影,如《碟中谍》系列。
将知识图谱(KG)引入 RAG 体系,就像为 AI 构建了一张清晰的“知识地图”。知识图谱能够表达实体之间的复杂关系,例如父子关系、朋友关系、因果关系等等,从而让 AI 不仅能够“查到”信息,更能够“理解”信息之间的逻辑,给出更准确、更智能的答案。从依赖自身到检索外部信息,再到利用知识图谱进行深度理解。
1.3、图谱+RAG需要考虑和关注的点
- 构建知识图谱:构建图谱是一项非常耗时的工作,通常需要人工完成。目前有方案通过大型模型来构建图谱,通过提示词和文本,让大模型提取文本中的实体和关系,构建三元素,但基于LLM来建图,会引入非常多的噪声。如何在充分利用LLM知识的基础上,在人为可控的方式下建图?也是非常重要的一个问题。
- 内容去重过滤:合并后的信息可能包含重复内容,比如“特朗普、川普、Trump、唐纳德·特朗普”都是一个人,通常需要对合并后的内容进行过滤。
- 建模的合理性:图模型能够直观地表示实体之间的复杂关系,但不代表图这种方式就能对现实世界的信息进行全面的建模。对于一些特殊类型的数据,如历史数据、时间序列数据,仍然面临挑战。
- 图谱的规模:知识图谱到底能支持多大规模,还是未经验证的问题。它能应用到开放域,还是只能够用于特定领域?另一方面,随着数据规模的增大,建图的成本也会急剧上升。
- 适合的应用场景:通常来说,具备如下特征的数据和场景更适合使用图谱+RAG。 第一类是有较多相互关联实体与复杂关系,且结构较明确的数据。比如:
- 人物关系网络数据:社交网络中的用户关系、历史人物关系、家族图谱等。
- 企业级关系数据:公司结构、供应链、客户等之间的关系。
- 医学类数据:疾病、症状、治疗、药物、传播、病例等之间复杂关系。
- 法律法规数据:法律条款之间的引用关系、解释、判例与适用法律条
- 推荐系统数据:产品、用户、浏览内容、产品之间的关联、用户之间的关系等。
第二类是涉及复杂关系、语义推理和多步逻辑关联的查询,比如:
- 多跳关系查询:在华东区所有的门店中,哪个导购的消费者客单价最高?
- 知识推理查询:根据患者的症状和病史,推断可能的疾病并提供治疗方案。
- 聚合统计查询:在《三国演义》中,出场次数最多的人是谁?
- 时序关联查询:过去一年都有哪些AI大模型的投资与并购事件?
- 跨多文档查询:在《三体3》中,有哪些人物在《三体1》中出现?
二、RAGFlow + GraphRAG+ 知识图谱 + Deepseek 初步探索实践
RAGFlow的V0.16.0版本以后对内置的GraphRAG做了重构,并且目前支持轻量级别的LightRAG和GraphRAG两种框架。
GraphRAG利用图结构增强上下文关联性,适用于医疗、法律等复杂领域,LightRAG则强调轻量化和高效,能够显著降低延迟和计算成本。这里做一个实践记录与分享,实践略过了RAGFlow在window或者linux的安装步骤,需要的话可以留言,后面可以补充再出一篇安装教程。
2.1、配置模型供应商
RAGFlow 支持大多数主流 LLM平台,还支持使用 Ollama、Xinference 或 LocalAI 在本地部署 LLM,这里首先要添加并配置 LLM,点击页面右上角的徽标> 模特提供商:
每个 RAGFlow 帐户都可以免费使用通义千问的嵌入模型text-embedding-v2,这里单击你所拥有的 LLM平台并相应地更新 API 密钥,deepseek也有:
如果是采用本地部署的模型的话,可以找到Ollama,配置对应的embedding和chat模型,Ollama的基础URL为:http://host.docker.internal:11434
配置好后的模型列表,可以从“添加了的模型”这里看到:
配置好后,打开系统模型设置,其中img2txt模型就是OCR模型:
2.2、配置知识库
正确配置知识库对于 AI 智能助手至关重要,选择错误的嵌入模型或块方法很容易导致聊天中出现意外的语义丢失或答案不匹配。
在知识库配置中,RAGFlow 通过嵌入模型、解析方法、页面排名、自动关键词、自动问题、召回增强及 RAPTOR 策略等技术,提升检索和生成效果,其中:
- 嵌入模型:将文本转换为向量,捕捉语义信息,常用于文本相似度计算和检索。RAGFlow 使用嵌入模型将文档和查询转换为向量,以便在向量空间中进行相似度匹配。
- 解析方法:RAGFlow 提供多种分块模板,方便对不同布局的文件进行分块。通过不同的解析方法,其可以将原始文本(如 PDF、HTML)转换为结构化数据,便于后续处理。
- 页面排名:页面排名用于评估文档或段落的重要性,帮助系统优先检索更相关的内容,优先返回高质量信息。
- 自动关键词:用于在查询此类关键词时,为每个块提取 N 个关键词以提高其排名得分。
- 自动问题:自动问题生成从文本中生成相关问题,用于增强检索和生成。
- 使用召回增强RAPTOR策略:结合召回增强和任务导向的排序,优化检索结果。RAGFlow 可能通过动态调整检索范围或重新排序,确保生成模型获得最相关的信息。
2.3、配置知识图谱方法
往下翻到知识图谱部分,打开提取知识图谱,实体类型可以就选默认的,然后方法选择General,然后打开实体归一化和社区报告生成,其中,实体类型是知识图谱的重要组成部分。常见的实体类型包括:
- Organization(组织):如公司、机构、政府等。例如,“阿里巴巴”、“联合国”。
- Person(人物):如历史人物、名人、科学家等。例如,“马云”、“爱因斯坦”。
- Geo(地理):如国家、城市、地区等。例如,“中国”、“北京”。
- Event(事件):如历史事件、会议、比赛等。例如,“第二次世界大战”、“奥运会”。
- Category(类别):如产品、技术、学科等。例如,“人工智能”、“量子力学”。
**实体归一化是指将不同表达方式的实体统一为标准形式。例如,“马云”可能在不同的文本中被表达为“Jack Ma”、“阿里巴巴创始人”等。**实体归一化的目的是确保知识图谱中的实体具有唯一性和一致性,包括:
- 同义词处理:将不同表达方式的实体映射到同一个标准实体。例如,“Jack Ma”和“马云”都映射到“马云”。
- 消歧:处理同名实体的歧义问题。例如,“苹果”可能指“苹果公司”或“水果”,需要通过上下文进行消歧。
- 社区报告生成:在这一步,区块被聚集成层次化的社区,实体和关系通过更高抽象层次将每个部分连接起来,它通过分析知识图谱中的实体和关系,生成结构化的报告。具体步骤包括:通过图算法(如 Louvain 算法)发现知识图谱中的社区结构。社区是指一组紧密相连的实体,例如“科技公司社区”可能包括“阿里巴巴”、“腾讯”、“百度”等。
2.4、建立知识图谱
配置完数据库后,上传一条文件,然后点击开始解析:
解析完后点击刷新,左侧会出现知识图谱菜单,点击进入查看建立好的知识图谱,其中每个深色的圆圈代表一个实体,实体之间的连线代表实体之间存在的关系。
外围淡色的圆圈代表实体组成的社区:
2.5、基于图谱+RAG的实践效果测试
这里先来试一下检索,这是没有打开知识图谱的检索结果:
这是打开了知识图谱的检索结果:
然后,再测试一下,这个是没有带知识图谱的回答效果:
这个是带知识图谱的回答效果: