You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Milvus与LangChain创建持久化向量库并实现跨脚本存取

LangChain中Milvus持久化向量库的实现方案

你之前的误解在于对Milvus.from_documents的认知——它并非创建内存向量库,而是连接到你已部署的持久化Milvus实例,只是默认会创建临时集合(脚本结束后自动删除)。只要指定固定的集合名称,就能实现数据持久化,后续脚本可通过该集合名重新连接。

1. 创建持久化向量库并导入数据

修改原代码,添加collection_name参数指定固定集合名,同时设置drop_old=False避免每次运行删除已有数据:

def parseWPDataFile(filename):
    # redacted for brevity
    return {
        'meta': parsed_headers,
        'body': doc_body.strip()
    }

parsed_doc = parseWPDataFile('sample_data.txt')
text_splitter = RecursiveCharacterTextSplitter(is_separator_regex=True, separators=['\n+'], chunk_size=5000, length_function=len)
docs = text_splitter.create_documents([parsed_doc['body']], [parsed_doc['meta']])
embeddings = OpenAIEmbeddings()

# 指定固定集合名,实现持久化
vector_db = Milvus.from_documents(
    docs,
    embeddings,
    connection_args={"host": "127.0.0.1", "port": "19530"},
    collection_name="employer_blogs",  # 自定义固定集合名
    drop_old=False  # 不删除已有集合,避免数据丢失
)

# 后续还可以继续添加更多文档
# new_docs = ...
# vector_db.add_documents(new_docs)

这段代码会将数据存入Milvus实例中名为employer_blogs的集合,数据会持久保存在你的Milvus部署中(前提是Milvus本身配置了持久化存储,比如Docker部署时挂载了数据卷)。

2. 在独立脚本中加载已有向量库

直接使用Milvus类的构造函数,传入相同的连接参数和集合名,即可获取已有的向量库引用:

from langchain.vectorstores import Milvus
from langchain.embeddings import OpenAIEmbeddings

embeddings = OpenAIEmbeddings()

# 连接到已有的持久化集合
vector_db = Milvus(
    embedding_function=embeddings,
    connection_args={"host": "127.0.0.1", "port": "19530"},
    collection_name="employer_blogs"
)

# 示例:执行查询
query = "如何优化雇主博客的SEO?"
docs = vector_db.similarity_search(query)
print(docs)

关键说明

  • Milvus实例本身是持久化的,只要你部署时配置了数据持久化(比如Docker启动时指定-v挂载数据目录),集合数据就不会丢失。
  • drop_old=False非常重要,默认值为True,会删除同名集合,导致之前的数据丢失,所以一定要显式设置为False。
  • 如果需要向已有集合追加数据,直接调用vector_db.add_documents(new_docs)即可。

内容的提问来源于stack exchange,提问作者I wrestled a bear once.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 09:22:35