今天又在Langchain / Streamlit 踩了什么坑

Langchain + Streamlit 乱七八糟踩的坑太多了,简单记录一些。。

1. Langchain 版本问题导致导包失败

ImportError: cannot import name 'create_history_aware_retriever' from 'langchain.chains'

langchain 版本:

langchain                                0.0.188
langchain-community                      0.2.7
langchain-core                           0.2.18
langchain-experimental                   0.0.62

python版本:3.11.9

昨天跑的通的代码今天出bug真的会疯,这次怪自己,conda里两个py311和py39都会用来跑llm写的程序。昨天用了py39。好好好。
langchain/python/langchain-experiment等等这些直接的依赖还蛮复杂的。。升级一个容易导致其他都不匹配了,所以:还是直接切环境。

github上的解决方法是安装0.1.7的langchain,

2. Streamlit 选择文件夹

自带的只有选择单个文件上传的功能,实际需要选择一个文件夹,上传所有文件。用到了tkinter

with st.sidebar:
    root = tk.Tk()
    root.withdraw()
    root.wm_attributes('-topmost', 1)
    st.write('Please select a folder:')
    browse_clicked = st.button('Browse Folder')

# 获取文件夹路径
if browse_clicked:
	dirname = str(filedialog.askdirectory(master=root))

3. Streamlit 刷新之后组件消失问题

简单来说就是st点击按钮之后,会重新更新页面,之前的值可能会被flush掉(我是在自定义了打开文件夹之后出现了这个问题)。所以一些state需要存在st.session_state里。

#先初始化
if 'clicked' not in st.session_state:
    st.session_state.clicked = False
    
if browse_clicked:
	# 点击按钮之后修改clicked的值
    st.session_state.clicked = True

同理,如果要保存什么数据,为了防止刷新之后丢失,也最好保存在st.session_state里。

  • 17
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值