Streamlit中Langchain WebBaseLoader加载速度极慢问题求助
解决Streamlit中Langchain WebBaseLoader加载速度异常缓慢的问题
针对你遇到的问题,结合Streamlit的运行机制和Langchain组件的特性,以下是几个可能的原因及对应解决方案:
1. 页面配置顺序不符合Streamlit规范
你的代码中先执行了网页加载操作,再调用st.set_page_config(),这违反了Streamlit的核心要求——st.set_page_config()必须是第一个执行的Streamlit命令。这种顺序错误可能导致页面初始化流程异常,间接拖慢后续代码的执行速度。
修复代码顺序:
import streamlit as st from langchain_community.document_loaders import WebBaseLoader import time # 必须放在所有Streamlit操作最开头 st.set_page_config(page_title="Test loader.load() & Streamlit", page_icon="spider") loader = WebBaseLoader("https://joint-research-centre.ec.europa.eu/welcome-jec-website/reference-regulatory-framework/renewable-energy-recast-2030-red-ii_en") tic = time.perf_counter() data = loader.load() tac = time.perf_counter() st.title(f"Load time = {tac - tic:0.3f}.")
2. 网络请求配置缺失导致无限等待
WebBaseLoader默认使用requests库发起请求,在Streamlit环境中,可能因为继承了浏览器代理、超时设置缺失等原因,导致请求被挂起或走了错误的网络路由。而普通脚本和Chainlit环境的网络配置更符合预期,所以速度正常。
显式配置请求参数:
loader = WebBaseLoader( "https://joint-research-centre.ec.europa.eu/welcome-jec-website/reference-regulatory-framework/renewable-energy-recast-2030-red-ii_en", # 设置10秒超时,避免无限等待;关闭代理排除路由问题 requests_kwargs={"timeout": 10, "proxies": {"http": None, "https": None}} )
3. Streamlit重复执行脚本导致重复加载
Streamlit会在页面初始化、交互时重新执行整个脚本,如果每次都重新加载网页,不仅浪费资源,还可能因为重复请求被目标网站限速。而Chainlit的执行模型更偏向会话式,不会重复执行初始化代码。
使用缓存隔离加载操作:
用@st.cache_data装饰加载函数,让Streamlit缓存加载结果,避免重复执行:
import streamlit as st from langchain_community.document_loaders import WebBaseLoader import time st.set_page_config(page_title="Test loader.load() & Streamlit", page_icon="spider") @st.cache_data def load_webpage(url): loader = WebBaseLoader(url, requests_kwargs={"timeout": 10}) return loader.load() tic = time.perf_counter() data = load_webpage("https://joint-research-centre.ec.europa.eu/welcome-jec-website/reference-regulatory-framework/renewable-energy-recast-2030-red-ii_en") tac = time.perf_counter() st.title(f"Load time = {tac - tic:0.3f}.")
内容的提问来源于stack exchange,提问作者lei'ga
相关产品推荐
相关产品推荐

