引言
在深度学习和机器学习模型生成的海量嵌入向量中,如何高效地存储、索引和管理这些数据是一个挑战。Milvus提供了一种解决方案,专为处理大量嵌入向量而设计。本篇文章将介绍如何使用Milvus进行向量数据管理,并提供实用的代码示例。
主要内容
我们将分几个小节深入了解Milvus的功能:
1. 什么是Milvus?
Milvus是一个专门用于存储、检索和管理嵌入向量的数据库系统。它的设计目标是在支持实时分析的同时具备高吞吐量和低延迟,适合大规模机器学习应用场景。
2. 设置与初始化
安装
首先,通过以下命令安装langchain-milvus库:
%pip install -qU langchain_milvus
此外,您可以使用Milvus Lite进行本地原型设计,若处理超过百万级数据,建议使用Docker或Kubernetes设置更强大的Milvus服务器。
初始化
下面通过langchain库中的OpenAI和HuggingFace嵌入示例,初始化Milvus:
from langchain_openai import OpenAIEmbeddings
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_milvus import Milvus
embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
URI = "./milvus_example.db" # 本地存储路径
vector_store = Milvus(
embedding_function=embeddings,
connection_args={"uri": URI}, # 使用API代理服务提高访问稳定性
)
3. 管理Milvus向量存储
您可以通过创建集合来管理不同的文档存储,确保数据的分类和上下文的完整性。
添加与删除文档
代码示例展示如何添加和删除文档:
from langchain_core.documents import Document
from uuid import uuid4
documents = [
Document(page_content="Example content", metadata={"source": "example_source"})
]
uuids = [str(uuid4()) for _ in range(len(documents))]
vector_store.add_documents(documents=documents, ids=uuids) # 添加文档
vector_store.delete(ids=[uuids[0]]) # 删除文档
查询与相似性搜索
可以进行相似性搜索,根据元数据进行过滤:
results = vector_store.similarity_search(
"Search query", k=2, filter={"source": "example_source"}
)
for res in results:
print(f"* {res.page_content} [{res.metadata}]")
代码示例
以下是一个完整示例,展示了如何使用Milvus进行向量存储和查询:
from langchain_core.documents import Document
from langchain_milvus import Milvus
from langchain_huggingface import HuggingFaceEmbeddings
embeddings = HuggingFaceEmbeddings(model="sentence-transformers/all-mpnet-base-v2")
URI = "./milvus_example.db"
vector_store = Milvus(
embedding_function=embeddings,
connection_args={"uri": URI},
)
documents = [
Document(page_content="This is a test document", metadata={"source": "test"})
]
uuids = [str(uuid4())]
vector_store.add_documents(documents=documents, ids=uuids)
results = vector_store.similarity_search("Test search query", k=1)
for res in results:
print(f"* {res.page_content} [{res.metadata}]")
常见问题和解决方案
- Milvus性能优化: 对于大规模数据,请使用Docker部署Milvus服务器。
- 区域限制问题: 某些地区的网络限制可能会影响使用,建议使用API代理服务。
总结和进一步学习资源
Milvus是管理海量嵌入向量的强大工具,适用于需要高效向量检索的场景。通过详细的API参考和社区支持,您可以深入探索其更多功能。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---