当 RAG 开发人员决定尝试图形 RAG(即构建知识图谱并将其集成到他们的 RAG(检索增强生成)系统中)时,根据互联网,他们有很多选择。有很多文章、指南和操作手册介绍了不同的工具来处理 RAG 图形和一般图形。因此,一些开发人员会立即投入其中,认为他们需要集成和配置一系列图形工具和技术才能正确使用图形 RAG。在搜索如何入门时,你通常会发现一些文章建议你需要以下部分或全部内容:
当然,这些工具和实现方式对特定的图形用例都很有帮助。但是,对于任何开始使用典型图 RAG 用例的开发人员来说,一个简单的事实依然存在:大多数 “图 ”工具都是在生成式人工智能革命之前设计和构建的。GenAI 用例与传统图用例有着本质区别,需要采用不同的方法,即使两者之间可以共享某些工具。
上述建议用于图 RAG 的工具列表包括一些典型 GenAI 用例通常不需要的工具。而且,除了不必要之外,添加其中一些工具还会使事情变得过于复杂--导致开发时间增加、成本上升,以及本可以避免的额外维护开销。通过专注于基本要素来保持技术堆栈的简单性,可以提高效率,并让你充分利用图形 RAG 的强大功能,而不会显得臃肿。
一个常见的误解是,要进行图形 RAG 就需要图形数据库。图形数据库和图形查询语言(图形 QL)是图形分析和深度图形算法的强大工具,但图形 RAG 和 GenAI 应用程序通常不会从这些类型的传统图形分析中受益。图数据库可以支持图 RAG,但也会给堆栈增加不必要的复杂性。
在本文中,我们将讨论涉及图的各种用例的软件需求,重点关注 GenAI 用例和应用,以及在从普通 RAG 转向图 RAG 时如何最大限度地减少额外工作和复杂性。在大多数情况下,我们并不需要大量的工具;采用与我们的目标相一致的几项关键技术不仅能简化我们的工作,而且往往能取得更好的结果。
GenAI的图表用例
语义向量搜索在查找与查询上下文相似的文档方面非常强大。但是,在有些情况下,这种方法会有不足之处,尤其是当所需信息是非语义信息或需要深入了解数据时。图形 RAG 技术可以通过利用非语义信息来补充矢量搜索的功能,例如在以下常见用例中:
利用文档中的非语义信息
虽然语义搜索在根据上下文相似性识别文档方面表现出色,但它往往会忽略对综合数据分析至关重要的非语义线索。图表可以纳入并利用元数据等非语义信息,其中包括链接、专业术语和定义、交叉引用、词汇表以及标题、标题和分节内容等文档结构。此外,图表还可以连接从文本中提取或推断出的实体、关键词和概念。
摘要
当目标是总结某个社区或一组相互关联的实体的内容时,基于图的方法是不可或缺的。图形可以识别数据中的群组或社区,总结多个文档或贡献者中的普遍主题或讨论。
邻域探索
探索图中特定节点或查询的 “邻域 ”或直接联系可以揭示仅通过语义搜索无法发现的关系和见解。上下文探索允许从起始节点开始遍历,探索相邻节点(文档、术语或概念),以发现相关信息,从而增加初始查询的深度。
为什么 GenAI 与传统图使用案例不同
在生成式人工智能之前,已经有了知识图谱和图数据库。这些图工具比 GenAI 早了很多年,而且一些相关技术是为非常不同的用例而设计的。这些技术主要针对结构化数据探索,而非 GenAI 擅长的非结构化文本处理和语义理解。
从传统图形用例到生成式人工智能的转变是数据处理技术的重大变革。传统图对于清晰、明确的关系来说非常出色,但它们往往缺乏灵活性,无法满足生成式人工智能的细微需求。
传统图形工具是为庞大、复杂的图形而设计的
知识图谱通常是来自不同来源的大量数据的聚合,在广泛的数据点之间连接着复杂且相互依存的关系。大量的节点和边,再加上其连接的复杂性,会使数据处理和分析任务变得计算密集和耗时。
这就是图数据库(graph DBs)诞生的初衷。它们提供优化的存储解决方案和处理能力,旨在高效管理庞大的节点和边网络。除了图数据库,图查询语言(graph QLs)的设计也是为了方便对这些大型图及其子图进行复杂的查询操作。这些工具擅长执行涉及深度遍历、模式匹配和动态数据聚合的操作,这在图分析中非常典型。图数据库和图分析的常见用例包括社交网络分析、推荐系统、欺诈检测和复杂网络管理。在这些应用场景中,快速有效地分析大型数据集中复杂关系的能力至关重要。
图数据库和 QL 的一些典型用例:
当然,传统图形工具还设计了许多其他复杂的图形查询和图形分析用例,并擅长于这些用例。但是,这里所举的例子以及许多其他例子,与我们今天在 GenAI 应用中看到的图使用案例截然不同。
图 RAG 和向量搜索都在本地运行
之前,我将 “邻域探索 ”列为图在 GenAI 用例中的一种应用,但从概念上讲,它可以被视为一个广泛的总括术语,在这个术语下,你可以找到 GenAI 中几乎所有的图用例。换句话说,当我们在 GenAI 中使用图时,我们几乎肯定只是在探索邻域,而很少是探索整个图或图的大部分。我们最多会探索相对于整个图来说很小的子图。
在图论中,“邻域 ”是指图中与给定节点相邻的节点集合,由直接链接或边定义。因此,检索知识图谱中某一节点的邻域,应能得到一组与起始节点直接相关的项目或概念。同样,在矢量搜索中,标准实现会返回语义矢量空间中的 “近似近邻”(ANN),这意味着结果集中的文档是那些在语义意义上与查询关系最密切的文档。(近似近邻之所以是 “近似 ”的,是因为精确近邻的速度更慢、成本更高)。
因此,矢量搜索和从起始节点开始几步的图遍历都是在寻找 “最近的邻居”,而 “最近 ”在这两种情况下的含义是不同的。矢量搜索查找最近的语义邻居,而图遍历则查找图邻居--如果整合得好,它们可以将在语义方面和各种非语义方面相关的文档整合在一起,而这些相关性仅受你构建知识图谱的方式的限制。
这里重要的一点是要注意,图 RAG 完全关注的是探索局部邻域,无论是图还是矢量--就像 RAG 在纯矢量方面的一贯做法一样。这意味着我们的图 RAG 软件栈应该建立在擅长局部邻域搜索和检索的基础之上,因为我们在 GenAI 应用程序中的所有查询都集中在特定的知识领域,不需要对整个知识图谱进行全面的探索或分析。
点菜式图形工具:只采用你需要的工具
回到本文开头列出的图形工具 “清单”,让我们来仔细看看在什么情况下需要或不需要将它们作为图形 RAG 堆栈的一部分。
知识图谱
实体和关键词提取工具
图遍历算法
属性图实现
图形数据库
图形查询语言(Graph QLs)
图节点嵌入算法
向量存储
每个组件都应符合你的图形 RAG 系统的具体需求和复杂性,确保采用的每项技术都能增加价值并提高系统性能,同时避免不必要的复杂性。
最小图 RAG 系统的要求
考虑到上述有关图工具和技术的说明,这些是任何图 RAG 系统所需的核心组件:
对于特殊用例,或者如果最小实现的性能不够好,可以添加更多的图工具和功能--下一节将概述一些重要的考虑因素。
从向量开始,根据需要添加 “图”--而不是相反
在处理 GenAI 用例时,知识的基础是向量空间。我们使用矢量优化工具(如矢量存储),因为它们直接使用 LLM 和其他 GenAI 模型的语言(矢量)进行操作。我们对 GenAI 应用程序的实现应该是向量优先的,因为最重要的向量操作(如近似近邻搜索)在时间和金钱上都很昂贵,所以我们应该优化这些操作,以提高性能和效率。将图形添加到 GenAI 应用程序中应该只是:将图形功能添加到现有的矢量优化基础架构中。在某些特定用例中,可能需要从矢量优化的基础架构转向图原生基础架构,但在绝大多数情况下,这会使技术堆栈复杂化,并使部署更具挑战性。
从典型的图形 RAG 实施开始,并考虑添加更复杂的图形工具和功能时,必须仔细评估使用案例的特定挑战和要求,而不是普遍认为更先进或更复杂的图形工具天生就更适合任何图形使用案例。
以下是一些关键的考虑因素: