AI开发-python-langchain框架(3-11-langchain与milvus的结合 )

极简高效!LangChain + Milvus 快速搭建企业级语义检索系统

在 RAG 大模型应用开发中,向量数据库 + 嵌入模型的组合是实现精准语义检索的核心,而 LangChain 与 Milvus 的搭配,堪称轻量化、高效率的最优解。无需复杂配置,无需手写海量向量处理逻辑,就能快速搭建出稳定、高性能的语义检索服务,极大降低了 RAG 应用的开发门槛。

一、技术选型:为什么选 LangChain + Milvus?

做 RAG 检索,选对工具事半功倍。LangChain 作为大模型应用开发的主流框架,封装了完善的文档处理、向量存储、检索调用接口,不用重复造轮子;Milvus 是专为海量向量检索设计的开源云原生向量数据库,性能强悍、部署简单,完美支撑高并发、大数据量的检索场景。
两者强强联合,无需深入钻研向量底层逻辑,开发者只需聚焦业务逻辑,就能快速实现从文本处理到语义匹配的全流程,开发效率直接拉满。

二、全流程极简开发,零复杂配置

整个搭建过程完全傻瓜化,核心流程一气呵成,没有繁琐的环境适配和代码编写:

1. 嵌入模型一键加载

轻量级的文本嵌入模型轻松接入,支持本地模型加载,CPU/GPU 灵活切换,自动完成文本到向量的转换,向量归一化等优化操作无需手动处理,开箱即用。

2. 文档处理自动化

不管是单条文本还是批量知识库内容,只需简单调用分片工具,就能自动完成长文本切割、分块,避免文本过长影响检索精度,全程自动化处理,不用手动拆分文档。

3. 向量写入零代码

LangChain 直接封装了 Milvus 的连接与数据写入逻辑,只需传入处理好的文档和嵌入模型,自动完成向量生成、集合创建、数据入库。哪怕是新手,也能轻松实现向量数据的存储,无需手动操作 Milvus 的底层接口。

4. 语义检索一行调用

最核心的语义检索功能,仅需一行代码就能实现。输入用户查询语句,系统自动完成向量匹配,快速返回最相关的知识库内容,支持自定义检索数量,精准满足业务需求。

三、优势拉满:企业级场景的绝佳选择

  1. 开发成本极低:全流程 API 封装,无冗余代码,几行核心逻辑就能完成整套检索服务,新手也能快速上手;
  2. 性能高效稳定:Milvus 专为向量检索优化,应对海量数据也能保持毫秒级响应,满足企业高并发需求;
  3. 兼容性超强:完美适配各类文本嵌入模型,支持本地 / 远程部署,CPU/GPU 环境通用,无环境兼容烦恼;
  4. 可扩展性强:从测试环境到生产环境无缝迁移,轻松对接大模型,快速升级为完整的 RAG 问答系统。

四、总结

LangChain 与 Milvus 的结合,真正实现了极简开发、高效运行、稳定可靠的向量检索服务。无论是个人学习 RAG 技术,还是企业搭建知识库检索、智能问答系统,这套组合都能以最低的成本、最快的速度落地。
不用纠结底层技术,不用编写复杂逻辑,专注业务本身,就能快速搭建出企业级的语义检索应用,这就是 LangChain+Milvus 带给开发者的极致便利!
代码实现:

复制代码
# 过滤 pymilvus 依赖的 pkg_resources 废弃警告(setuptools≥81 版本触发)
# 目的是消除版本兼容带来的无关警告,让控制台输出更整洁
import warnings
warnings.filterwarnings("ignore", message=".*pkg_resources is deprecated as an API.*")
from pymilvus import MilvusClient, DataType

# 导入核心库
from langchain_community.vectorstores import Milvus
from langchain_community.embeddings import SentenceTransformerEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.docstore.document import Document
from pymilvus import MilvusClient

# ===================== 1. 初始化嵌入模型 =====================
# 加载本地/远程的all-MiniLM-L6-v2模型,用于文本转384维向量
# 若模型已下载到本地,替换为你的本地路径:model_path="你的本地路径/all-MiniLM-L6-v2"
embeddings = SentenceTransformerEmbeddings(
    model_name="D:\\pythonProject2024\\pythonProject\\modelTest\\model\\all-MiniLM-L6-v2",  # 本地加载
    model_kwargs={"device": "cpu"},  # 若有GPU可改为"cuda"
    encode_kwargs={"normalize_embeddings": True}  # 向量归一化,提升检索精度
)

# ===================== 2. 准备测试文档并分片 =====================
# 模拟知识库文本(实际场景可替换为PDF/文档解析后的内容)
raw_texts = [
    "LangChain是一个用于构建大模型应用的框架,支持与多种向量库集成",
    "Milvus是一款开源的云原生向量数据库,专为海量向量检索设计",
    "all-MiniLM-L6-v2是轻量级文本嵌入模型,输出384维向量",
    "向量检索是RAG架构的核心步骤,用于从知识库中匹配相关文本",
    "LangChain与Milvus结合可实现高效的语义检索和问答功能"
]

# 将长文本分片(避免单条文本过长,提升检索精度)
text_splitter = CharacterTextSplitter(chunk_size=100, chunk_overlap=10)
docs = [Document(page_content=text) for text in raw_texts]
split_docs = text_splitter.split_documents(docs)

# ===================== 3. 连接Milvus并写入向量 =====================
# 将分片后的文档向量化并写入Milvus
db = Milvus.from_documents(
    documents=split_docs,
    embedding=embeddings,
   # Milvus连接配置
    collection_name="langchain_milvus_demo",
    connection_args={
                    "host": "192.168.211.128",  # Milvus服务地址
                    "port": "19530",       # Milvus默认端口
                    },
    drop_old=True  # 测试时删除已存在的同名集合(生产环境慎用)
)

# ===================== 4. 语义检索(核心功能) =====================
# 待检索的问题(模拟用户查询)
query = "LangChain如何与Milvus结合使用?"

# 从Milvus中检索最相关的3条文本
retriever = db.as_retriever(search_kwargs={"k": 3})
relevant_docs = retriever.get_relevant_documents(query)

# 打印检索结果
print("=== 检索到的相关文本 ===")
for i, doc in enumerate(relevant_docs):
    print(f"{i+1}. {doc.page_content}")

# 进阶:直接调用similarity_search方法检索
results = db.similarity_search(query=query, k=3)
print('------------')
print(results)

# 查看自动创建的集合
client = MilvusClient(
    uri="http://192.168.211.128:19530",
    token="root:Milvus"
)

#查看
res = client.list_collections()
print(res)

print('--------')
des_res = client.describe_collection(
    collection_name="langchain_milvus_demo"
)
#描述
print(des_res)

输出:

=== 检索到的相关文本 ===

  1. LangChain与Milvus结合可实现高效的语义检索和问答功能

  2. LangChain是一个用于构建大模型应用的框架,支持与多种向量库集成

  3. Milvus是一款开源的云原生向量数据库,专为海量向量检索设计


Document(page_content='LangChain与Milvus结合可实现高效的语义检索和问答功能', metadata={'pk': 464788024576181544}), Document(page_content='LangChain是一个用于构建大模型应用的框架,支持与多种向量库集成', metadata={'pk': 464788024576181540}), Document(page_content='Milvus是一款开源的云原生向量数据库,专为海量向量检索设计', metadata={'pk': 464788024576181541})

'quick_setup', 'open_manus_knowledge_graph', 'test_collection', 'langchain_milvus_demo', 'tutorial_1', 'osa_topic_knowledge', 'open_manus_knowledge_chunk', 'open_manus_knowledge_experience', 'customized_setup_2', 'osa_topic_info', 'open_manus_knowledge', 'vanna_text2sql_condition', 'group_t', 'customized_setup_1', 'custom_quick_setup', 'vanna_text2sql', 'data_t', 'demo', 'customized_setup', 'ai_rag_user_info'


{

'collection_name': 'langchain_milvus_demo',

'auto_id': True,

'num_shards': 1,

'description': '',

'fields': [{

'field_id': 100,

'name': 'text',

'description': '',

'type': < DataType.VARCHAR: 21 > ,

'params': {

'max_length': 65535

}

}, {

'field_id': 101,

'name': 'pk',

'description': '',

'type': < DataType.INT64: 5 > ,

'params': {},

'auto_id': True,

'is_primary': True

}, {

'field_id': 102,

'name': 'vector',

'description': '',

'type': < DataType.FLOAT_VECTOR: 101 > ,

'params': {

'dim': 384

}

}],

'functions': [],

'aliases': [],

'collection_id': 464788024587041090,

'consistency_level': 1,

'properties': {},

'num_partitions': 1,

'enable_dynamic_field': False

}

从输出结果可以看到,langchain自动创建的milvus集合只有text、pk、vector 三个属性字段,如果需要更多字段,建议使用milvus的创建语句去创建集合。

更多学习资料尽在 老虎网盘资源