使用 Azure Database for PostgreSQL 浏览 GraphRAG

已完成

随着数据增长,许多文档或行开始变得相似。 本单元演示如何在 Azure Database for PostgreSQL 中保留完整检索流,同时考虑关系。 文档保留在表格中。 关系通过 Apache AGE (A Graph 扩展)在属性图中存在,并使用 openCypher 进行查询。 在评估问题时,将来自pgvector的基于含义的匹配(可选重新排名)与关系图中的关系评分相结合。 由于整个流在 SQL 中运行,因此系统更易于作,更易于理解。

Azure Database for PostgreSQL 中的图形

Apache AGE 将图形功能添加到 Azure Database for PostgreSQL。 将 实体 建模为 节点并将关系 建模为 边缘,同时具有两者的属性。 此方法允许与常规 SQL 一起运行图形查询,以便可以在一个位置混合结构化表和图形结构。 它适合社交网络、建议系统和知识图等用例。 无需运行第二个数据库即可获得关系模型和图形模型的优势。

当相似性不足以满足需求时

文本相似性擅长处理"这个看起来像那个"的答案,但大规模相似或接近重复的文本可能会导致隐藏最佳答案。 重新排序可以提高排序效果,但它仍然对段落逐个评分。 许多问题取决于引文、共同成员、重复引用和邻域模式等连接。 在公司策略数据库示例中,你可能有两个关于出租车报销的部分。 一个存在于 2025 年旅行政策中,且多个当前规则指向它。 另一个是 2023 年的部分,仅用于历史目的,当前没有链接指向它。 一个普通的相似性搜索会将它们视为相同的。 但当你还通过图表查看规则与政策的关联方式时,2025 年的部分会升至顶部。 返回该结果。

GraphRAG

当仅靠相似性不足以满足需求时,GraphRAG 是一种来自Microsoft Research 的方法,它通过从源数据中提取知识图并使用该结构为大型语言模型(LLM)提供更好的上下文,从而改善了RAG的功能。 它有三个主要步骤:

  1. 图形提取

    在公司策略数据库示例中,使用 company_policies 表作为源。 每一行都将成为一个Policy节点,其中包含policy_idtitlepolicy_textdepartmentcategory作为属性。 根据已有的值创建 Entity 节点(每个部门和每个类别一个)。 可选地为在policy_text中找到的重要术语(例如“出租车报销”或“机场”)添加Entity节点。 通过边连接它们:

    • (:Policy)-[:BELONGS_TO]->(:Entity {type: 'Department', name: department})
    • (:Policy)-[:HAS_CATEGORY]->(:Entity {type: 'Category', name: category})
    • (:Policy)-[:MENTIONS]->(:Entity {type: 'Topic', name: <term>}) (可选,从文本提取)

    将此图存储在 Apache AGE 的同一 Postgres 实例中,以便可以将图形结果联接回 company_policies 去,而无需单独的图形数据库。

  2. 实体摘要
    为每项政策创建简短摘要,如果有需要,则为小型群体(例如按类别或部门进行分组)创建摘要。 GraphRAG 库可以生成多级摘要。 将这些摘要保留为节点属性,以便在排名期间以及在准备模型上下文时轻松提取这些摘要。

  3. 查询时的图表查询生成
    在查询时,运行矢量搜索company_policies.embedding,通过语义相似性获取一个初始候选集。 在并行运行openCypher查询时,该查询将对每个候选项与问题相关的程度进行评分。 对于“从机场报销出租车”示例,图形分数可以奖励属于 旅行 类别的政策,位于 财务 部门(或其他相关部门)下,并提及 出租车报销机场等实体。

单靠相似性常常能识别出几乎重叠的段落。 图表步骤会优先推荐既匹配问题又位于网络正确部分的章节。 发送到模型的最后一个上下文更小、更清晰且更易于证明其合理性。 完整的管道、矢量搜索、可选的语义重新排序、openCypher 图形查询和 RRF(互相排名融合)在 Postgres 中运行。

从仅有相似性到 GraphRAG 排名

仅凭相似性,相似文本可能会挤掉正确的段落。 在出租车报销示例中,关系信号会将匹配问题且属于最相关类别、部门或主题的项目推至顶部。 传递给模型的上下文更紧密、更易于防御,可以指向确切的路径和分数来解释每个排名。

使用 Azure Database for PostgreSQL 中的 GraphRAG 在一个位置保留数据和关系,按含义和连接对结果进行排名,并引用每个答案的确切来源。 GraphRAG 解决方案加速器显示完整的管道。 它包括矢量搜索、语义重新调整、 openCypher 图形评分和排名融合。 它在 Postgres 内部运行,并用 SQL 编写,在仅向量检索上提供明显的增益。

可以使用 SQL 语义操作符在数据库内部不断地进行重新排序。 azure_ai 语义运算符中的 rank() 运算符允许你在查询中直接使用最先进的模型对顶级候选者进行重新排序,因此无需离开 Postgres 即可将语义排序与图表评分相结合。 随着数据的增长,将图形步骤与正确的向量索引配对。 DiskANNAzure Database for PostgreSQL 中,支持高维嵌入(最多 16,000 个维度)、更快的索引生成,以及可降低内存和成本的产品量化,同时保持较高的准确度。 据报告,与 HNSW(层次化可导航小世界)索引相比,性能最高可提升 10 倍,成本可节省约 4 倍。

关键结论

仅相似性搜索往往没有解决实际问题。 使用 Apache AGEGraphRAG 添加了一个知识图,以便模型获取结构和含义。 将关系提取到 AGE 图中,在节点上保留简短摘要,并在问题时运行向量搜索和 openCypher 查询来了解候选项的连接方式。 在 Azure Database for PostgreSQL 中,此过程全部保留在一个位置。 表格保存内容,Apache AGE 管理图,pgvector 拉取可能段落,通过简单融合进行轻微重新排序,优化顺序。 结果是一个较小的、更清晰的上下文,指向正确的源并生成可以验证的答案。