LangChain实战:文档加载、分割与向量存储详解

article/2025/6/6 4:00:30

LangChain实战:文档加载、分割与向量存储详解

在本文中,我将详细解析如何使用LangChain框架完成文档的加载、文本分割和向量存储的全过程。这是构建基于文档的问答系统、搜索引擎等AI应用的基础步骤。

1. 环境准备与数据加载

首先,我们需要导入必要的库并加载文档数据:

import os
import re
from dotenv import load_dotenv
from langchain_community.document_loaders import TextLoader, DirectoryLoader# 1.加载数据
loader = TextLoader("Q&A.txt", encoding="utf-8")
documents = loader.load()

在上面的代码中:

  • 我们导入了必要的库,包括osredotenv工具包以及LangChain的文档加载器
  • 使用TextLoader加载单个文本文件,并指定编码为"utf-8"
  • 调用load()方法读取文件内容到documents变量

批量加载文件(可选)

如果需要处理多个文档,可以使用DirectoryLoader

"""批量加载数据文件
directLoader = DirectoryLoader("day3", glob="**/*.txt", loader_cls=TextLoader, show_progress=True)
documentss = directLoader.load()
"""

这段代码(已被注释)展示了如何:

  • 加载指定目录中的所有txt文件
  • glob="**/*.txt"指定匹配所有嵌套子目录中的txt文件
  • show_progress=True参数允许显示加载进度

2. 文本分割

文档加载后,通常需要将其分割成更小的块以便于处理:

from langchain_text_splitters import CharacterTextSplitter# 自带的文本分割器(有可能分的不彻底)
text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=0, separator="\n\n", keep_separator=True)

这段代码中:

  • 我们使用CharacterTextSplitter创建了一个文本分割器
  • chunk_size=500设置每个分块的最大字符数为500
  • chunk_overlap=0设置分块间不重叠
  • separator="\n\n"指定使用两个换行符作为分隔符
  • keep_separator=True表示在分割后保留分隔符

自定义分割方法

我们还展示了两种手动分割文本的方法:

# 手写分割方法
text = re.split(r'\n\n', documents[0].page_content)  # 使用正则表达式分割文本
# segments = text_splitter.split_text(documents[0].page_content)  # 使用自定义的文本分割器
segments_documents = text_splitter.create_documents(text)
print(len(segments_documents))  # 打印分割后的段落数量

这里:

  1. 使用正则表达式re.split()根据空行分割原始文档
  2. 使用分割器的create_documents()方法将文本列表转换为Document对象列表
  3. 打印分割后的段落数量,便于我们了解分割效果

3. 向量存储

最后,我们需要将分割后的文本转换为向量并存储,以便后续检索:

from langchain_community.embeddings import DashScopeEmbeddings
from langchain_redis import RedisConfig, RedisVectorStoreload_dotenv()
# 阿里云百炼平台的向量模型
embedding = DashScopeEmbeddings(model="text-embedding-v3", dashscope_api_key=os.getenv("ALY_EMBADING_KEY"))
redis_url = "redis://localhost:6379"  # Redis数据库的连接地址config = RedisConfig(index_name="my_index2",  # 索引名称redis_url=redis_url,  # Redis数据库的连接地址
)# 创建向量存储实例
vector_store = RedisVectorStore(embedding, config=config)
# 添加文本到向量存储
vector_store.add_documents(segments_documents)

在这部分代码中:

  1. 使用load_dotenv()加载环境变量,通常用于存储API密钥
  2. 创建阿里云百炼平台的文本嵌入模型实例
  3. 设置Redis连接配置,包括索引名称和数据库地址
  4. 初始化RedisVectorStore作为向量存储
  5. 使用add_documents()方法将分割后的文档添加到向量存储中

总结

通过上述步骤,我们完成了:

  • 文档加载:读取本地文本文件
  • 文本分割:将大文档分割为合适大小的片段
  • 向量化存储:使用嵌入模型将文本转化为向量并存储在Redis数据库

这个流程为后续的文本检索、相似度查询和基于文档的问答系统提供了基础。使用Vector Store可以实现高效的语义搜索,相比传统关键词搜索能够更好地理解查询意图和文档内容。

需要注意的是,代码中使用了阿里云百炼平台的嵌入模型,在实际使用时需要确保相应的API密钥配置正确。同时,Redis数据库也需要预先安装并启动。

这种向量存储方法的特点是可以快速检索与查询文本语义相似的文档片段,非常适合构建智能客服、知识库问答等应用场景。


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

相关文章

Spring @Autowired自动装配的实现机制

Spring Autowired自动装配的实现机制 Autowired 注解实现原理详解一、Autowired 注解定义二、Qualifier 注解辅助指定 Bean 名称三、BeanFactory:按类型获取 Bean四、注入逻辑实现五、小结 源码见:mini-spring Autowired 注解实现原理详解 Autowired 的…

【AI News | 20250603】每日AI进展

AI Repos 1、dgm 是一个创新的自改进系统,通过迭代修改自身代码并利用编码基准验证每次更改,实现开放式进化。该系统旨在提升 AI 代理的代码修改能力。DGM 支持 OpenAI 和 Anthropic API,依赖 Docker 环境,并集成了 SWE-bench 和…

Rust 学习笔记:Cargo 工作区

Rust 学习笔记:Cargo 工作区 Rust 学习笔记:Cargo 工作区创建工作区在工作区中创建第二个包依赖于工作区中的外部包向工作区添加测试将工作区中的 crate 发布到 crates.io添加 add_two crate 到工作区总结 Rust 学习笔记:Cargo 工作区 随着项…

操作系统 第 39 章 插叙:文件和目录

两项关键操作系统技术的发展:进程,虚拟化的 CPU;地址空间,虚拟化的内存。 这一部分加上虚拟化拼图中最关键的一块:持久存储。永久存储设备永久地(或至少长时间地)存储信息,如传统硬盘…

楼宇自控系统联动暖通空调:解密建筑环境舒适度提升路径

走进现代建筑,无论是办公场所、商业中心,还是医院、酒店,人们对环境舒适度的要求越来越高。暖通空调作为调节建筑室内环境的关键设备,其运行效果直接影响着人们的体验。然而,传统暖通空调独立运行、调控不灵活等问题&a…

Freemarker快速入门

Freemarker概述 FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库&#xff0c…

黑盒(功能)测试基本方法

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、黑盒测试的概念 1、什么是黑盒测试 (1)黑盒测试又称功能测试、数据驱动测试或基于规格说明书的测试,是一种从用户观点出…

[java八股文][JavaSpring面试篇]SpringCloud

了解SpringCloud吗,说一下他和SpringBoot的区别 Spring Boot是用于构建单个Spring应用的框架,而Spring Cloud则是用于构建分布式系统中的微服务架构的工具,Spring Cloud提供了服务注册与发现、负载均衡、断路器、网关等功能。 两者可以结合…

chromedriver 下载失败

问题描述 chromedriver 2.46.0 下载失败 淘宝https://registry.npmmirror.com/chromedriver/2.46/chromedriver_win32.zip无法下载 解决方法 找到可下载源 https://cdn.npmmirror.com/binaries/chromedriver/2.46/chromedriver_win32.zip ,先将其下载到本地目录(D…

74. 搜索二维矩阵 (力扣)

给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。…

CppCon 2014 学习:Rolling Your Own Circuit Simulator

这段话讲述了一个背景和动机,目的是阐明为什么开源C库变得越来越复杂且在科学和工程领域有很大的应用潜力。 关键点: 开源库的成熟: 近年来,开源C库在许多科学和工程领域变得越来越成熟和强大。这些库不再仅仅是简单的工具&…

无人机自主降落论文解析

Dynamic Landing of an Autonomous Quadrotor on a Moving Platform in Turbulent Wind Conditions 滑膜控制器 这一部分详细介绍了边界层滑模控制器(Boundary Layer Sliding Controller,BLSC)的设计和实现,特别是如何将其应用于…

.NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想

在当今数据驱动的时代,向量数据库(Vector Database)作为一种新兴的数据库技术,正逐渐成为软件开发领域的重要组成部分。特别是在 .NET 生态系统中,向量数据库的应用为开发者提供了构建智能、高效应用程序的新途径。 一…

html基础01:前端基础知识学习

html基础01&#xff1a;前端基础知识学习 1.个人建立打造 -- 之前知识的小总结1.1个人简历展示1.2简历信息填写页面 1.个人建立打造 – 之前知识的小总结 1.1个人简历展示 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8&qu…

CentOS Stream 8 Unit network.service not found

一、问题现象 在 CentOS Stream 8 操作系统中&#xff0c;配置完静态IP 信息&#xff0c;想重启网络服务。 执行如下命令&#xff1a; systemctl restart network 提示信息如下&#xff1a; Failed to restart network.service: Unit network.service not found. 二、问题…

【Axure高保真原型】交通事故大屏可视化分析案例

今天和大家分享交通事故大屏可视化分析案例的原型模板&#xff0c;包括饼图分类分析、动态显示发生数、柱状图趋势分析、中部地图展示最新事故发现地点和其他信息、右侧列表记录发生事故的信息…… 通过多种可视化图表展示分析结果&#xff0c;具体效果可以点击下方视频观看或…

网络安全-等级保护(等保) 3-3-1 GB/T 36627-2018 附录A (资料性附录) 测评后活动、附 录 B (资料性附录)渗透测试的有关概念说明

################################################################################ GB/T 36627-2018 《信息安全技术 网络安全等级保护测试评估技术指南》对网络安全等级保护测评中的相关测评技术进行明确的分类和定义,系统地归纳并阐述测评的技术方法,概述技术性安全测试和…

wsl===windows下安装Linux系统

新近版本的windows都支持了Linux&#xff0c;操作如下&#xff1a; 控制面板中启用对应的功能 2. 打开powershell&#xff0c;以安装Ubuntu为例&#xff0c;然后执行 PS C:\Users\steven.wang> wsl.exe --update 正在安装: 适用于 Linux 的 Windows 子系统 已安装 适用于 …

云上展厅颠覆传统展览

云上展厅&#xff1a;重塑展览行业的新篇章 随着数字化技术的迅猛发展&#xff0c;传统展览模式正经历一场深刻的变革。云上展厅&#xff0c;新兴的展览形式&#xff0c;正逐步颠覆传统的实体展览模式&#xff0c;凭借其跨越时空限制、多样化展示方式、丰富互动体验及高效商业…

谷歌地图苹果版v6.138.2 - 前端工具导航

谷歌地图(Google maps)苹果版是是由谷歌官方推出的一款手机地图应用。软件功能强大&#xff0c;支持本地搜索查找世界各地的地址、地点和商家&#xff1b;支持在街景视图中查看世界各地的360度全景图&#xff1b;支持查找乘坐火车、公交车和地铁的路线&#xff0c;或者查找步行…