已指定PDFJS.workerSrc仍报错,Langchain解析PDF分块求助
解决Langchain WebPDFLoader的"No PDFJS.workerSrc specified"错误
问题场景
尝试使用Langchain的RecursiveCharacterTextSplitter和WebPDFLoader解析上传的PDF并分割为文本块,代码如下:
import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter'; import { WebPDFLoader } from 'langchain/document_loaders/web/pdf'; import * as pdfjs from 'pdfjs-dist'; ///...code here handling file reading const handleLoadPDF = async () => { if (uploadedFile) { const blob = new Blob([uploadedFile], { type: 'application/pdf' }); const loader = new WebPDFLoader(blob, { pdfjs: () => import("pdfjs-dist/legacy/build/pdf.mjs"), workerSrc: `https://cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`, }); try { // Load the PDF document const pdfDocument = await loader.load(); const textSplitter = new RecursiveCharacterTextSplitter({ chunkSize: 1000, // Adjust the chunk size as needed chunkOverlap: 200, // Adjust the chunk overlap as needed }); // Split the document into text chunks const splitDocs = await textSplitter.splitDocuments(pdfDocument); console.log({ splitDocs }); } catch (error) { console.error('Error:', error); // Handle errors as needed } } };
运行后始终触发如下错误:
pdf-W4I3FICS.js?v=815f6208:48416 Uncaught (in promise) Error: No PDFJS.workerSrc specified at getWorkerSrc (pdf-W4I3FICS.js?v=815f6208:48416:23) at PDFWorker2.PDFWorker_initialize [as _initialize] (pdf-W4I3FICS.js?v=815f6208:48476:38) at new PDFWorker2 (pdf-W4I3FICS.js?v=815f6208:48454:22) at getDocument (pdf-W4I3FICS.js?v=815f6208:47858:72) at WebPDFLoader.load (langchain_document_loaders_web_pdf.js?v=815f6208:63:29) at async loadPDF (Input.jsx:88:18)
已尝试官方示例及相关问题中的代码,问题依旧。
解决方案
1. 全局配置pdfjs的workerSrc
WebPDFLoader的options中设置workerSrc可能无法被内部的pdfjs实例读取,改为全局设置:
import * as pdfjs from 'pdfjs-dist'; // 导入worker入口文件(可选,若使用本地worker) import 'pdfjs-dist/legacy/build/pdf.worker.entry'; // 全局设置workerSrc,确保pdfjs实例能获取到 pdfjs.GlobalWorkerOptions.workerSrc = `https://cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`;
然后修改WebPDFLoader初始化代码,移除options中的workerSrc参数:
const loader = new WebPDFLoader(blob, { pdfjs: () => import("pdfjs-dist/legacy/build/pdf.mjs"), });
2. 使用本地worker文件
若CDN加载不稳定,可将pdf.worker.js下载到项目静态资源目录,指定本地路径:
pdfjs.GlobalWorkerOptions.workerSrc = '/static/pdf.worker.js';
3. 确保版本完全匹配
检查package.json中pdfjs-dist的版本号,确保CDN链接的worker文件版本与本地依赖版本完全一致,避免版本不兼容导致的配置失效。
内容的提问来源于stack exchange,提问作者Artario
相关产品推荐
相关产品推荐

