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

使用Streamlit与LangChain开发聊天机器人时文件上传报错求助

问题分析与解决方案

你的错误核心有两个:一是可能缺少PyPDFLoader的依赖库,二是没有正确处理Streamlit上传的文件对象(直接传给了需要本地路径的PyPDFLoader)。

第一步:安装依赖库

PyPDFLoader依赖pypdf库,先确保已安装:

pip install pypdf langchain_community streamlit

第二步:修改代码处理上传文件

Streamlit的file_uploader返回的是UploadedFile对象(多文件时为列表),无法直接作为路径传入PyPDFLoader,需要先将文件保存到本地临时路径,再使用路径加载。修改后的完整代码如下:

import os
import tempfile
import streamlit as st
from langchain_community.document_loaders import PyPDFLoader

def load_pdf(file_path):
    """Load a PDF file and split it into pages."""
    pdf_loader = PyPDFLoader(file_path)
    pages = pdf_loader.load_and_split()
    return pages

with st.sidebar:
    st.title("Menú:")
    pdf_docs = st.file_uploader("Cargue los documentos", accept_multiple_files=True)
    
    if st.button("Submit and Process", key="process_button"):
        if not pdf_docs:
            st.error("Por favor cargue al menos un documento PDF")
        else:
            with st.spinner("Procesando..."):
                all_pages = []
                # 遍历处理每个上传的PDF
                for uploaded_file in pdf_docs:
                    # 创建临时文件保存上传内容
                    with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as tmp_file:
                        tmp_file.write(uploaded_file.getvalue())
                        tmp_path = tmp_file.name
                    
                    # 加载PDF页面
                    pages = load_pdf(tmp_path)
                    all_pages.extend(pages)
                    
                    # 清理临时文件(可选)
                    os.unlink(tmp_path)
                
                # 后续可使用all_pages做向量库存储等操作
                st.success(f"Procesado exitosamente! Se cargaron {len(all_pages)} páginas de {len(pdf_docs)} documentos.")

关键修复点

  • 用tempfile.NamedTemporaryFile将上传文件写入本地临时路径,获取合法的文件路径传给PyPDFLoader
  • 支持多文件上传,遍历每个文件并合并加载结果
  • 添加空文件校验,避免无文件时触发错误
  • 可选的临时文件清理步骤,避免占用服务器空间

内容的提问来源于stack exchange,提问作者Angel Panda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 14:46:06