探索信息检索的挑战—规模和准确性
检索扩充生成(RAG)依赖于在模型给出答案之前从数据中提取正确的段落。 随着内容的增长,会出现两个问题:扩展 和 准确性。 扩展性 是关于数据量和访问模式的变化,以及结果返回的响应速度。 准确性 在于这些结果是否实际回答了问题。 如果检索速度缓慢或偏离目标,无论模型的能力多强,体验都会受到影响。
Scale
在 RAG 中,每个用户的问题都会触发对向量的最近邻搜索。 随着添加更多行,越来越多的用户同时查询数据,数据访问模式会降低速度,并发压力会增加延迟。
在 Azure Database for PostgreSQL 中保留检索,并确定如何在数据库中搜索和排名结果。 从 pgvector 开始进行矢量相似性搜索。 当数据集增长时,请使用近似索引,以便查询避免与每一行进行比较。 提高性能,pgvector 提供了索引选项,例如 IVFFlat 或 HNSW。 对于非常大的数据集,请考虑通过 pg_diskann 扩展使用 DiskANN,该扩展设计用于大规模场景下的高召回率、高每秒查询数 (QPS) 和低延迟。
准确性
如果快速查询返回了错误的段落,则这些查询无济于事。 缺少相关行或错误地排名会迫使模型进行猜测。
将 准确性 视为数据库中的两步问题。 首先,使用 pgvector 生成优质候选者,选择与嵌入匹配的距离函数以及平衡召回率和延迟的索引(根据数据规模)。 其次,根据需要改进排序。 可以直接在 SQL 中使用扩展中的语义运算符(例如用于基于 LLM 的相关性排名的 azure_ai.rank)重新排序结果。
如果想要围绕此模式构建完整的管道示例,则还有适用于 Azure Database for PostgreSQL 的语义排名器解决方案加速器。 这两种方法旨在使用 PostgreSQL 作为单一数据层运行。
当关系有帮助时
某些域受益于对事物连接方式的建模。 图形步骤可以通过使用关系和显著性信号来改进检索。 图形查询可通过 Apache AGE 扩展在 Azure Database for PostgreSQL 中使用。 GraphRAG 是一种Microsoft Research 方法,它将矢量搜索与图形查询相结合,以提高检索 准确性。 它从数据中提取知识图,并使用该结构为大型语言模型提供更好的上下文。
度量和监视
你需要建立一个监控策略来捕获关键指标,并深入分析查询性能。
使用以下方法创建 RAG 查询性能的基线:
- 查询存储 - 捕获查询文本、运行时和等待统计信息,以便查看一段时间内的热门查询和趋势。
- 查询性能见解 - 可视化灵活服务器的查询存储数据,以突出显示长时间运行的查询和资源密集型查询。
- Azure Monitor 指标和工作簿 - 服务器级别图表和仪表板,用于延迟、连接、CPU、IO 等。
这些工具可帮助你识别 RAG 管道中改进的瓶颈和领域。 它们可帮助你确定性能(缩放),但你需要其他策略来确保检索 准确性。
测量准确性:
虽然测量 准确性 不如衡量 规模那么简单,但可以在评估阶段使用 体系结构中心 文章中的一些课程。
- 日志请求和指标 - 对于每个问题,请保存问题文本、从 PostgreSQL 检索的行及其排名和距离、发送到模型的确切上下文以及模型的最终答案。
-
计算信号 - 在应用程序代码中,计算三个简单的信号:
- 相关性和利用率 - 衡量检索的段落中也显示答案的关键短语的数量,以及这些段落的引用或回显频率。
- 真实性 — 检查答案中的每个具体声明是否至少支持一个检索到的行。
- 完整性 - 检查问题的主要部分是否包含在答案中,其中包含检索的行中的支持文本。
-
用分数指导变更 - 使用分数来指导变更,然后重新运行相同的小测试集:
- 如果答案遗漏了问题的部分内容,请增大 k 值或调整分块方式。
- 如果正确的行未显示,请在
pgvector中增加IVFFlat探测次数,或提高DiskANNl_value_is设置,使搜索考虑更多邻近节点。 - 如果排序是问题,请在 SQL 中添加一个重新排序过程,使用 Azure Database for PostgreSQL 的 语义排名 解决方案。
- 关系很重要时,请在最终向量步骤之前使用 Apache AGE 添加一个短图步骤。
- 跟踪随时间推移的趋势 - 监视以确认 准确性 得到改善,而不仅仅是速度。
随着应用程序的增长,重新评估应用程序的性能,并根据需要调整 RAG 管道。 请务必监视一段时间内的检索速度和准确性。
关键结论
对于 Postgres RAG 路径,您可以在数据库中保留检索功能,起始为pgvector,并在数据集和流量增长时转移到相应的索引。 如果需要更严格的排序,请在 SQL 中添加语义排序步骤。 引入 GraphRAG 以在关系具有意义时添加简短的图形步骤。 定期评估并监视生产环境,以便系统在数据和使用情况发生变化时保持快速和正确。