当前位置: 首页 > article >正文

LangChain整合Milvus向量数据库实战:数据新增与删除操作

导读:在AI应用开发中,向量数据库已成为处理大规模语义搜索和相似性匹配的核心组件。本文通过详实的代码示例,深入探讨LangChain框架与Milvus向量数据库的集成实践,为开发者提供生产级别的向量数据管理解决方案。

文章聚焦于向量数据库操作的两个关键环节:数据的高效新增和精准删除。通过DashScope嵌入模型的配置与应用,读者将了解如何建立稳定的向量化pipeline,实现从文本内容到向量存储的完整流程。特别值得关注的是,文章详细解析了批量文档插入的ID管理机制,以及基于ID的删除操作如何在分布式环境中保证数据一致性。

概述

本文将详细介绍如何使用LangChain框架整合Milvus向量数据库,重点演示向量数据的新增和删除操作的完整实现过程。通过实际案例,您将掌握在生产环境中管理向量数据库的核心技能。

本文继上一篇文章进一步讲述:新版LangChain向量数据库VectorStore设计详解-CSDN博客

技术需求与目标

本次实战的主要目标包括:

  • 建立LangChain与Milvus向量数据库的集成连接
  • 实现向量数据的批量插入操作
  • 掌握基于ID的数据删除机制
  • 理解向量数据库操作的最佳实践

环境配置与依赖安装

官方文档参考

LangChain官方文档地址:Milvus | 🦜️🔗 LangChain

依赖包安装

pip install langchain_milvus

核心实现代码

导入必要的库文件

from langchain_community.embeddings import DashScopeEmbeddings
# 注意:旧版本使用 from langchain.vectorstores import Milvus
from langchain_milvus import Milvus  # 推荐使用新版本导入方式
from langchain_core.documents import Document

初始化嵌入模型和向量存储

# 配置DashScope嵌入模型
embeddings = DashScopeEmbeddings(model="text-embedding-v2",  # 使用第二代通用文本嵌入模型max_retries=3,dashscope_api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"  # 请替换为您的实际API密钥
)# 初始化Milvus向量存储
vector_store = Milvus(embeddings,connection_args={"uri": "http://192.168.19.152:19530"},  # Milvus服务器连接地址collection_name="langchain_example",  # 集合名称
)

准备测试数据集

# 创建多样化的文档样本数据
document_1 = Document(page_content="I had chocolate chip pancakes and scrambled eggs for breakfast this morning.",metadata={"source": "tweet"},
)document_2 = Document(page_content="The weather forecast for tomorrow is cloudy and overcast, with a high of 62 degrees.",metadata={"source": "news"},
)document_3 = Document(page_content="Building an exciting new project with LangChain - come check it out!",metadata={"source": "tweet"},
)document_4 = Document(page_content="Robbers broke into the city bank and stole $1 million in cash.",metadata={"source": "news"},
)document_5 = Document(page_content="Wow! That was an amazing movie. I can't wait to see it again.",metadata={"source": "tweet"},
)document_6 = Document(page_content="Is the new iPhone worth the price? Read this review to find out.",metadata={"source": "website"},
)document_7 = Document(page_content="The top 10 soccer players in the world right now.",metadata={"source": "website"},
)document_8 = Document(page_content="LangGraph is the best framework for building stateful, agentic applications!",metadata={"source": "tweet"},
)document_9 = Document(page_content="The stock market is down 500 points today due to fears of a recession.",metadata={"source": "news"},
)document_10 = Document(page_content="I have a bad feeling I am going to get deleted :(",metadata={"source": "tweet"},
)# 将所有文档组织为列表
documents = [document_1, document_2, document_3, document_4, document_5,document_6, document_7, document_8, document_9, document_10,
]

数据插入操作

# 为每个文档生成唯一的ID标识符
ids = [str(i+1) for i in range(len(documents))]
print("生成的文档ID列表:", ids)# 执行批量文档插入操作
result = vector_store.add_documents(documents=documents, ids=ids)
print("插入操作结果:", result)

数据删除操作

# 根据指定ID删除文档
result = vector_store.delete(ids=["1"])
print("删除操作结果:", result)# 删除操作返回的统计信息解释:
# insert count: 插入数量
# delete count: 删除数量  
# upsert count: 更新插入数量
# timestamp: 操作时间戳
# success count: 成功数量
# err count: 错误数量

操作结果分析

删除操作执行后,系统返回详细的统计信息,格式示例如下:

(insert count: 0, delete count: 1, upsert count: 0, timestamp: 456798840753225732, success count: 0, err count: 0)

该结果表明成功删除了一条记录,操作过程中未出现错误。

http://www.lryc.cn/news/2392909.html

相关文章:

  • LSTM+Transformer混合模型架构文档
  • Symbol、Set 与 Map:新数据结构探秘
  • Spring Boot+Activiti7入坑指南初阶版
  • 如何在 Odoo 18 中创建 PDF 报告
  • 【ROS2实体机械臂驱动】rokae xCoreSDK Python测试使用
  • c/c++的opencv椒盐噪声
  • C++ TCP程序增加TLS加密认证
  • 构建一个“论文检索 + 推理”知识库服务,支持用户上传 PDF/LATEX 源码后,秒级检索并获得基于内容的问答、摘要、引用等功能
  • VLC-QT 网页播放RTSP
  • for(auto a:b)和for(auto a:b)的区别
  • 第2章-12 输出三角形面积和周长(走弯路解法)
  • Caddy如何在测试环境中使用IP地址配置HTTPS服务
  • shell中与>和<相关的数据流重定向操作符整理
  • 【航天远景 MapMatrix 精品教程】08 Pix4d空三成果导入MapMatrix
  • 创建型设计模式之Prototype(原型)
  • JNI开发流程
  • STM32G4 电机外设篇(二) VOFA + ADC + OPAMP
  • RAG应用:交叉编码器(cross-encoder)和重排序(rerank)
  • 微服务难题?Nacos服务发现来救场
  • C# 结合PaddleOCRSharp搭建Http网络服务
  • 【连接器专题】SD卡座规格书审查需要审哪些方面?
  • JS手写代码篇---手写节流函数
  • UE5 C++动态调用函数方法、按键输入绑定 ,地址前加修饰符
  • eBest智能价格引擎系统 助力屈臣氏饮料落地「价格大脑」+「智慧通路」数字基建​
  • ubuntu mysql 8.0.42 基于二进制日志文件位置和GTID主从复制配置
  • Kettle 远程mysql 表导入到 hadoop hive
  • 完整解析 Linux Kdump Crash Kernel 工作原理和实操步骤
  • 菜鸟之路Day36一一Web开发综合案例(部门管理)
  • LangChain实战:MMR和相似性搜索技术应用
  • 第 1 章:学习起步