01
什么是 RAG?
检索增强生成(Retrieval Augmented Generation,简称 RAG)是一种通过整合外部数据源来增强大语言模型(LLM)的技术。典型的 RAG 应用包含以下几个步骤:
索引流程:从数据源获取数据并创建索引。这个流程通常包括在 Milvus 中加载数据、切分数据,以及对数据进行排序。
检索和生成:在运行时,RAG 应用处理用户的查询,从存储在 Milvus 中的索引中获取相关数据形成上下文,然后 LLM 基于丰富的上下文生成响应。
有多种方法可以改进 RAG 应用。本文将介绍如何利用 Milvus 向量数据库的元数据过滤、Hybrid Search 和 Agent 功能来提升 RAG 应用的性能。
02
元数据过滤
在将数据插入 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() 检查数组中的是否有匹配的元素。
03
Hybrid Search
Milvus 单个 Collection 中最多可创建 10 个向量字段。换言之,Milvus 支持多向量查询,用户能够同时在多个向量列中进行搜索。这一功能促进了多模态搜索、稀疏和稠密向量混合搜索,以及密集向量和全文混合搜索,提供了多样化和灵活的搜索能力。
不同列中的向量由不同的 Embedding 模型生成,可以用于从不同方面表示同一条数据。使用Hybrid Search 后,搜索结果会根据各种重排 (rerank)策略进行重新排序和整合。