如何用Langchain NodeJS从GCS将PDF内容读取至内存?
Node.js Langchain 从GCS读取PDF并转换为文本Document的最佳实现
步骤1:安装必要依赖
需要安装GCS SDK、PDF文本解析库和Langchain核心包:
npm install @google-cloud/storage pdf-parse langchain
步骤2:从GCS下载PDF到内存Buffer
使用Google Cloud Storage SDK直接将PDF文件下载为内存Buffer,无需写入本地文件:
const { Storage } = require('@google-cloud/storage'); // 初始化Storage实例,需提前配置GCS认证(环境变量或密钥文件) const storage = new Storage(); async function downloadGcsPdfToBuffer(bucketName, fileName) { const bucket = storage.bucket(bucketName); const file = bucket.file(fileName); const [buffer] = await file.download(); return buffer; }
步骤3:解析Buffer为纯文本
用pdf-parse库处理PDF Buffer,提取其中的文本内容:
const pdfParse = require('pdf-parse'); async function parsePdfBufferToText(buffer) { const parseResult = await pdfParse(buffer); return parseResult.text; }
步骤4:封装为Langchain Document格式
将提取的文本转换为Langchain标准的Document对象,方便后续的文本分割、嵌入等操作:
const { Document } = require('langchain/document'); async function createLangchainDocumentFromGcsPdf(bucketName, fileName) { const buffer = await downloadGcsPdfToBuffer(bucketName, fileName); const text = await parsePdfBufferToText(buffer); return new Document({ pageContent: text, metadata: { source: `gcs://${bucketName}/${fileName}`, // 可按需添加文件大小、修改时间等元数据 } }); }
批量处理存储桶内所有PDF
如果需要读取GCS桶内全部PDF文件,可扩展为批量处理逻辑:
async function loadAllPdfsFromGcsBucket(bucketName) { const bucket = storage.bucket(bucketName); const [files] = await bucket.getFiles(); // 筛选出PDF格式文件 const pdfFiles = files.filter(file => file.name.endsWith('.pdf')); const documents = []; for (const file of pdfFiles) { const doc = await createLangchainDocumentFromGcsPdf(bucketName, file.name); documents.push(doc); } return documents; }
关键注意事项
- GCS认证:确保已通过
GOOGLE_APPLICATION_CREDENTIALS环境变量或密钥文件路径完成认证配置 - 大文件处理:若PDF文件过大,内存解析压力较高,可改用
pdf-parse的流式输入结合GCS流式下载 - 扫描版PDF:
pdf-parse无法提取图片转PDF的文本,这类文件需配合OCR工具(如tesseract.js)处理
内容的提问来源于stack exchange,提问作者Makaku00
相关产品推荐
相关产品推荐

