如何将Python LangChain框架与Milvus数据库结合开发?

摘要:极简高效!LangChain + Milvus 快速搭建企业级语义检索系统 在 RAG 大模型应用开发中,向量数据库 + 嵌入模型的组合是实现精准语义检索的核心,而 LangChain 与 Milvus
极简高效!LangChain + Milvus 快速搭建企业级语义检索系统 在 RAG 大模型应用开发中,向量数据库 + 嵌入模型的组合是实现精准语义检索的核心,而 LangChain 与 Milvus 的搭配,堪称轻量化、高效率的最优解。无需复杂配置,无需手写海量向量处理逻辑,就能快速搭建出稳定、高性能的语义检索服务,极大降低了 RAG 应用的开发门槛。 一、技术选型:为什么选 LangChain + Milvus? 做 RAG 检索,选对工具事半功倍。LangChain 作为大模型应用开发的主流框架,封装了完善的文档处理、向量存储、检索调用接口,不用重复造轮子;Milvus 是专为海量向量检索设计的开源云原生向量数据库,性能强悍、部署简单,完美支撑高并发、大数据量的检索场景。 两者强强联合,无需深入钻研向量底层逻辑,开发者只需聚焦业务逻辑,就能快速实现从文本处理到语义匹配的全流程,开发效率直接拉满。 二、全流程极简开发,零复杂配置 整个搭建过程完全傻瓜化,核心流程一气呵成,没有繁琐的环境适配和代码编写: 1. 嵌入模型一键加载 轻量级的文本嵌入模型轻松接入,支持本地模型加载,CPU/GPU 灵活切换,自动完成文本到向量的转换,向量归一化等优化操作无需手动处理,开箱即用。 2. 文档处理自动化 不管是单条文本还是批量知识库内容,只需简单调用分片工具,就能自动完成长文本切割、分块,避免文本过长影响检索精度,全程自动化处理,不用手动拆分文档。 3. 向量写入零代码 LangChain 直接封装了 Milvus 的连接与数据写入逻辑,只需传入处理好的文档和嵌入模型,自动完成向量生成、集合创建、数据入库。哪怕是新手,也能轻松实现向量数据的存储,无需手动操作 Milvus 的底层接口。 4. 语义检索一行调用 最核心的语义检索功能,仅需一行代码就能实现。输入用户查询语句,系统自动完成向量匹配,快速返回最相关的知识库内容,支持自定义检索数量,精准满足业务需求。 三、优势拉满:企业级场景的绝佳选择 开发成本极低:全流程 API 封装,无冗余代码,几行核心逻辑就能完成整套检索服务,新手也能快速上手; 性能高效稳定:Milvus 专为向量检索优化,应对海量数据也能保持毫秒级响应,满足企业高并发需求; 兼容性超强:完美适配各类文本嵌入模型,支持本地 / 远程部署,CPU/GPU 环境通用,无环境兼容烦恼; 可扩展性强:从测试环境到生产环境无缝迁移,轻松对接大模型,快速升级为完整的 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的创建语句去创建集合。 更多学习资料尽在 老虎网盘资源