新版LangChain向量数据库VectorStore设计详解

article/2025/9/5 9:53:42

导读:在大型语言模型与知识库集成的实践中,向量数据库的选择和架构设计往往成为项目成败的关键因素。本文深入剖析了LangChain框架中VectorStore的核心设计理念,为开发者提供了系统性的技术指导和实践方案。
文章揭示了LangChain如何通过抽象类设计实现向量数据库的统一接口规范,使开发者能够在Milvus、Pinecone、Chroma等不同存储引擎间灵活切换,而无需修改上层业务逻辑。通过详细解析from_documents()与add_documents()方法的设计差异,文章阐明了批量初始化与增量更新的最佳实践策略。

简介

本文深入探讨新版LangChain中向量数据库VectorStore的设计理念和核心架构,为开发者提供全面的技术指导。

本文继上一篇文章进一步讲述:MMR搜索和LangChain整合Milvus实战

LangChain向量存储体系架构

RAG系统核心设计模式

LangChain采用了标准化的RAG(Retrieval-Augmented Generation)处理流程:

Document↓
Text Splitter↓
Embedding Model↓
VectorStore ↔ [Milvus | Chroma | Pinecone ...]

LangChain通过设计抽象类VectorStore来统一接口规范,具体的实现则由各个向量数据库厂商负责。这种设计模式确保了系统的可扩展性和互操作性。

环境配置

在使用向量存储功能前,需要安装相应的依赖包:

pip install langchain-milvus

核心导入语句:

from langchain_core.vectorstores import VectorStore

注意:官方文档链接 https://python.langchain.com/docs/integrations/vectorstores/ (如果过期请忽略)
在这里插入图片描述

VectorStore核心方法详解

通用方法概览

方法名作用描述常用参数示例
from_documents()从文档创建向量库documents, embedding, **kwargs
add_documents()追加文档到已有库documents
similarity_search()相似度查询query, k=4
similarity_search_with_score()带相似度得分的查询query, k=4
max_marginal_relevance_search()MMR最大边界搜索query, k=4
as_retriever()转换为检索器供链式调用search_kwargs={}

初始化方法详解

from_documents() 方法
@classmethod
def from_documents(cls,documents: List[Document],embedding: Embeddings,**kwargs
) -> VectorStore:"""文档自动转换存储:param documents: LangChain Document对象列表:param embedding: 文本向量化模型:param kwargs: 向量库特有参数:return: 初始化的VectorStore实例"""
参数详细说明
  • @classmethod:这是一个类方法,可以通过类名直接调用,无需先实例化类
  • cls:类方法的第一个参数,表示类本身
  • documents:类型为 List[Document],表示输入的文档列表,这些文档是LangChain中的Document对象
  • embedding:类型为 Embeddings,表示用于将文本转换为向量的模型
  • kwargs:关键字参数,用于传递向量库特有的参数
  • 返回值:返回一个初始化的VectorStore实例
实际应用示例
from langchain.document_loaders import UnstructuredFileLoader
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Chroma# 加载文档
loader = UnstructuredFileLoader("path/to/your/documents")
documents = loader.load()# 初始化向量存储
vectorstore = Chroma.from_documents(documents,OpenAIEmbeddings(),persist_directory="./my_chroma_db"
)

在这个示例中,我们首先使用UnstructuredFileLoader加载文档,然后使用Chroma.from_documents方法将这些文档转换为向量并存储在本地数据库中。

from_documents() 与 add_documents() 方法对比
特性from_documents()add_documents()
方法类型类方法(静态方法)实例方法
主要用途初始化集合并批量插入文档向已存在的集合追加文档
集合创建自动创建新集合要求集合已存在
性能消耗高(需建索引+数据迁移)低(仅数据插入)
典型场景首次数据入库增量数据更新
连接参数需要完整连接配置复用已有实例的配置

数据插入方法

def add_texts(self,texts: Iterable[str],metadatas: Optional[List[dict]] = None,**kwargs
) -> List[str]:"""插入文本数据到向量库:param texts: 文本内容列表:param metadatas: 对应的元数据列表:return: 插入文档的ID列表"""

相似性搜索方法

def similarity_search(self,query: str,k: int = 4,filter: Optional[dict] = None,**kwargs
) -> List[Document]:"""执行相似性搜索:param query: 查询文本:param k: 返回结果数量:param filter: 元数据过滤条件:return: 匹配的Document列表"""

最大边界相关算法(MMR)

def max_marginal_relevance_search(self,query: str,k: int = 4,fetch_k: int = 20,lambda_mult: float = 0.5
) -> List[Document]:"""多样性增强搜索:param query: 查询文本:param k: 最终返回数量:param fetch_k: 初始获取数量:param lambda_mult: 多样性权重 (0-1)"""

不同向量数据库特性对比

需要注意的是,不同向量数据库在功能支持方面存在差异:

特性MilvusFAISSPineconeChroma
分布式支持××
元数据过滤×
自动索引管理×
本地运行×
相似度算法8种4种3种2种

在这里插入图片描述

总结

LangChain的VectorStore设计通过统一的抽象层提供了灵活而强大的向量存储解决方案。开发者可以根据具体需求选择合适的向量数据库实现,同时享受统一的API接口带来的便利性。在实际应用中,建议根据项目的规模、性能要求和部署环境来选择最适合的向量数据库。


http://www.hkcw.cn/article/KDBnCFkiTG.shtml

相关文章

Transformer架构核心流程解析

Transformer的核心流程 Tokenizer→Embedding→Attention→FFN 1. 文本预处理与分词阶段(Tokenizer) 分词方式演进 基于单词的分词器:通过空格、标点符号拆分,但词汇表庞大且易出现未知词(UNK)基于字符…

【五模型时间序列预测对比】Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN

【五模型时间序列预测对比】Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN 目录 【五模型时间序列预测对比】Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Transformer-LSTM、Transformer、CNN-LSTM、LSTM、…

美国华盛顿州一公园发生枪击事件 7人受伤

美国华盛顿州一公园在5月28日晚间发生枪击事件,导致7人受伤,其中3人伤势严重。警方表示,目前尚不清楚有多少嫌疑人参与了这起事件,并且截至事发当日,还没有任何人被逮捕。责任编辑:zx0176

RabbitMQ项目实战

先参考文章:(必看) 06-MQ基础_mq服务-CSDN博客 07-MQ高级(幂等性)-CSDN博客 https://cloud.iocoder.cn/message-queue/rabbitmq/#_2-0-%E5%BC%95%E5%85%A5%E4%BE%9D%E8%B5%96%E4%B8%8E%E9%85%8D%E7%BD%AE 1、Rabbi…

自动化测试实例:Web登录功能性测试(无验证码)

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、什么是自动化测试 把人为驱动的测试行为转化为机器执行的一种过程称为自动化测试。(来自百度百科)本质上来说,自动化测试对比起手工测试除了需…

用 Python 模拟下雨效果

用 Python 模拟下雨效果 雨天别有一番浪漫情怀:淅淅沥沥的雨滴、湿润的空气、朦胧的光影……在屏幕上也能感受下雨的美妙。本文将带你用一份简单的 Python 脚本,手把手实现「下雨效果」动画。文章深入浅出,零基础也能快速上手,完…

[PyTest-案例]

接口对象封装 1.requests和pymysql实现ihrm登录接口缺点 : 代码冗余度高,耦合度高,维护成本大 核心思想 : 代码分层 按代码功能划分 : 接口对象层 : 负责发送http请求,访问待测接口,返回响应数据测试用例层 : 调用接口,按照响应数据,断言完成测试 封装tpshop商城 普通方式…

25 字符数组与字符串及多维数组详解:定义与初始化、访问与遍历、%s 格式符、内存剖析、编程实战

1 字符数组与字符串 1.1 字符数组 字符数组是 C 语言中用于存储一系列字符的基本数据结构。其定义方式与其他类型的数组类似,使用 char 类型来指定数组的元素类型。例如: char arr[10]; // 定义一个可存储 10 个字符的数组 此数组 arr 能够存储 10 个字…

IEEE旗下2区所有SCI汇总!

本期小编统计了【IEEE旗下】2区所有期刊的最新影响因子,分区、年发文量以及投稿经验,供大家参考! 1 IEEE Journal of Selected Topics in Applied Earth Observations and Remote Sensing 【影响因子】4.7 【期刊分区】JCR1区,中…

论文略读: STREAMLINING REDUNDANT LAYERS TO COMPRESS LARGE LANGUAGE MODELS

2025 ICLR 判断模型层的重要性->剪去不重要的层(用轻量网络代替) 这种方法只减少了层数量,所以可以用常用的方法加载模型 层剪枝阶段 通过输入与输出的余弦相似度来判断各个层的重要性 具有高余弦相似度的层倾向于聚集在一起&#xff0c…

Geoserver修行记--点击geoserver服务的WMTS能力(GetCapabilities)文档显示400 null

项目场景 在进行geoserver的项目部署过程中再次遇到的问题,这里再记录一下: 我在前端调用WMTS服务的时候,我需要查看图层的能力文档,点击下图出现如下所示的情况: 点击以后出现 400:null,如下…

Codeforces Round 1027 (Div. 3)(A-E)

题面链接&#xff1a;Dashboard - Codeforces Round 1027 (Div. 3) - Codeforces A. Square Year 思路 先看数字能否被开方&#xff0c;如果能输出0 即可 代码 #include<bits/stdc.h> using namespace std;#define vcoistnt ios_base::sync_with_stdio(false); ci…

在MDK中自动部署LVGL,在stm32f407ZGT6移植LVGL-8.3,运行demo,显示label

在MDK中自动部署LVGL&#xff0c;在stm32f407ZGT6移植LVGL-8.3 一、硬件平台二、实现功能三、移植步骤1、下载LVGL-8.42、MDK中安装LVGL-8.43、配置RTE4、配置头文件 lv_conf_cmsis.h5、配置lv_port_disp_template 四、添加心跳相关文件1、在STM32CubeMX中配置TIM7的参数2、使能…

数据结构数组总结

给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 示例 1&#xff1a; 输入&#xff1a;…

集成均衡功能电池保护芯片在大功率移动电源的应用,创芯微CM1341-DAT、杰华特JW3312、赛微微电CW1244、中颖SH366006

一文了解集成均衡功能电池保护IC在大功率移动电源的应用 创芯微CM1341-DAT 创芯微CM1341-DAT是一款专用于4串锂离子/磷酸铁锂电池的保护芯片&#xff0c;内置有高精度电压检测电路和电流检测电路。通过检测各节电池的电压、充放电电流及温度等信息&#xff0c;实现电池过充电…

2025年机电一体化与自动化系统国际会议(ICMAS 2025)

2025年机电一体化与自动化系统国际会议&#xff08;ICMAS 2025&#xff09; 2025 International Conference on Mechatronics and Automation Systems 一、大会信息 会议简称&#xff1a;ICMAS 2025 大会地点&#xff1a;中国南京 审稿通知&#xff1a;投稿后2-3日内通知 投稿…

Linux多线程(四)之Linux线程控制2【线程等待和线程终止】

文章目录 线程等待线程终止return退出线程pthread_exit退出线程pthread_cancel取消线程 线程等待 哪个线程先运行&#xff1f;由调度器说的算。 但是主线程一定要是最后退出&#xff01; 为什么需要线程等待&#xff1f; 已经退出的线程&#xff0c;其空间没有被释放&#…

Python自动化之selenium语句——浏览器设置显示尺寸、截图、刷新网页

目录 一、浏览器设置最大化、最小化 1.浏览器最大化 2.浏览器最小化 二、浏览器打开的位置、尺寸 1.浏览器打开位置 2.浏览器打开尺寸 三、浏览器截图 1.截图语句 2.运行成功后查看 四、刷新网页 上一节实现了打开浏览器、打开指定网址、关闭浏览器的操作&#xff0c…

Selenium的第三天打卡——Selenium应用(selenium元素选取以及浏览器操作)

Selenium 4 应用示例解析 目录 Selenium 4 应用示例解析 一、基本配置 二、浏览器设置&#xff08;这之前没有html基础的朋友可以先去了解一下html哦&#xff09; 三、元素定位方法 1.Selenium 4 元素的选中 ①开发者模式 ②观察代码 2.Selenium 4 元素抓取的核心内容…

智能仓储落地:机器人如何通过自动化减少仓库操作失误?

仓库作业的速度和准确性至关重要&#xff0c;尤其是在当前对无差错、高效作业的要求达到前所未有的环境下。每一个错误&#xff0c;无论是物品放错位置还是库存差异&#xff0c;都会在供应链中产生连锁反应&#xff0c;造成延误、增加成本&#xff0c;并最终影响客户满意度。 …