找回密码
 立即注册
首页 业界区 业界 AI开发-python-langchain框架(3-11-langchain与milvus ...

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

卓卞恻 3 天前
极简高效!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 带给开发者的极致便利! 代码实现:
  1. # 过滤 pymilvus 依赖的 pkg_resources 废弃警告(setuptools≥81 版本触发)
  2. # 目的是消除版本兼容带来的无关警告,让控制台输出更整洁
  3. import warnings
  4. warnings.filterwarnings("ignore", message=".*pkg_resources is deprecated as an API.*")
  5. from pymilvus import MilvusClient, DataType
  6. # 导入核心库
  7. from langchain_community.vectorstores import Milvus
  8. from langchain_community.embeddings import SentenceTransformerEmbeddings
  9. from langchain.text_splitter import CharacterTextSplitter
  10. from langchain.docstore.document import Document
  11. from pymilvus import MilvusClient
  12. # ===================== 1. 初始化嵌入模型 =====================
  13. # 加载本地/远程的all-MiniLM-L6-v2模型,用于文本转384维向量
  14. # 若模型已下载到本地,替换为你的本地路径:model_path="你的本地路径/all-MiniLM-L6-v2"
  15. embeddings = SentenceTransformerEmbeddings(
  16.     model_name="D:\\pythonProject2024\\pythonProject\\modelTest\\model\\all-MiniLM-L6-v2",  # 本地加载
  17.     model_kwargs={"device": "cpu"},  # 若有GPU可改为"cuda"
  18.     encode_kwargs={"normalize_embeddings": True}  # 向量归一化,提升检索精度
  19. )
  20. # ===================== 2. 准备测试文档并分片 =====================
  21. # 模拟知识库文本(实际场景可替换为PDF/文档解析后的内容)
  22. raw_texts = [
  23.     "LangChain是一个用于构建大模型应用的框架,支持与多种向量库集成",
  24.     "Milvus是一款开源的云原生向量数据库,专为海量向量检索设计",
  25.     "all-MiniLM-L6-v2是轻量级文本嵌入模型,输出384维向量",
  26.     "向量检索是RAG架构的核心步骤,用于从知识库中匹配相关文本",
  27.     "LangChain与Milvus结合可实现高效的语义检索和问答功能"
  28. ]
  29. # 将长文本分片(避免单条文本过长,提升检索精度)
  30. text_splitter = CharacterTextSplitter(chunk_size=100, chunk_overlap=10)
  31. docs = [Document(page_content=text) for text in raw_texts]
  32. split_docs = text_splitter.split_documents(docs)
  33. # ===================== 3. 连接Milvus并写入向量 =====================
  34. # 将分片后的文档向量化并写入Milvus
  35. db = Milvus.from_documents(
  36.     documents=split_docs,
  37.     embedding=embeddings,
  38.    # Milvus连接配置
  39.     collection_name="langchain_milvus_demo",
  40.     connection_args={
  41.                     "host": "192.168.211.128",  # Milvus服务地址
  42.                     "port": "19530",       # Milvus默认端口
  43.                     },
  44.     drop_old=True  # 测试时删除已存在的同名集合(生产环境慎用)
  45. )
  46. # ===================== 4. 语义检索(核心功能) =====================
  47. # 待检索的问题(模拟用户查询)
  48. query = "LangChain如何与Milvus结合使用?"
  49. # 从Milvus中检索最相关的3条文本
  50. retriever = db.as_retriever(search_kwargs={"k": 3})
  51. relevant_docs = retriever.get_relevant_documents(query)
  52. # 打印检索结果
  53. print("=== 检索到的相关文本 ===")
  54. for i, doc in enumerate(relevant_docs):
  55.     print(f"{i+1}. {doc.page_content}")
  56. # 进阶:直接调用similarity_search方法检索
  57. results = db.similarity_search(query=query, k=3)
  58. print('------------')
  59. print(results)
  60. # 查看自动创建的集合
  61. client = MilvusClient(
  62.     uri="http://192.168.211.128:19530",
  63.     token="root:Milvus"
  64. )
  65. #查看
  66. res = client.list_collections()
  67. print(res)
  68. print('--------')
  69. des_res = client.describe_collection(
  70.     collection_name="langchain_milvus_demo"
  71. )
  72. #描述
  73. 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的创建语句去创建集合。
 
 
更多学习资料尽在 老虎网盘资源
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册