langchain教程-5.DocumentLoader/多种文档加载器

前言

该系列教程的代码: https://github.com/shar-pen/Langchain-MiniTutorial

我主要参考 langchain 官方教程, 有选择性的记录了一下学习内容

这是教程清单

Document

用于存储一段文本及其相关元数据的类。

  • page_content (必需):以字符串形式存储一段文本。
  • metadata (可选):以字典形式存储与 page_content 相关的元数据。
from langchain_core.documents import Document

document = Document(page_content="Hello, welcome to LangChain Open Tutorial!")

document
Document(metadata={}, page_content='Hello, welcome to LangChain Open Tutorial!')

文档加载器(Document Loader)

文档加载器是一个用于从各种来源加载 Document 的类。

以下是一些常见的文档加载器示例:

  • PyPDFLoader :加载 PDF 文件
  • CSVLoader :加载 CSV 文件
  • UnstructuredHTMLLoader :加载 HTML 文件
  • JSONLoader :加载 JSON 文件
  • TextLoader :加载纯文本文件
  • DirectoryLoader :从目录中批量加载文档
from langchain_community.document_loaders import PyPDFLoader

# Set up the loader
FILE_PATH = "./data/01-document-loader-sample.pdf"
loader = PyPDFLoader(FILE_PATH)

load()

  • 加载文档,并以 list[Document] 的形式返回。
docs = loader.load()
print(len(docs))
print('-'*3)
docs[0:2]
48
---





[Document(metadata={'source': './data/01-document-loader-sample.pdf', 'page': 0}, page_content=' \n \n \nOctober 2016 \n \n \n \n \n \n \n \n \n \nTHE NATIONAL  \nARTIFICIAL INTELLIGENCE \nRESEARCH AND DEVELOPMENT \nSTRATEGIC PLAN  \nNational Science and Technology Council \n \nNetworking and Information Technology \nResearch and Development Subcommittee \n '),
 Document(metadata={'source': './data/01-document-loader-sample.pdf', 'page': 1}, page_content=' ii \n \n ')]

aload()

  • 异步加载文档,并以 list[Document] 的形式返回。
# Load Documents asynchronously
docs = await loader.aload()

lazy_load()

  • 顺序加载文档,并以 Iterator[Document] 的形式返回。
docs = loader.lazy_load()

for doc in docs:
    print(doc.metadata)
    break  # Used to limit the output length

alazy_load()

  • 异步顺序加载文档,并以 AsyncIterator[Document] 的形式返回。

可以观察到,这种方法作为一个 async_generator 工作。它是一种特殊类型的异步迭代器,能够按需生成值,而不需要一次性将所有值存储在内存中。

loader.alazy_load()
docs = loader.alazy_load()
async for doc in docs:
    print(doc.metadata)
    break  # Used to limit the output length

load_and_split()

  • 加载文档,并使用 TextSplitter 自动拆分为多个文本块,最终以 list[Document] 的形式返回。
from langchain_text_splitters import RecursiveCharacterTextSplitter

# Set up the TextSplitter
text_splitter = RecursiveCharacterTextSplitter(chunk_size=128, chunk_overlap=0)

# Split Documents into chunks
docs = loader.load_and_split(text_splitter=text_splitter)

<
### 关于LangChain-Rust的技术资料与项目示例 #### LangChain-Rust概述 LangChain-Rust是一个构建基于大型语言模型的应用程序的强大工具集,特别针对Rust编程语言设计。该框架不仅简化了开发者利用先进AI能力的过程,还通过提供一系列预置功能模块——比如文本处理、数据索引以及高效查询机制等特性,极大地促进了开发效率的提升[^1]。 #### 安装方法 对于希望快速开始使用LangChain-Rust的开发者而言,在确保已具备适当版本的Rust编译器之后,可以通过Cargo包管理器轻松获取最新发布的稳定版软件包。具体命令如下所示: ```rust cargo add langchain ``` 此操作会自动下载并安装所需依赖项至当前工作空间内[^3]。 #### 实际应用场景展示 考虑到实际应用需求,下面给出一段简单的代码片段作为入门级实例,展示了如何借助LangChain-Rust创建一个基本的知识问答系统原型。这段代码实现了加载文档文件夹中的所有`.txt`格式文本文件,并将其转换成适合进一步分析的形式;接着运用内置算法完成对这些内容的理解与编码表示;最后支持用户输入自然语言形式的问题并通过相似度匹配返回最接近的答案摘要。 ```rust use std::fs; use langchain::{DocumentLoader, TextSplitter, VectorStore}; fn main() { let loader = DocumentLoader::new("./data"); // 加载指定路径下的文档集合 let documents = loader.load(); // 获取到所有的文本记录 let splitter = TextSplitter::default(); let chunks = splitter.split_texts(&documents); // 对原始文本进行分片处理以便更好地被理解 let store = VectorStore::from(chunks); loop { // 进入交互模式等待提问 println!("请输入您的问题:"); let mut question = String::new(); io::stdin().read_line(&mut question).expect("Failed to read line"); match store.search(question.trim()) { // 执行语义搜索寻找最佳匹配的回答片段 Some(answer) => println!("找到的答案是:\n{}", answer), None => println!("未能找到确切答案"), } } } ``` 上述例子仅作为一个起点供初学者参考学习之用。随着技能的增长和技术积累加深,鼓励探索更多高级特性和优化策略来增强系统的性能表现和用户体验质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值