Milvus在LangChain中使用方法

下面介绍在 LangChain 框架中安装和使用 Milvus 向量数据库的方法,分为本地轻量体验和生产环境部署两种情况。


一、Milvus 简介

Milvus 是一个开源向量数据库,专门用于存储、索引和管理深度神经网络生成的向量嵌入,核心能力包括高效的相似性搜索可扩展的索引 以及混合检索(稀疏向量 + 密集向量) 。通过官方提供的 langchain-milvus 集成包,可以与 LangChain 无缝衔接,构建 RAG(检索增强生成)应用。

二、方式一:Milvus Lite(本地快速体验)

如果你在本机(Ubuntu 20.04+ 或 macOS 11.0+)进行开发测试,推荐使用 Milvus Lite。它是一个轻量级版本,直接以 .db 文件形式存储,无需启动任何后台服务。Milvus Lite 与 Milvus Standalone 共享相同的 API,一套代码可以在不同环境迁移。

安装步骤:

  1. 安装 PyMilvus(内含 Milvus Lite)

    bash 复制代码
    pip install -U pymilvus

    Milvus Lite 已包含在 pymilvus >= 2.4.2 中,无需单独安装。

  2. 安装 langchain-milvus 集成包

    bash 复制代码
    pip install -U langchain-milvus

    如果还需加载网页或使用 OpenAI embeddings,建议一次性安装:

    bash 复制代码
    pip install langchain-milvus langchain-openai tiktoken bs4
  3. 在代码中连接 Milvus Lite

    只需将 uri 参数指定为一个本地文件路径即可。如果文件不存在,程序会自动创建。

    python 复制代码
    from langchain_milvus import Milvus
    from langchain_openai import OpenAIEmbeddings
    
    embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
    
    vector_store = Milvus(
        embedding_function=embeddings,
        connection_args={"uri": "./milvus_demo.db"},
        index_params={"index_type": "FLAT", "metric_type": "L2"},
    )

⚠️ 数据规模提醒:Milvus Lite 适合小规模原型开发(通常少于 100 万条向量),一旦超过该规模,建议切换到 Milvus Standalone。

三、方式二:Milvus Standalone(Docker 部署,适合开发/生产测试)

若数据量较大(超过百万级向量),使用 Docker 部署的 Milvus Standalone 性能更优,支持 IVF、HNSW 等多种高效索引。

方案 A:一键脚本启动(最简单)

Milvus 官方提供了一个脚本,通过 curlbash 一键启动 Standalone 容器:

bash 复制代码
# 下载安装脚本
curl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed.sh

# 启动 Milvus 容器
bash standalone_embed.sh start

# 可选:停止 Milvus
bash standalone_embed.sh stop

成功启动后:

  • Milvus 服务在 19530 端口监听
  • Milvus WebUI 可通过 http://127.0.0.1:9091/webui/ 访问,查看实例详情

方案 B:Docker Compose 配置(更具可控性)

通过 docker-compose.yml 管理多个组件(Milvus、etcd、MinIO),适合生产环境的长期部署:

bash 复制代码
# 下载配置文件
wget https://github.com/milvus-io/milvus/releases/download/v2.6.14/milvus-standalone-docker-compose.yml -O docker-compose.yml

# 启动服务(后台运行)
sudo docker compose up -d

启动完成后,查看容器状态:

bash 复制代码
sudo docker compose ps

输出应包含 milvus-standalonemilvus-etcdmilvus-minio 三个容器,均处于活动状态。

在 LangChain 中连接 Docker Milvus

连接参数只需将 uri 改为 Milvus 服务的地址和端口:

python 复制代码
from langchain_milvus import Milvus
from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings(model="text-embedding-3-small")

vector_store = Milvus(
    embedding_function=embeddings,
    connection_args={"uri": "http://localhost:19530"},
    collection_name="my_collection",
)

四、方式三:Milvus 分布式集群(生产级部署)

若需处理十亿级向量、支撑大规模 RAG 系统,推荐使用 Milvus 分布式集群。日常采用 Kubernetes + Milvus Operator 部署,但涉及专用的存储和运维团队。开发阶段建议使用托管云方案(如 Zilliz Cloud),无需自行运维。

如何在 LangChain 中连接分布式 Milvus

与 Standalone 完全相同,只需修改 uritoken

python 复制代码
from langchain_milvus import Milvus
from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings()
vector_store = Milvus(
    embedding_function=embeddings,
    connection_args={
        "uri": "https://xxx.api.gcp-us-west1.zillizcloud.com",  # 集群公网访问端点
        "token": "your_api_key_or_username:password",
    },
    collection_name="production_collection",
)

五、LangChain 中的完整代码示例

以下是一个完整的 RAG 流程:加载网页文档 → 文本分块 → 生成向量 → 存储至 Milvus → 执行相似性检索。

python 复制代码
import os
from langchain_milvus import Milvus
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.document_loaders import WebBaseLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains import create_retrieval_chain

# 1. 设置 OpenAI API Key
os.environ["OPENAI_API_KEY"] = "your-api-key"

# 2. 加载文档
loader = WebBaseLoader("https://milvus.io/docs/overview.md")
docs = loader.load()

# 3. 文本分块
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
documents = text_splitter.split_documents(docs)

# 4. 生成向量并存入 Milvus(使用 Lite 本地模式)
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vector_store = Milvus.from_documents(
    documents=documents,
    embedding=embeddings,
    connection_args={"uri": "./milvus_demo.db"},   # Lite 模式
    collection_name="doc_qa_db",
)

# 5. 构建检索器并执行语义查询
retriever = vector_store.as_retriever(search_kwargs={"k": 3})
query = "What is Milvus?"
results = retriever.invoke(query)

for doc in results:
    print(f"Content: {doc.page_content[:200]}...\n---\n")

几点说明:

  • 若需持久化数据,可将 uri 修改为 Milvus Server 的远程地址(如 http://localhost:19530)。
  • Milvus 还支持混合检索 ,即结合语义搜索(密集向量)与 BM25 全文检索(稀疏向量),适合精确术语类查询。更多细节可参考 LangChain + Milvus 混合检索官方示例

总结:如何选择部署方式

部署方式 适用场景 推荐索引类型 数据量上限
Milvus Lite 本地开发、Jupyter Notebook FLAT < 100 万条
Milvus Standalone (Docker) 开发/测试、中型应用 IVF、HNSW 数百万~千万级
Milvus 集群 / 全托管云 高并发、亿万级 RAG 服务 DiskANN、HNSW 等任意索引 十亿级以上

综合来看,日常开发先用 Milvus Lite 跑通流程,需要更优性能时再切换到 Docker Standalone,生产环境则可以直接使用分布式或全托管方案。这种渐进模式可以最大程度降低前期投入成本。

相关推荐
天国梦6 小时前
读后续写批改难题怎么破?天学网AI批改工具实测解析
人工智能
阿里云云原生6 小时前
OpenTelemetry eBPF 在 AI 场景的应用:配置 ack-onepilot 实现 LLM 调用链追踪
人工智能·阿里云·云监控
sel_96 小时前
【多轮对话论文导读(三)】多轮对话与Agent论文阅读笔记:用户模拟、轨迹生成与长期记忆
论文阅读·人工智能·笔记·深度学习·算法·机器学习
玫瑰互动GEO6 小时前
从工程视角拆解海外ClaudeGEO关键词优化:如何拿到AI搜索引用席位,获得B端采购选择
人工智能
数据库小学妹6 小时前
AI Agent记忆怎么存?Redis+向量库三层记忆架构实战
人工智能·架构·向量数据库·ai数据库·数据库趋势·ai agent记忆
HySpark7 小时前
从 VAD、声纹嵌入到聚类优化的一套解决思路
人工智能·语音识别·熙瑾会悟
YOLO数据集集合7 小时前
垃圾目标检测数据集 |垃圾检测 智慧环卫 城市管理 生活垃圾堆检测 生活垃圾 垃圾场 9023期
人工智能·目标检测·视觉检测·生活·垃圾检测·垃圾
cxr8287 小时前
混沌背后的秩序:T-Π-O 框架与复杂系统理解的认识论重构
人工智能·认知框架
LFly_ice7 小时前
LangChain-03 环境准备
langchain
sramdram7 小时前
语音识别芯片类别有哪些?离线语音识别芯片交互方案分析
人工智能·交互·语音识别·语音识别芯片·离线语音识别芯片