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

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

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.lqws.cn/news/98119.html

相关文章:

  • Linux或者Windows下PHP版本查看方法总结
  • 浅谈机械硬盘存储技术与磁盘格式化
  • ORA-12899: value too large for column LONG_TYPE (actual: 30, maximum: 20)
  • 谷歌地图高清卫星地图2026中文版下载|谷歌地图3D卫星高清版 V7.3.6.9796 最新免费版下载 - 前端工具导航
  • UniRig:如何在矩池云一站式解决 3D 模型绑定难题
  • Flink03-学习-套接字分词流自动写入工具
  • 剑指offer14_二进制中1的个数
  • 用HTML5 Canvas打造交互式心形粒子动画:从基础到优化实战
  • 链表题解——反转链表【LeetCode】
  • (三)动手学线性神经网络:从数学原理到代码实现
  • 机器学习——主成分分析PCA
  • 数据库密码加密
  • lanqiaoOJ 1508:N皇后问题 ← dfs
  • SpringBoot项目打包成war包
  • Kdump 介绍与使用方式
  • Samtec技术支持 | 新型评估和开发套件
  • Agno:使用简单代码构建AI智能体
  • 百万级临床试验数据库TrialPanorama发布!AI助力新药研发与临床评价迎来新基石
  • MySQL - Windows 中 MySQL 禁用开机自启,并在需要时手动启动
  • 编译 Linux openssl
  • Asp.net core 使用EntityFrame Work
  • 一、基础环境配置
  • Walle-Web:打造轻量级高效的DevOps自动化部署平台
  • 【数据库】《DBA实战手记》- 读书笔记
  • centos中的ulimit命令
  • Python数据分析及可视化中常用的6个库及函数(一)
  • 【JAVA版】意象CRM客户关系管理系统+uniapp全开源
  • python调用硅基流动的视觉语言模型
  • Python基于SVM技术的手写数字识别问题项目实战
  • Vue3 + Vite:我的 Qiankun 微前端主子应用实践指南