2026/1/2 15:22:39
网站建设
项目流程
网站开发需要经过的几个主要阶段,开源it运维管理系统,国内建站公司,银川做网站哪家好Streamlit LangChain 1.0 简单实现智能问答前后端
概述
Streamlit 是一款专为数据科学家和机器学习工程师设计的 Python 库#xff0c;可快速将数据脚本转换为交互式 Web 应用#xff0c;无需前端开发经验#xff0c;所以最近研究了一下#xff0c;结合LangChain 1.0 实现…Streamlit LangChain 1.0 简单实现智能问答前后端概述Streamlit 是一款专为数据科学家和机器学习工程师设计的 Python 库可快速将数据脚本转换为交互式 Web 应用无需前端开发经验所以最近研究了一下结合LangChain 1.0 实现了简单的智能问答前后端应用大模型使用DeepSeek。依赖库streamlit用于构建Web交互界面langchain及相关组件处理LLM交互逻辑python-dotenv加载环境变量比如加载存储在配置文件中的API KEY。Highlight code1. 初始化配置# 加载环境变量load_dotenv()# 配置页面st.set_page_config(page_titleDeepSeek 问答应用,page_icon,layoutwide,initial_sidebar_stateexpanded)使用load_dotenv()加载.env文件中的环境变量st.set_page_config()配置页面基本属性包括标题、图标和布局2. 页面UI构建# 设置页面标题和说明st.title( DeepSeek 智能问答应用)st.markdown(使用 LangChain 1.0 和 Streamlit 构建的对话系统)通过st.title()和st.markdown()设置页面标题和说明文字3. 侧边栏配置withst.sidebar:st.header(配置选项)# API 密钥配置deepseek_api_keyst.text_input(DeepSeek API Key,valueos.getenv(DEEPSEEK_API_KEY,),typepassword,help请输入您的 DeepSeek API Key)# 清除对话历史按钮ifst.button(清除对话历史,typesecondary):st.session_state[messages][]st.rerun()使用st.sidebar创建侧边栏配置区域提供API密钥输入框密码类型默认从环境变量获取实现清除对话历史功能通过操作st.session_state实现4. 对话历史管理# 初始化对话历史ifmessagesnotinst.session_state:st.session_state[messages][]# 显示对话历史formessageinst.session_state[messages]:ifisinstance(message,HumanMessage):withst.chat_message(user):st.markdown(message.content)elifisinstance(message,AIMessage):withst.chat_message(assistant):st.markdown(message.content)使用st.session_state存储对话历史实现页面刷新后数据保留区分用户消息HumanMessage和助手消息AIMessage并分别显示5. 用户输入处理user_inputst.chat_input(请输入您的问题...)ifuser_input:# 验证API密钥ifnotdeepseek_api_key:st.error(请在侧边栏配置您的 DeepSeek API Key)st.stop()# 添加用户消息到会话历史st.session_state[messages].append(HumanMessage(contentuser_input))# 显示用户消息withst.chat_message(user):st.markdown(user_input)使用st.chat_input()获取用户输入进行API密钥验证确保调用模型前密钥已配置将用户消息添加到历史记录并显示6. AI响应生成# 显示助手思考中状态withst.chat_message(assistant):withst.spinner(正在思考...):chat_modelinit_chat_model(modeldeepseek:deepseek-chat)# 创建提示模板promptChatPromptTemplate.from_messages([(system,你是一个智能助手使用中文回答用户问题保持友好和专业。),*st.session_state[messages]])# 创建链chainprompt|chat_model|StrOutputParser()try:# 生成回答responsechain.invoke({})# 显示回答st.markdown(response)# 添加助手消息到会话历史st.session_state[messages].append(AIMessage(contentresponse))exceptExceptionase:st.error(f请求失败:{str(e)})st.error(请检查您的API密钥或网络连接)使用st.spinner()显示加载状态提升用户体验通过init_chat_model()初始化DeepSeek模型使用LangChain 1.0的链(Chain)语法prompt | chat_model | StrOutputParser()异常处理确保错误时能友好提示用户关键技术点Streamlit 会话状态利用st.session_state保存对话历史实现状态管理LangChain 1.0 链语法采用新的管道运算符|构建处理流程消息类型区分使用HumanMessage和AIMessage区分不同角色的消息API 密钥管理支持环境变量和手动输入两种方式配置API密钥错误处理完善的异常捕获和用户提示运行streamlit run LC_RAG_07a_Streamlit.pyrun后面替换成自己的文件名就可以启动运行。完整版本的代码可以在如下位置找到https://github.com/microsoftbi/Langchain_DEMO/blob/main/RAG/LC_RAG_07a_Streamlit.py后记相对Vuesteamlit的学习成本更低一些。适合独立的开发和学习。但是在生产中主流还是更推荐Vue等前端框架尤其在细节的前端定制化开发中。后续可以扩充下比如streamlit如何响应langchain的middleware等功能比如HITL。