利用元数据过滤、Hybrid Search、 Agent 等功能提升您的 RAG 应用

2024-10-25

By Stephen Batifol

利用元数据过滤、Hybrid Search、 Agent 等功能提升您的 RAG 应用

什么是 RAG?

检索增强生成(Retrieval Augmented Generation,简称 RAG)是一种通过整合外部数据源来增强大语言模型(LLM)的技术。典型的 RAG 应用包含以下几个步骤:

  • 索引流程:从数据源获取数据并创建索引。这个流程通常包括在 Milvus 中加载数据、切分数据,以及对数据进行排序。

  • 检索和生成:在运行时,RAG 应用处理用户的查询,从存储在 Milvus 中的索引中获取相关数据形成上下文,然后 LLM 基于丰富的上下文生成响应。

有多种方法可以改进 RAG 应用。本文将介绍如何利用 Milvus 向量数据库的元数据过滤、Hybrid Search 和 Agent 功能来提升 RAG 应用的性能。

元数据过滤

在将数据插入 Milvus 时,建议同时包含元数据。例如,如果您需要在 Milvus 中插入 PDF 文件的向量,您可以同时插入页码、PDF 文件名、作者等元数据信息。

通过在 Milvus 中存储元数据,您可以在搜索时过滤掉不相关的数据,从而提升检索的速度和效率。元数据过滤特别适合 RAG 应用,因为您可以确保只将与用户查询相关的内容传入 LLM。

Milvus 支持 full-string 元数据匹配,系统会通过 prefix、infix、postfix,甚至字符通配符(wildcard)搜索来匹配字符串。

    # Prefix example, matches any string starting with “The”.
    expression='title like "The%"'
    # Infix example, matches any string with the word “the” anywhere in the sentence.
    expression='title like "%the%"'
    # Postfix example, matches any string ending with “Rye”.
    expression='title like "%Rye"'
    # Single character wildcard example, matches any one single character at a specific position.
    expression='title like "Flip_ed"'

同样,Milvus 也支持使用数组值进行元数据过滤。通过精确匹配或 contains_any() 检查数组中的是否有匹配的元素。

Milvus 单个 Collection 中最多可创建 10 个向量字段。换言之,Milvus 支持多向量查询,用户能够同时在多个向量列中进行搜索。这一功能促进了多模态搜索、稀疏和稠密向量混合搜索,以及密集向量和全文混合搜索,提供了多样化和灵活的搜索能力。 不同列中的向量由不同的 Embedding 模型生成,可以用于从不同方面表示同一条数据。 使用Hybrid Search 后,搜索结果会根据各种重排 (rerank)策略进行重新排序和整合。

image.png image.png

Milvus Hybrid Search 的原理

  • 利用各种类型的 Embedding 向量,包括由 BERTTransformers 等模型生成的稠密向量,以及由 BM25BGE-M3SPLADE 等算法生成的稀疏向量。

  • 支持来自各种非结构化数据类型(如图像、视频、音频和文本文件)的多模态向量。例如,在刑事调查中,可以用指纹、声纹和面部识别等多模态的生物特征来表示嫌疑人。多模态数据有助于跨不同模态识别目标。

  • 支持将向量搜索和全文搜索相结合。

RAG 应用中的 Agent

LLM 无法单独使用,它们只能输出文本。而 Agent 可以通过使用 LLM 作为引擎来确定采取哪些行动以及向 LLM 传入哪些内容。在执行任务后,Agent 可以将结果传回 LLM,从而确定结束任务还是执行更多任务。

Agent 可以用来执行许多任务,如搜索网页、浏览您的电子邮件、纠正 RAG、根据检索文档对 RAG 添加自我反思(Self-reflection)或自我评分(Self-grading)等。

2.png 2.png

设置完成后,Agent 可以将新的数据添加到 Milvus 中,或检索数据并将其传入您的 LLM。通过使用 Agent,您的 RAG 系统中能够始终整合最新知识。Milvus 还支持通过 upsert()函数轻松更新数据。

总结

通过使用 Milvus 中的元数据过滤、Hybrid Search 和 Agent 功能,您可以提升您的 RAG 应用性能。

元数据过滤帮助您根据特定信息过滤数据,实现精确和高效的搜索。混合搜索通过允许跨多个向量列进行查询,扩展了搜索能力。Agent 通过基于 LLM 输出自动执行操作来提升 RAG 功能。

  • Stephen Batifol

    Stephen Batifol

    Developer Advocate

    准备好开始了吗?

    立刻创建 Zilliz Cloud 集群,存储和检索您的向量。

    免费试用 Zilliz Cloud