langchain-Blob 与 BlobParser 学习总结

14 阅读2分钟

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() - 从文件路径创建 Blob
  • blob.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.pyBlob + 自定义 Parser底层手动创建 Blob 并用自定义解析器处理
2 fileSystem.pyFileSystemBlobLoader中层批量加载文件为 Blob
3 genericLoader.pyGenericLoader高层一站式完成加载+解析,直接输出 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() 静态方法