milvus-model
milvus-io/milvus-model加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你构建了一个基于大语言模型的智能客服系统,用 RAG(检索增强生成)架构从海量文档中召回相关段落喂给 LLM。用户问"如何配置 PostgreSQL 连接池",系统却返回了"线程池配置"、"内存优化"等毫不相干的内容。问题出在哪里?
不是 LLM 太笨,而是你的 Embedding 模型没有把"语义相似"这件事真正理解到位。
向量检索的核心在于:将文字转换为高维向量,让语义相近的内容在向量空间中"靠近"。但现实远比理论复杂——同一个查询,在文档检索场景和问答场景中应该有不同的向量表示;稠密向量擅长捕捉深层语义,稀疏向量对关键词匹配更敏感;单一的 Embedding 模型往往难以同时兼顾精度与召回率。
milvus-model(PyMilvus Model)正是为解决这些痛点而生。它不是一个新的向量数据库,而是一把连接主流 Embedding/Reranker 模型与 Milvus 向量数据库的"万能钥匙"。
Milvus(https://milvus.io/)是 Zilliz 公司开源的高性能向量数据库,专为 AI 应用设计,支持十亿级向量检索,在全球开发者中有极高影响力。而 milvus-model 则是 Milvus 生态中的模型集成层——它以 pymilvus.model 的名义发布,是 PyMilvus Python SDK 的可选依赖模块(pip install pymilvus[model])。
该项目由 Milvus 团队(Zilliz)官方维护,支持 OpenAI、Cohere、Jina AI、Voyage AI、Mistral AI 等主流商业 Embedding API,以及 SentenceTransformers、HuggingFace Text Embeddings Inference (TEI)、BGE 等开源模型,覆盖了从闭源 API 到私有化部署的全场景需求。
milvus-model 的设计哲学极为简洁:开发者无需关心底层模型的具体实现,只需声明使用哪个模型,库自动完成模型加载、推理和向量格式化。
项目在 src/pymilvus/model/ 下实现了十余种 Embedding 函数,核心子类包括:
| 模型来源 | 实现类 | 说明 |
|---|---|---|
| OpenAI | OpenAIEmbeddingFunction | 支持 text-embedding-3 系列 |
| SentenceTransformers | SentenceTransformerEmbeddingFunction | 本地开源模型 |
| HuggingFace TEI | TEIEmbeddingFunction | 高性能推理服务化部署 |
| ONNX | OnnxEmbeddingFunction | 跨平台本地推理 |
| Cohere | CohereEmbeddingFunction | 多语言支持 |
| Jina AI | JinaEmbeddingFunction | 免费额度友好 |
| Voyage AI | VoyageEmbeddingFunction | 专业检索优化 |
| Mistral AI | MistralAIEmbeddingFunction | 欧洲最强开源模型厂商 |
| Instructor | InstructorEmbeddingFunction | 指令微调Embedding |
| Nomic | NomicEmbeddingFunction | 可视化地图Atlas |
| Gemini | GeminiEmbeddingFunction | Google 多模态能力 |
| Model2Vec | Model2VecEmbeddingFunction | 轻量级Embedding |
基类 BaseEmbeddingFunction 提供了两个标准化方法:encode_documents()(文档编码)和 encode_queries()(查询编码),这是语义搜索的关键——查询和文档需要用不同策略编码,查询侧重于匹配意图,文档侧重于语义完整性。
除了 Embedding,项目还实现了 6 种 Reranker(重排序模型):
Rerank 的工作方式是:在 Embedding 召回 Top-N 结果后,用更强大的交叉编码模型对每个候选段落与查询的相关性重新打分,返回最相关的 Top-K 结果。典型的 RAG 精度提升 15-30% 就来自这一步。
milvus-model 在 hybrid/ 模块下实现了两种多向量策略:
在 sparse/ 模块下还有基于 BM25 的经典关键词检索和 SPLADE(稀疏高维 Embedding),可与稠密向量互补,显著提升专业术语和专有名词场景的召回率。
milvus-model 是典型的无状态 Python 库,不提供独立服务,架构如下:
用户代码
├── import pymilvus.model
├── DefaultEmbeddingFunction (OnnxEmbeddingFunction 默认)
├── encode_queries() → 生成向量
└── encode_documents() → 生成向量
↓
Milvus 向量数据库
↓
LLM (RAG)
# 方式一:从 pymilvus 安装(推荐)
pip install pymilvus[model]
# 方式二:直接安装
pip install pymilvus.model
安装后无需任何配置,直接使用:
from pymilvus import model
# 使用默认 ONNX 模型(paraphrase-albert,轻量级)
ef = model.DefaultEmbeddingFunction()
# 编码查询和文档
queries = ["如何配置数据库连接?"]
documents = [
"PostgreSQL配置指南:修改postgresql.conf参数",
"Redis缓存最佳实践",
"MongoDB索引优化技巧"
]
query_vec = ef.encode_queries(queries)
doc_vecs = ef.encode_documents(documents)
# 接入 Milvus 进行向量检索
# ...
milvus-model 的出现反映了 RAG 管线的一个趋势:Embedding 模型的选择比 LLM 本身更关键。一个 7B 参数的 Embedding 模型可能比 70B 的 LLM 更能决定最终答案质量。项目以极低的接入成本,打通了从模型选型到向量入库的全链路,让开发者可以快速在 OpenAI(快速验证)、BGE(私有化)、Cohere(多语言)等方案之间切换,找到最适合自己场景的 Embedding 组合。
其混合检索实现(稠密+稀疏+多向量)也代表了 2024 年 RAG 领域的工程前沿——单向量已不够用,多策略融合才是王道。
Milvus 官方 Logo | 图:GitHub