news 2026/4/3 6:28:19

Streamlit + LangChain 1.0 简单实现智能问答前后端

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Streamlit + LangChain 1.0 简单实现智能问答前后端

Streamlit + LangChain 1.0 简单实现智能问答前后端

概述

Streamlit 是一款专为数据科学家和机器学习工程师设计的 Python 库,可快速将数据脚本转换为交互式 Web 应用,无需前端开发经验,所以最近研究了一下,结合LangChain 1.0 实现了简单的智能问答前后端应用,大模型使用DeepSeek。

依赖库

  • streamlit:用于构建Web交互界面
  • langchain及相关组件:处理LLM交互逻辑
  • python-dotenv:加载环境变量,比如加载存储在配置文件中的API KEY。

Highlight code

1. 初始化配置

# 加载环境变量load_dotenv()# 配置页面st.set_page_config(page_title="DeepSeek 问答应用",page_icon="🤖",layout="wide",initial_sidebar_state="expanded")
  • 使用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_key=st.text_input("DeepSeek API Key",value=os.getenv("DEEPSEEK_API_KEY",""),type="password",help="请输入您的 DeepSeek API Key")# 清除对话历史按钮ifst.button("清除对话历史",type="secondary"):st.session_state["messages"]=[]st.rerun()
  • 使用st.sidebar创建侧边栏配置区域
  • 提供API密钥输入框(密码类型),默认从环境变量获取
  • 实现清除对话历史功能,通过操作st.session_state实现

4. 对话历史管理

# 初始化对话历史if"messages"notinst.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_input=st.chat_input("请输入您的问题...")ifuser_input:# 验证API密钥ifnotdeepseek_api_key:st.error("请在侧边栏配置您的 DeepSeek API Key")st.stop()# 添加用户消息到会话历史st.session_state["messages"].append(HumanMessage(content=user_input))# 显示用户消息withst.chat_message("user"):st.markdown(user_input)
  • 使用st.chat_input()获取用户输入
  • 进行API密钥验证,确保调用模型前密钥已配置
  • 将用户消息添加到历史记录并显示

6. AI响应生成

# 显示助手思考中状态withst.chat_message("assistant"):withst.spinner("正在思考..."):chat_model=init_chat_model(model="deepseek:deepseek-chat")# 创建提示模板prompt=ChatPromptTemplate.from_messages([("system","你是一个智能助手,使用中文回答用户问题,保持友好和专业。"),*st.session_state["messages"]])# 创建链chain=prompt|chat_model|StrOutputParser()try:# 生成回答response=chain.invoke({})# 显示回答st.markdown(response)# 添加助手消息到会话历史st.session_state["messages"].append(AIMessage(content=response))exceptExceptionase:st.error(f"请求失败:{str(e)}")st.error("请检查您的API密钥或网络连接")
  • 使用st.spinner()显示加载状态,提升用户体验
  • 通过init_chat_model()初始化DeepSeek模型
  • 使用LangChain 1.0的链(Chain)语法:prompt | chat_model | StrOutputParser()
  • 异常处理确保错误时能友好提示用户

关键技术点

  1. Streamlit 会话状态:利用st.session_state保存对话历史,实现状态管理
  2. LangChain 1.0 链语法:采用新的管道运算符|构建处理流程
  3. 消息类型区分:使用HumanMessageAIMessage区分不同角色的消息
  4. API 密钥管理:支持环境变量和手动输入两种方式配置API密钥
  5. 错误处理:完善的异常捕获和用户提示

运行

streamlit run LC_RAG_07a_Streamlit.py

run后面替换成自己的文件名就可以启动运行。
完整版本的代码可以在如下位置找到:
https://github.com/microsoftbi/Langchain_DEMO/blob/main/RAG/LC_RAG_07a_Streamlit.py

后记

相对Vue,steamlit的学习成本更低一些。适合独立的开发和学习。但是在生产中主流还是更推荐Vue等前端框架,尤其在细节的前端定制化开发中。
后续可以扩充下比如streamlit如何响应langchain的middleware等功能,比如HITL。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/1 20:26:47

c++经典练习题-分支练习(1)

1633. 判断3的倍数问题描述判断一个数是不是 3 的倍数&#xff0c;如果是打印 yes &#xff0c;否则打印 no。输入一行&#xff0c;一个整数。输出一行&#xff0c;yes 或者 no 。输入3输出yes#include<iostream> #include<iomanip> #include<string.h> usin…

作者头像 李华
网站建设 2026/3/30 15:43:17

Cortex:终极Clojure机器学习框架完整指南

Cortex&#xff1a;终极Clojure机器学习框架完整指南 【免费下载链接】cortex Machine learning in Clojure 项目地址: https://gitcode.com/gh_mirrors/corte/cortex 在当今数据驱动的世界中&#xff0c;机器学习已成为技术创新的核心驱动力。Cortex作为一款基于Clojur…

作者头像 李华
网站建设 2026/3/18 23:51:19

EmotiVoice获得ISO信息安全管理体系认证

EmotiVoice获得ISO信息安全管理体系认证 在AI语音技术加速落地的今天&#xff0c;用户对语音合成系统的要求早已不再满足于“能说”&#xff0c;而是追求“会听、会感、会表达”。尤其是在金融、医疗、教育等高敏感领域&#xff0c;一个理想的TTS引擎不仅要声音自然、情感丰富&…

作者头像 李华
网站建设 2026/3/21 21:58:55

鸿蒙远程真机工具HOScrcpy:60fps流畅投屏开发指南

鸿蒙远程真机工具HOScrcpy&#xff1a;60fps流畅投屏开发指南 【免费下载链接】鸿蒙远程真机工具 该工具主要提供鸿蒙系统下基于视频流的投屏功能&#xff0c;帧率基本持平真机帧率&#xff0c;达到远程真机的效果。 项目地址: https://gitcode.com/OpenHarmonyToolkitsPlaza…

作者头像 李华
网站建设 2026/4/3 6:07:51

YOLOv9模型评估终极指南:新手也能快速掌握的完整流程

YOLOv9模型评估终极指南&#xff1a;新手也能快速掌握的完整流程 【免费下载链接】yolov9 项目地址: https://gitcode.com/GitHub_Trending/yo/yolov9 还在为YOLOv9模型评估感到困惑吗&#xff1f;面对复杂的COCO指标和繁琐的配置步骤&#xff0c;很多初学者都会感到无…

作者头像 李华
网站建设 2026/3/31 9:03:21

LMDeploy KV Cache量化技术:大幅提升大模型推理性能的实战指南

LMDeploy KV Cache量化技术&#xff1a;大幅提升大模型推理性能的实战指南 【免费下载链接】lmdeploy LMDeploy is a toolkit for compressing, deploying, and serving LLMs. 项目地址: https://gitcode.com/gh_mirrors/lm/lmdeploy 在大语言模型推理服务部署过程中&am…

作者头像 李华