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

模型文件硬塞进 Git,GitHub 直接打回原形:使用Git-LFS管理大文件

醋孔啥投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()

异常处理确保错误时能友好提示用户

关键技术点

Streamlit 会话状态:利用 st.session_state 保存对话历史,实现状态管理

LangChain 1.0 链语法:采用新的管道运算符 | 构建处理流程

消息类型区分:使用 HumanMessage 和 AIMessage 区分不同角色的消息

API 密钥管理:支持环境变量和手动输入两种方式配置API密钥

错误处理:完善的异常捕获和用户提示

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

相关文章:

  • 4卡L20 48G部署Qwen3-32B终极指南:从入门到“真·跑起来
  • 【Redis系列】RedisTemplate的使用与注意事项
  • 开箱即用,龙虾最佳伴侣,不服来战!
  • Vue3+Element Plus对话框保存按钮禁用状态控制(打开对话框时禁用、数据加载过程中禁用、数据加载完成后若无修改则禁用、用户修改明细后启用、保存成功后再次禁用)
  • 基于Cherry Studio+三方MCP+LLM在本地构建MySQL查询助手
  • 2026财富觉醒:普通人如何靠“懒人法则”实现资产滚雪球?(保姆级干货)
  • C++17新特性
  • 基于WOA鲸鱼优化的LSTM长短记忆网络模型的文本分类算法matlab仿真
  • 分⽀和循环:C语言的脊柱
  • 《HelloGitHub》第 期
  • 【优化部署】基于matlab果蝇算法改进虚拟力融合算法无线传感器网络节点部署【含Matlab源码 15143期】
  • R 基础运算
  • 螺旋矩阵总结
  • 2.2.1 - 3D图搜索算法(以A*为例) - Python运动规划库教程(Python Motion Planning)
  • Mysql安装测试--初入心得
  • Flutter 三方库 async_recursion 的鸿蒙化适配指南 - 稳健的异步递归治理,征服鸿蒙深层数据结构
  • ArkClaw让“养虾”更安全!火山引擎AI助手安全解决方案全面升级
  • 数据结构STL库(从入门到精通,适合小白)
  • 记一次 .NET 某放射治疗光学定位软件 卡死分析
  • 从通用Agent到领域Agent:技术原理与演进路径
  • 人工智能之数学基础:全微分的介绍
  • 【快速见刊】第二届生态环境保护、环境监测与修复国际学术会议(EPEMR 2026)
  • Jvm和垃圾回收精讲
  • 基于 ESP32S3 的 LVGL 9.4 图形库移植与 UI 开发实践分享(课程作业)
  • 鸿蒙常见问题分析三十三:如何解决Column子组件超出容器边界
  • OJ50 51 52
  • Leecode 18. 四数之和
  • 2026商家寄件价格避坑指南:5个省钱雷区别再踩!
  • SQL-存储引擎
  • Flutter 三方库 argos_translator_offline 的鸿蒙化适配指南 - 让机器翻译回归“端侧隔离”,打造鸿蒙应用专家级的离线多语言 AI 治理中台