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

如何让LangChain DirectoryLoader在Heroku部署环境中正常工作

Heroku部署下LangChain DirectoryLoader加载PDF返回空列表的解决方案

问题背景

在Heroku部署环境中,使用LangChain的DirectoryLoader加载指定目录下的PDF文件时,明明目录中存在目标PDF(如CAI2025_paper_6124.pdf),但loader.load()返回空列表,本地测试完全正常,已尝试列出目录内容、使用绝对路径等方法,问题仍未解决。

排查与解决步骤

1. 确保UnstructuredPDFLoader的系统依赖在Heroku上正确安装

UnstructuredPDFLoader依赖poppler系统库,Heroku默认未预装,需通过以下步骤添加:

  • 添加Heroku Apt buildpack:
    heroku buildpacks:add https://github.com/heroku/heroku-buildpack-apt.git
    
  • 在项目根目录创建Aptfile文件,写入:
    poppler-utils
    
  • 确保requirements.txt中包含Unstructured的PDF相关依赖:
    unstructured[pdf]>=0.10.0
    

2. 验证glob_pattern匹配规则

检查传入的glob_pattern是否准确匹配PDF文件:

  • 在代码中添加日志打印glob_pattern的值,确认是否为**/*.pdf(递归匹配所有PDF):
    print(f"glob_pattern: {glob_pattern}")
    
  • 若文件名存在大小写差异,调整glob为**/*.{pdf,PDF}来兼容大小写场景。

3. 禁用多线程加载

Heroku dyno资源有限,多线程加载可能引发异常,临时关闭多线程测试:

loader = DirectoryLoader(
    directory_path_str,
    glob=glob_pattern,
    use_multithreading=False,  # 改为禁用多线程
    show_progress=True,
    loader_cls=loader_cls,
)

4. 直接用单个PDFLoader测试

绕过DirectoryLoader,直接用指定的loader_cls加载单个文件,排查问题来源:

# 替换原DirectoryLoader代码为以下内容测试
single_file_path = os.path.join(directory_path_str, 'CAI2025_paper_6124.pdf')
loader = loader_cls(single_file_path)
docs = loader.load()
print(f"Single file docs: {docs}")

5. 检查文件完整性与权限

  • 打印上传文件的大小,对比本地文件确认是否完整:
    file_size = os.path.getsize(single_file_path)
    print(f"File size: {file_size} bytes")
    
  • 检查文件权限(Heroku临时目录一般无需额外权限,但可验证):
    import stat
    file_perms = stat.filemode(os.stat(single_file_path).st_mode)
    print(f"File permissions: {file_perms}")
    

6. 更换PDFLoader实现

若UnstructuredPDFLoader在Heroku环境存在兼容性问题,替换为其他PDFLoader,比如PyPDFLoader:

from langchain_community.document_loaders import PyPDFLoader
# 将loader_cls替换为PyPDFLoader
loader = DirectoryLoader(
    directory_path_str,
    glob=glob_pattern,
    loader_cls=PyPDFLoader,
)

内容的提问来源于stack exchange,提问作者Wonjae Oh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 22:49:57