LangChain Agent v0.2.0简明教程 (中)

本文档介绍了LangChain库的检索功能,包括文档加载器、文本分割器、文本嵌入模型、向量存储、检索器和索引。LangChain支持多种数据源和格式,提供了与各种文本处理和嵌入模型的集成,用于检索增强生成(RAG)任务。
摘要由CSDN通过智能技术生成

4. Retrieval

许多LLM需要使用特定用户的外部数据,这些数据不属于模型训练集的一部分。实现这一目标的主要方法是通过检索增强生成(RAG)。在此过程中,将检索外部数据,然后在执行生成步骤时将其传递给 LLM 。这包含几个关键模块:

在这里插入图片描述

4.1 Document loaders

Document loaders加载来自许多不同来source的文档。LangChain 提供 100 多种不同的文档加载器,并与该领域的其他主要提供商(例如 AirByte 和 Unstructed)集成。LangChain 提供了从所有类型的位置(私有 S3 存储桶、公共网站)加载所有类型文档(HTML、PDF、代码)的集成。收录了海量的第三方Document loaders。例如,有用于加载简单.txt文件的,用于加载相对结构化的markdown文件的,用于加载任何网页文本内容,甚至用于加载解析YouTube视频的脚本。(旧版本在langchain.document_loaders,新版本在langchain_community.document_loaders

使用Document loaders可以将源中的数据加载为DocumentDocument由一段文本和相关的元数据组成

TextLoader可以将任意文本文件加载为纯文本字符串元数据metadata,其中元数据包含source路径信息metadata={'source': '/home/pgao/yue/test.py'}

from langchain_community.document_loaders import TextLoader
loader = TextLoader(file_path)
print(loader.load())
# Document(page_content="xxx", metadata="xx")

JSONLoader指定的jq 架构来解析 JSON 文件(JSON Lines是一种文件格式.jsonl,其中每一行都是有效的 JSON 对象)。jq_schema可以选择加载的字段,jq_schema=‘.’加载整个json文件加载.jsonl文件时需要设置json_lines=True

from langchain_community.document_loaders import JSONLoader
from pprint import pprint

loader = JSONLoader(
    file_path='/home/pgao/yue/StyleDiff-Agent/results/dance_long/sd_prompts.json',
    jq_schema='.content',
    text_content=False)
data = loader.load()
pprint(data)

loader = JSONLoader(
    file_path='./example_data/facebook_chat_messages.jsonl',
    jq_schema='.content',
    text_content=False,
    json_lines=True)
data = loader.load()
4.2 Text Splitter

当我们加载Document到内存后,我们通常还会希望将他们尽可能的结构化 / 分块,以进行更加灵活的操作

最简单的例子是,我们很多时候都需要将一个长文档拆分成更小的块,以便放入模型的上下文窗口中;LangChain有许多内置的Document transformers(大部分都是Text Spliter,旧版本在langchain.document_loaders中,新版本在langchain.text_splitter中),可以轻松地拆分、合并、筛选和以其他方式操作文档,一些常用的Document transformers如下:

在这里插入图片描述

对于一般文本,默认推荐使用RecursiveCharacterTextSplitter文本分割器。它由字符列表参数化。它尝试按顺序分割它们,直到块足够小。默认列表是 ["\n\n", "\n", " ", ""]. 这样做的效果是尝试将所有段落(然后是句子,然后是单词)尽可能长时间地放在一起,因为这些通常看起来是语义相关性最强的文本片段,得到的text是分割好的str的list

# This is a long document we can split up.
with open("/home/pgao/yue/loveu-tgve-2023/README.md") as f:
    state_of_the_union = f.read()
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(
    # Set a really small chunk size, just to show.
    chunk_size=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yuezero_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值