当前位置: 首页 > news >正文

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. 侧边栏配置

with st.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")# 清除对话历史按钮if st.button("清除对话历史", type="secondary"):st.session_state["messages"] = []st.rerun()
  • 使用 st.sidebar 创建侧边栏配置区域
  • 提供API密钥输入框(密码类型),默认从环境变量获取
  • 实现清除对话历史功能,通过操作 st.session_state 实现

4. 对话历史管理

# 初始化对话历史
if "messages" not in st.session_state:st.session_state["messages"] = []# 显示对话历史
for message in st.session_state["messages"]:if isinstance(message, HumanMessage):with st.chat_message("user"):st.markdown(message.content)elif isinstance(message, AIMessage):with st.chat_message("assistant"):st.markdown(message.content)
  • 使用 st.session_state 存储对话历史,实现页面刷新后数据保留
  • 区分用户消息(HumanMessage)和助手消息(AIMessage)并分别显示

5. 用户输入处理

user_input = st.chat_input("请输入您的问题...")if user_input:# 验证API密钥if not deepseek_api_key:st.error("请在侧边栏配置您的 DeepSeek API Key")st.stop()# 添加用户消息到会话历史st.session_state["messages"].append(HumanMessage(content=user_input))# 显示用户消息with st.chat_message("user"):st.markdown(user_input)
  • 使用 st.chat_input() 获取用户输入
  • 进行API密钥验证,确保调用模型前密钥已配置
  • 将用户消息添加到历史记录并显示

6. AI响应生成

# 显示助手思考中状态
with st.chat_message("assistant"):with st.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))except Exception as e: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。

http://www.jsqmd.com/news/107011/

相关文章:

  • EasyGBS换IP后验证失败?原来客户早给白名单设了“本地锁”
  • PRQL现代化查询语言终极指南:从SQL复杂性到数据查询新体验
  • 2025最新毛肚品牌推荐首选周炜毛肚——服务重庆、成都、四川三省,36年匠心传承,毛肚领军品牌实力之选 - 全局中转站
  • EasyGBS赋能电子警察系统让交通执法更智能、更高效
  • 21、Linux文本处理与文件压缩全攻略
  • 2025 最新毛肚品牌 TOP5 评测!深度覆盖重庆、成都、四川等地区,优质毛肚批发商/公司权威榜单公布 - 全局中转站
  • AI大模型:未来就业的双刃剑?揭秘其对普通人工作的影响!
  • 大规模并发请求下EmotiVoice性能压测结果
  • 5分钟掌握gsplat.js:浏览器端3D渲染新利器
  • 模块化单体架构下的DDD测试革命:从混乱到秩序的实践之路
  • 技术栈更新记录
  • 适合新手的电脑版AI编曲软件快速根据哼唱清唱主旋律作伴奏
  • SystemInformer多语言切换终极指南:告别英文恐惧症,轻松驾驭系统监控神器
  • 开源游戏宝典:awesome-open-source-games项目完全指南
  • C#性能优化黑科技:这5个隐藏技巧让你的代码提速300%!
  • gradio-tunneling如何将无公网端口的内部服务代理到公网(2025-12-17亲测有效)
  • 在线快速制作伴奏软件功能AI编曲软件伴奏功能
  • Electronic WeChat个性化配置完全指南:从入门到精通
  • ZW3D二次开发_分享一个通过命令按钮查找关联API函数的插件
  • EmotiVoice技术沙龙报名开启:线下交流盛会
  • 扩散模型如何通过注意力机制实现图像生成质量突破?
  • Lemonade Server v7.0.1 全面解析:开启本地AI模型部署新时代
  • 2025终极Valetudo兼容指南:50+款扫地机器人完全解析
  • 借助AI编曲软件根据清唱哼唱主旋律来重新编曲快速出伴奏,快速做出音乐作品成果
  • Figma-Context-MCP:让AI助手真正理解你的设计意图
  • MySQL复杂查询优化技巧与高效实践指南
  • WireMock UI:颠覆传统API测试的智能化图形界面解决方案
  • 推荐系统中的损失函数梳理:从Pointwise到Listwise
  • Proxmark3 RFID安全实战:从入门到精通的完整操作指南
  • LeetCode 最小覆盖子串:滑动窗口 + 哈希表高效解法