在人工智能与数据处理领域,高效处理非结构化数据始终是一项核心挑战。Milvus 作为专为 AI 应用打造的开源向量数据库,为机器学习、深度学习等项目提供了成熟的大规模向量检索方案,深受广大 AI 开发者青睐。它能够轻松管理文本、图像、音视频等数据转化而来的向量,是构建智能应用必不可少的基础设施。

近期,Milvus 的 Python SDK——PyMilvus 迎来一次重要更新:其新集成的模型模块现已支持直接调用 Embedding 模型与重排(Reranker)模型。这意味着开发者无需在多个工具间来回切换,便能在 Milvus 内部轻松完成数据向量化及搜索结果优化。对于构建检索增强生成(RAG)这类应用而言,整个流程被极大简化,变得更加高效便捷。
接下来,我们先快速回顾一下稠密向量和稀疏向量这两种主流的 Embedding 模型,以及 Reranker 的核心作用,然后通过实际示例,看看如何在轻量版 Milvus——Milvus Lite 中直接运行这些模型。
01. 稠密向量 vs 稀疏向量
在深入实操之前,有必要先厘清 Embedding 向量的两大基本类型。理解它们的特性,将帮助你根据具体场景选择最合适的模型。
- 稠密向量:这种向量的维度通常很高,但绝大多数维度上的值都不为零。它擅长捕捉和表征文本的深层语义信息,非常适合进行语义相似性搜索。
- 稀疏向量:同样拥有高维度,然而绝大部分维度的值都为零。它的优势在于精准的关键词匹配与检索,尤其在处理领域专有名词或新词(域外知识)时表现尤为突出。
Milvus 的强大之处在于同时原生支持这两种向量,并提供了混合搜索能力。用户可以在同一个 Collection 中定义多个不同类型的向量字段,在一次查询中同时利用语义和关键词信息。简单来说,用不同模型或方法处理同一份数据,可以得到代表不同特征的向量,而 Milvus 能让它们协同工作,发挥出 1+1>2 的效果。
02. 如何在 Milvus 中使用 Embedding 和 Reranker 模型
理论清晰之后,我们通过三个具体示例,看看如何实际调用这些集成的模型来生成向量并执行搜索。
示例 1: 使用默认 Embedding function 生成稠密向量
要使用这些新功能,首先需要在安装 pymilvus 时带上模型包:
pip install 'pymilvus[model]'
这个命令会同时安装 Milvus Lite。没错,这个轻量版本现在也完整包含了模型包。模型包里预置了多种主流模型,包括 OpenAI 的模型、Sentence Transformers、BGE-M3、以及 BM25、SPLADE 等稀疏模型,还有 Jina AI 的预训练模型。
第一个示例,我们使用默认的 Embedding 函数和轻量级的 Sentence Transformer 模型 all-MiniLM-L6-v2。这个模型大小约 70MB,会在第一次使用时自动下载,非常便捷。
from pymilvus import model
# 这将下载“all-MiniLM-L6-v2”模型
ef = model.DefaultEmbeddingFunction()
# 待转换为向量的文本数据
docs = [
“Artificial intelligence was founded as an academic discipline in 1956.”,
“Alan Turing was the first person to conduct substantial research in AI.”,
“Born in Maida Vale, London, Turing was raised in southern England.”,
]
embeddings = ef.encode_documents(docs)
print(“Embeddings:”, embeddings)
# 打印向量的维度和形状
print(“Dim:”, ef.dim, embeddings[0].shape)
运行后,你会得到类似下面的输出,可以看到生成的稠密向量维度为 384:
Embeddings: [array([-3.09392996e-02, -1.80662833e-02, 1.34775648e-02, ... , 9.04406682e-02, -5.36676683e-02], dtype=float32)] Dim: 384 (384,)
示例 2: 使用 BM25 模型生成稀疏向量
BM25 是一种经典的关键词评分算法,它通过统计词频来判断查询与文档的相关性,特别适合需要精确关键词匹配的场景。下面展示如何用 BM25EmbeddingFunction 为文档和查询生成稀疏向量。
使用 BM25 时,一个关键步骤是计算文档集合的逆文档频率(IDF),这代表了词语在语料库中的普遍程度。
from pymilvus.model.sparse import BM25EmbeddingFunction
# 1. 准备一个小的文档库
docs = [
“Artificial intelligence was founded as an academic discipline in 1956.”,
“Alan Turing was the first person to conduct substantial research in AI.”,
“Born in Maida Vale, London, Turing was raised in southern England.”,
]
query = “Where was Turing born?”
bm25_ef = BM25EmbeddingFunction()
# 2. 拟合文档库,获取BM25模型参数
bm25_ef.fit(docs)
# 3. 保存拟合的参数,方便后续快速加载使用
bm25_ef.sa ve(“bm25_params.json”)
# 4. 加载已保存的参数
new_bm25_ef = BM25EmbeddingFunction()
new_bm25_ef.load(“bm25_params.json”)
docs_embeddings = new_bm25_ef.encode_documents(docs)
query_embeddings = new_bm25_ef.encode_queries([query])
print(“Dim:”, new_bm25_ef.dim, list(docs_embeddings)[0].shape)
示例 3: 使用 Reranker 优化搜索结果
搜索系统首先追求的是速度,需要快速返回一批可能相关的结果。传统方法会用 BM25 进行关键词重排,而现在更常见的做法是直接按 Embedding 的余弦相似度排序。但这两种方法都有局限:前者可能忽略语义,后者则可能无法精准捕捉查询与文档间的细微意图关联。
因此,专业级的搜索系统往往会引入 Reranker(重排模型)。这种高级 AI 模型能够对初步的搜索结果进行“再审”,深度评估文档与查询意图之间的匹配度,而不仅仅是表面词的相似性。它能显著提升最终排序结果的质量,让最相关的结果优先呈现。
下面以 Jina AI 的 Reranker 为例:
from pymilvus.model.reranker import JinaRerankFunction
jina_api_key = “”
rf = JinaRerankFunction(“jina-reranker-v1-base-en”, jina_api_key)
query = “What event in 1956 marked the official birth of artificial intelligence as a discipline?”
documents = [
“In 1950, Alan Turing published his seminal paper, ‘Computing Machinery and Intelligence,’ proposing the Turing Test...",
“The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field...",
“In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess...",
“The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation...”
]
results = rf(query, documents)
for result in results:
print(f“Index: {result.index}”)
print(f“Score: {result.score:.6f}”)
print(f“Text: {result.text}n”)
从输出可以清晰地看到,Reranker 成功地将最相关的结果(关于 1956 年达特茅斯会议)排在了首位,并且给出了很高的相关性分数:
Index: 1 Score: 0.937096 Text: The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term ‘artificial intelligence’ and laid out its basic goals. Index: 3 Score: 0.354210 Text: The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program... Index: 0 Score: 0.349866 Text: In 1950, Alan Turing published his seminal paper, ‘Computing Machinery and Intelligence,’... Index: 2 Score: 0.272896 Text: In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess...
通过这三个示例不难发现,PyMilvus 将模型集成到数据库 SDK 中的做法,确实让 AI 应用的开发链路更加顺畅。开发者可以专注于业务逻辑本身,而无需在数据预处理、模型调用和向量存储之间反复调试对接。这无疑是提升开发效率的关键一步,也为构建更智能的 RAG 应用提供了坚实底座。
