Blob 与 BlobParser 学习总结
1. BaseBlobParser
作用:演示如何自定义 BlobParser 来解析文档
核心功能:
- 创建自定义解析器
CustomParser,继承BaseBlobParser - 逐行读取文件并将每行转换为
Document对象 - 为每个文档添加元数据(来源文件、行号)
示例代码:
from typing import Iterator
from langchain_core.document_loaders import Blob
from langchain_core.document_loaders.base import BaseBlobParser
from langchain_core.documents import Document
class CustomParser(BaseBlobParser):
def lazy_parse(self, blob: Blob) -> Iterator[Document]:
line_number = 0
with blob.as_bytes_io() as f:
for line in f:
yield Document(
page_content=line,
metadata={"source": blob.source, "line_number": line_number}
)
line_number += 1
# 使用
blob = Blob.from_path("./test.txt")
parser = CustomParser()
documents = list(parser.lazy_parse(blob))
关键 API:
Blob.from_path()- 从文件路径创建 Blobblob.as_bytes_io()- 将 Blob 转为字节流lazy_parse()- 惰性解析,返回迭代器
2. FileSystemBlobLoader
作用:演示 FileSystemBlobLoader 批量加载文件系统中的文件
核心功能:
- 使用
FileSystemBlobLoader从指定目录加载所有文件 yield_blobs()方法生成 Blob 对象迭代器- 支持显示加载进度条
示例代码:
from langchain_community.document_loaders.blob_loaders import FileSystemBlobLoader
file_path = "./"
loader = FileSystemBlobLoader(file_path, show_progress=True)
for blob in loader.yield_blobs():
print(blob.as_string()) # 打印文件内容
关键 API:
FileSystemBlobLoader(path)- 创建文件系统加载器yield_blobs()- 生成 Blob 迭代器blob.as_string()- 将 Blob 转为字符串
3. GenericLoader
作用:演示 GenericLoader 结合文件系统加载器直接生成文档
核心功能:
GenericLoader.from_filesystem()一站式加载和解析- 支持 glob 模式过滤文件(如
*.txt只加载文本文件) lazy_load()惰性加载文档,节省内存
示例代码:
from langchain_community.document_loaders.generic import GenericLoader
file_path = "./"
loader = GenericLoader.from_filesystem(
file_path,
glob="*.txt", # 只加载 .txt 文件
show_progress=True
)
for idx, doc in enumerate(loader.lazy_load()):
print(f"文件名: {doc.metadata['source']}")
print(f"内容: {doc.page_content}")
关键参数:
glob- 文件匹配模式(如*.txt,**/*.md)show_progress- 显示进度条suffixes- 按文件后缀过滤
三者关系对比
| 文件 | 组件 | 层级 | 用途 |
|---|---|---|---|
| 1. Blob.py | Blob + 自定义 Parser | 底层 | 手动创建 Blob 并用自定义解析器处理 |
| 2 fileSystem.py | FileSystemBlobLoader | 中层 | 批量加载文件为 Blob |
| 3 genericLoader.py | GenericLoader | 高层 | 一站式完成加载+解析,直接输出 Document |
使用建议
- 简单场景:直接用
GenericLoader,一行代码搞定 - 需要自定义解析:用
FileSystemBlobLoader+ 自定义BaseBlobParser - 完全自定义:手动操作
Blob对象
核心概念
Blob(二进制大对象)
- 表示原始数据(文件、字节流等)
- 提供
as_string(),as_bytes(),as_bytes_io()等方法
BaseBlobParser
- 抽象基类,需实现
lazy_parse()方法 - 接收 Blob,返回
Iterator[Document]
FileSystemBlobLoader
- 从文件系统加载 Blob
- 支持递归、glob 模式、进度显示
GenericLoader
- 组合
BlobLoader+BlobParser - 提供便捷的
from_filesystem()静态方法