LLMs之KG-RAG:KG-RAG/GraphRAG(基于知识图谱的RAG系统)的简介(可以解决多跳问题/同时支持结构化和非结构化数据查询)、经验技巧、案例应用之详细攻略
背景痛点:传统的基于向量相似度检索的RAG模型回答多环(多步)问题的能力有限,无法同时处理来自多个文档的信息。
解决方案:
>> 使用知识图构建结构化的信息存储和表示,每个文档分别进行信息提取,然后通过节点和关系在知识图中连接相关文档,形成一个连通的知识结构。
>> 以知识图为基础,在问题响应阶段生成cypher语言查询来高效检索相关信息。
>> 知识图可以同时存储结构化和非结构化数据,实现结构化和非结构化数据的连接,同时利用向量相似度检索来助力信息检索。
>> 知识图也可以支持链式推理问答模型,指导LLM进行多步骤问题响应。
核心特点:
>> 知识图利用节点和关系表示数据,实现不同文档或信息间的关联连接,方便跨文档信息检索。
>> 知识图可以高效融合不同类型结构化和非结构化数据。
>> 知识图支持类比思维链式推理问题响应流程。
优势:
>> 解决RAG模型响应多环问题的能力不足问题。
>> 提高问题响应效率,减轻在线响应阶段的计算负担。
>> 知识图适用于各种涉及实体关系的应用场景。
>> 协助LLM生成更精准的问题响应。
总之,该文章通过利用知识图来统一存储结构化和非结构化数据,提升RAG模型解决多环问题响应的能力,提高问题响应效率。
目录
LLMs之GraphRAG:《From Local to Global: A Graph RAG Approach to Query-Focused Summarization》翻译与解读
结合图和文本数据,通过知识图谱识别实体及其关系,并使用智能搜索工具检索相关信息,如通过Cypher查询或向量相似度搜索,可解决需要综合分析的查询需求
Agent将问题分解为多个子问题→根据每个子问题选择合适的工具,比如问题01采用知识图谱工具来检索→Agent基于问题01的结果重新编写问题02→Agent继续使用各种工具来回答→但会导致响应高延迟
RAG应用通过整合多个信息来源构建知识图谱,结合结构化和非结构化数据,实现更精准的答案生成和多跳推理,适用于各种涉及实体关系的应用场景
T1、自定义实现:GraphKnowledge—G的角色侧重【知识库】,采用Tasks检索工具+图Graph查询检索工具(Neo4j图数据库+Cyphe图查询语言)
T2、采用KG-RAG工具实现:GraphKnowledge—G的角色侧重KG【知识库】
LLMs之RAG:KG-RAG的简介、安装和使用方法、案例应用之详细攻略
T3、采用llama_index框架和LlamaParse平台实现:
T4、采用langgraph框架实现:GraphRoute—G的角色侧重Agent【图逻辑调用能力】而非KG
LangChain之LangGraph:LangGraph(以图形方式构建语言代理Agent)的简介、安装和使用方法、案例应用之详细攻略
相关文章
LLMs之GraphRAG:《From Local to Global: A Graph RAG Approach to Query-Focused Summarization》翻译与解读
https://yunyaniu.blog.csdn.net/article/details/138982960
KG-RAG的简介
检索增强生成(RAG)应用在集成来自外部来源的数据到LLMs中,回答简单问题方面表现出色。但是,它们在回答涉及将相关信息连接起来的多部分问题时往往遇到困难。这是因为RAG应用需要设计一个数据库,以一种使得查找回答这些类型问题所需的所有片段变得容易的方式存储数据。
知识图谱(KG)非常适合处理复杂的、多部分问题,因为它们将数据存储为节点网络及其之间的关系。这种连接的数据结构使得RAG应用能够高效地从一条信息导航到另一条信息,访问所有相关信息。
使用知识图谱构建RAG应用可提高查询效率,特别是当处理连接的数据时,您可以将任何类型的数据(结构化和非结构化)导入图中,而无需重新设计架构。
参考地址:Knowledge Graphs & LLMs: Multi-Hop Question Answering
1、RAG的工作原理
检索增强生成(RAG)是一种通过从外部数据库检索相关信息并将其合并到生成的输出中来增强LLMs响应的技术。RAG过程很简单。当用户提问时,智能搜索工具在提供的数据库中寻找相关信息。
向量相似度搜索的实现
您可能使用过诸如“与您的PDF聊天”之类的工具,在提供的文档中搜索信息。这些工具大多使用向量相似度搜索来识别包含与用户问题相似数据的文本块。实现非常简单,如下图所示。
PDF(或其他文档类型)首先被拆分成多个文本块。您可以根据文本块的大小或它们之间是否应有任何重叠来使用不同的策略。然后,RAG应用使用文本嵌入模型来生成文本块的向量表示。这是在查询时执行向量相似度搜索所需的所有预处理。最后,在查询时,RAG将用户输入编码为向量,并使用余弦等相似性算法来比较用户输入与嵌入文本块之间的距离。
通常,RAG返回三个最相似的文档,以为LLMs提供上下文,从而增强其生成准确答案的能力。当向量搜索能够识别相关的文本块时,这种方法效果相当不错。
多跳问题的挑战
然而,当LLM需要从多个文档或甚至多个文本块中获取信息来生成答案时,简单的向量相似度搜索可能不足够。例如,考虑以下问题:
前OpenAI员工中有没有人创办了自己的公司?
这个问题是多部分的,因为它包含两个问题:
>> 谁是前OpenAI的员工?
>> 他们中有没有人创办了自己的公司?
回答这类问题是一个多跳问题回答任务,一个问题可以被分解为多个子问题,并且获得准确答案需要检索大量文档。
多跳问题的挑战分析
简单地将文档分块并将其嵌入到数据库中,然后使用简单的向量相似度搜索无法满足多跳问题。原因如下:
>> 在前N个文档中重复的信息:提供的文档不能保证包含回答问题所需的所有信息。例如,前三个相似的文档可能都提到Shariq曾在OpenAI工作过,可能创办了一家公司,而忽略了所有其他曾成为创始人的前员工。
>> 缺少参考信息:根据文本块的大小,某些文本块可能不包含完整的上下文或对文本中提到的实体的引用。重叠文本块可以部分缓解缺少参考信息的问题。还有一些例子,参考信息指向另一篇文档,因此您需要一个共指解析或预处理技术。
>> 难以定义理想的检索文档数N:某些问题需要更多的文档才能使LLM准确,而在其他情况下,大量文档只会增加噪音(和成本)。
在某些情况下,相似性搜索将返回重复的信息,而其他相关信息则因检索信息的低K值或嵌入距离而被忽略。
挑战解决策略
由于检索信息的低K值或嵌入距离,可能会忽略相关信息。因为检索信息的低K值或嵌入距离。显然,简单的向量相似度搜索对多跳问题来说不够。但是,我们可以采用多种策略来回答需要从各种文档中获取信息的多跳问题。
2、知识图谱作为高效的信息存储
如果您密切关注了LLM领域,您可能已经看到了一些将信息压缩以使其在查询时更易于访问的技术。例如,您可以使用LLM提供文档摘要,然后嵌入和存储摘要而不是实际文档。使用此方法,您可以消除许多噪音,获得更好的结果,并减少对提示标记空间的担忧。
上下文摘要的执行
您还可以在读取过程或查询时执行上下文摘要。查询时的上下文压缩更加有指导性,因为它选择与提供的问题相关的上下文。但是,查询期间工作负载越重,用户延迟可能越糟。我们建议尽可能将工作负载移至摄入时间,以提高延迟并避免其他运行时问题。
利用知识图谱解决组合和总结问题
将多个文档组合和总结为单个记录的方法在文献中尚未涉及。这可能是因为存在太多的文档组合需要合并和总结,使得在摄入时间处理所有文档组合的成本过高。知识图谱是解决这个问题的有效方法。
同样的方法也可以用于总结对话历史,以避免遇到令牌限制问题。
我没有看到任何关于将多个文档组合和总结为单个记录的文章。我们可能有太多的文档组合可以合并和总结,使得在摄入时间处理所有文档组合的成本太高。知识图谱解决了这个问题。
信息提取管道与知识图谱的结合
信息提取管道是从非结构化文本中提取结构化信息的过程,与知识图谱结合的优势在于可以单独处理每个文档,并在构建或丰富知识图谱时将来自不同记录的信息连接起来。
信息提取管道已经存在一段时间了。它是从非结构化文本中提取结构化信息的过程,通常以实体和关系的形式。将其与知识图谱结合的美妙之处在于您可以单独处理每个文档。当知识图谱被构建或丰富时,来自不同记录的信息被连接起来。
使用知识图谱进行多跳问题解决
许多新的LLM方法解决多跳问题的方法主要集中在在查询时解决任务。然而,通过预处理数据并将其连接到知识图谱,可以解决许多多跳问题。可以使用LLMs或自定义文本领域模型执行信息提取管道。
知识图谱使用节点和关系来表示数据。在这个例子中,第一个文档提供了Dario和Daniela曾在OpenAI工作的信息,而第二个文档提供了有关他们的Anthropic创业公司的信息。每个记录都被单独处理,但是知识图谱表示连接了数据,使得容易回答跨多个文档的问题。
在查询时利用知识图谱检索信息
在查询时,要从知识图谱检索信息,需要构建适当的Cypher语句。LLMs擅长将自然语言转换为Cypher图查询语言,这使得在查询过程中利用知识图谱成为可能。
大多数较新的LLM方法解决多跳问题的方法主要集中在在查询时解决任务。事实上,许多多跳问题回答问题可以通过读取数据前的预处理并将其连接到知识图谱来解决。您可以使用LLMs或自定义文本领域模型执行信息提取管道。
在查询时从知识图谱检索信息,我们必须构建适当的Cypher语句。幸运的是,LLMs非常擅长将自然语言转换为Cypher图查询语言。
智能搜索使用LLM生成适当的Cypher语句从知识图谱检索信息。然后,将信息传递给另一个LLM调用,该调用使用原始问题和提供的信息生成答案。在实践中,您可以使用不同的LLMs来生成Cypher语句和答案,或者您可以在单个LLM上使用各种提示。
3、结合图和文本数据以增强洞察力
结合图和文本数据,通过知识图谱识别实体及其关系,并使用智能搜索工具检索相关信息,如通过Cypher查询或向量相似度搜索,可解决需要综合分析的查询需求
有时,您需要结合图和文本数据来查找相关信息。例如,考虑这个问题:
关于Prosper Robotics的创始人的最新消息是什么?
在这个例子中,您希望LLM使用知识图谱结构识别Prosper Robotics的创始人,然后检索最近提到他们的文章。
在知识图谱中,您可以从Prosper Robotics节点开始,遍历到其创始人,然后检索最近提到他们的文章。知识图谱表示了关于实体及其关系的结构化信息,以及关于节点属性的非结构化文本。您还可以使用命名实体识别等自然语言技术将非结构化信息与知识图谱中相关实体连接起来,如MENTIONS关系所示。
当知识图谱包含结构化和非结构化数据时,智能搜索工具可以使用Cypher查询或向量相似度搜索来检索相关信息。在某些情况下,您还可以结合使用两者。例如,您可以从Cypher查询开始,以识别相关文档,然后在这些文档中查找特定信息。
4、在思维连中使用知识图谱
Agent将问题分解为多个子问题→根据每个子问题选择合适的工具,比如问题01采用知识图谱工具来检索→Agent基于问题01的结果重新编写问题02→Agent继续使用各种工具来回答→但会导致响应高延迟
LLMs周围另一个引人注目的发展是链式思维问答,特别是带有LLM代理的链式思维问答。
LLM代理可以将问题分解为多个步骤,定义计划,并从提供的任何工具中提取答案。通常,代理工具包括代理可以查询以检索额外信息的API或知识库。
让我们再次考虑相同的问题:
关于Prosper Robotics的创始人的最新消息是什么?
假设您没有文章与其提及的实体之间的明确连接,或者文章和实体位于不同的数据库中。在这种情况下,使用链式思维流的LLM代理将非常有帮助。首先,代理会将问题分解为子问题:
>> Prosper Robotics的创始人是谁?
>> 关于创始人的最新消息是什么?
现在,代理可以决定使用哪种工具。假设它基于知识图谱,这意味着它可以检索结构化信息,如Prosper Robotics的创始人的姓名。代理发现Prosper Robotics的创始人是Shariq Hashme。现在,代理可以使用来自第一个问题的信息重新编写第二个问题:
>> 关于Shariq Hashme的最新消息是什么?
代理可以使用一系列工具来生成答案,包括知识图谱、向量数据库、API等。对结构化信息的访问使得LLM应用能够执行需要聚合、过滤或排序的分析工作流程。考虑以下问题:
>> 哪家公司的独立创始人估值最高?
>> 谁创立了最多的公司?
简单的向量相似度搜索在回答这些分析性问题时存在困难,因为它搜索非结构化文本数据,使得难以对数据进行排序或聚合。
虽然链式思维展示了LLMs的推理能力,但它并不是最用户友好的技术,因为由于多次LLM调用,响应延迟可能很高。但是,我们仍然对了解更多关于将知识图谱集成到链式思维流中以解决许多用例问题感到非常兴奋。
5、使用知识图谱进行RAG应用的原因
RAG应用通过整合多个信息来源构建知识图谱,结合结构化和非结构化数据,实现更精准的答案生成和多跳推理,适用于各种涉及实体关系的应用场景
RAG应用通常需要从多个来源检索信息以生成准确的答案。虽然文本摘要可能具有挑战性,但将信息以图形格式表示具有几个优点。
通过分别处理每个文档并在知识图谱中连接它们,我们可以构建信息的结构化表示。这种方法使得通过互相关联的文档进行更轻松的遍历和导航,从而实现多跳推理以回答复杂的查询。此外,在摄入阶段构建知识图谱可以减少查询时的工作负载,从而提高延迟。
RAG应用将越来越多地使用结构化和非结构化数据以生成更准确的答案。知识图谱可以轻松吸收各种类型的数据。这种灵活性使其适用于广泛的用例和LLM应用程序,特别是涉及实体之间关系的应用程序(考虑欺诈检测、供应链、主数据管理等)。
KG-RAG的相关工具或框架
T1、自定义实现:GraphKnowledge—G的角色侧重【知识库】,采用Tasks检索工具+图Graph查询检索工具(Neo4j图数据库+Cyphe图查询语言)
LLMs之KG-RAG-Agent:基于LangChain框架利用知识图谱(Neo4j构建知识图数据库+Cyphe查询语言)结合RAG技术打造多种工具的Agent进而实现与图知识库对话查询的机器人应用实战案例——导入知识图谱数数据(Neo4j)→基于向量索引和OpenAIEmbeddings构建RetrievalQA并测试相似性搜索→创建一个GraphCypherQAChain的Cyphe图查询式问答系统并并使用知识图谱测试→创建多模态Agent并测试(定义一个工具列表【Tasks/Graph】+创建一个多模态Agent+测试多模态Agent回答问题)
https://yunyaniu.blog.csdn.net/article/details/137618054
T2、采用KG-RAG工具实现:GraphKnowledge—G的角色侧重KG【知识库】
LLMs之RAG:KG-RAG的简介、安装和使用方法、案例应用之详细攻略
LLMs之RAG:KG-RAG的简介、安装和使用方法、案例应用之详细攻略-CSDN博客
T3、采用llama_index框架和LlamaParse平台实现:
LLMs之GraphRAG之LlamaParse:基于llama_index框架和LlamaParse平台从PDF文档中提取文本内容来构建知识图谱——加载PDF文件并解析为Markdown格式的结构化数据→解析Markdown文本并生成文本节点和表对象并解析为Json格式【输出objects的所有节点信息并Json解析到node_json【若为表对象则要输出元数据和定义-摘要】】→存储数据(对解析后的结构信息建立索引和节点关系【通过NEXT关系链接节点确保文档的结构关系+存储表的定义和摘要信息】+并存储到Neo4j数据库中)+处理表格对象【确保表对象在数据库中的唯一性和正确结构】和文本类型的节点【分割为段落Chunks】+存储到 Neo4j 数据库中并建立节点之间关系→从Neo4j数据库中读取节点+使用Mistral模型生成文本嵌入向量embedding并存储回Neo4j数据库中【增强节点的表征能力】→采用Cypher查询文档知识图谱获取并获取文档结构
https://yunyaniu.blog.csdn.net/article/details/139077684
T4、采用langgraph框架实现:GraphRoute—G的角色侧重Agent【图逻辑调用能力】而非KG
LangChain之LangGraph:LangGraph(以图形方式构建语言代理Agent)的简介、安装和使用方法、案例应用之详细攻略
https://yunyaniu.blog.csdn.net/article/details/138874285
KG-RAG的案例应用
持续更新中……