You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在LangChain加载器中传入文档二进制数据替代文件路径?

LangChain加载文档二进制数据方案

1. PDF文档:替代PyPDFLoader用二进制加载

PyPDFLoader本身仅支持传入文件路径,无法直接接收二进制数据,但可以通过底层PDF处理库读取二进制内容,手动构建LangChain的Document对象:

from langchain.docstore.document import Document
from PyPDF2 import PdfReader
import io

# 假设pdf_bytes是你的PDF二进制数据(可从网络请求、内存对象等获取)
pdf_bytes = b"..."

# 将二进制数据转为类文件对象
pdf_file = io.BytesIO(pdf_bytes)
reader = PdfReader(pdf_file)

# 提取每页内容并生成Document列表
docs = []
for page_num, page in enumerate(reader.pages):
    text = page.extract_text()
    docs.append(
        Document(
            page_content=text,
            metadata={"page": page_num + 1, "source": "binary_pdf"}
        )
    )

# 如需拆分文本,使用RecursiveCharacterTextSplitter
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
split_docs = splitter.split_documents(docs)

2. JSON文档:读取二进制数据并处理

JSON二进制数据本质是UTF-8编码的字节流,先解码为字符串再解析,按需转为Document:

import json
from langchain.docstore.document import Document

# 假设json_bytes是JSON文件的二进制数据
json_bytes = b'{"key1": "value1", "key2": "value2"}'

# 解码并解析JSON内容
json_str = json_bytes.decode("utf-8")
json_data = json.loads(json_str)

# 格式化内容并生成Document
doc_content = json.dumps(json_data, indent=2)
doc = Document(page_content=doc_content, metadata={"source": "binary_json"})

# 若为JSON数组,可循环生成多个Document
# docs = [Document(page_content=json.dumps(item), metadata={"index": i}) for i, item in enumerate(json_data)]

3. Excel文档:读取二进制流

可通过pandas或openpyxl读取二进制流,提取内容后转为Document:

方法1:用pandas快速处理

import pandas as pd
from langchain.docstore.document import Document
import io

# 假设excel_bytes是Excel文件的二进制数据
excel_bytes = b"..."

# 读取二进制流为DataFrame并转为CSV格式文本
df = pd.read_excel(io.BytesIO(excel_bytes))
doc_content = df.to_csv(index=False)
doc = Document(page_content=doc_content, metadata={"source": "binary_excel", "sheet_name": df.index.name})

方法2:用openpyxl逐页读取

from openpyxl import load_workbook
from langchain.docstore.document import Document
import io

excel_bytes = b"..."
wb = load_workbook(filename=io.BytesIO(excel_bytes), read_only=True)

docs = []
for sheet_name in wb.sheetnames:
    sheet = wb[sheet_name]
    # 提取表格内容为文本(每行单元格用逗号分隔)
    content = "\n".join([",".join([str(cell.value) for cell in row]) for row in sheet.iter_rows(values_only=True)])
    docs.append(
        Document(
            page_content=content,
            metadata={"source": "binary_excel", "sheet": sheet_name}
        )
    )

内容的提问来源于stack exchange,提问作者Sagar tate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 20:23:30