1. 项目概述
这个项目实现了一个基于DeepSeek大模型的本地部署聊天助手,使用Streamlit框架快速搭建Web界面。作为一个Python开发者,我发现这种组合特别适合快速构建AI应用原型。整个项目代码不到100行,却实现了一个功能完整的AI对话系统。
核心功能包括:
- 实时对话交互界面
- 会话历史记录与展示
- DeepSeek大模型API调用
- 开发者调试信息输出
提示:虽然使用了OpenAI客户端库,但实际对接的是DeepSeek的API,这种兼容性设计让项目可以灵活切换不同的大模型服务。
2. 环境准备与依赖安装
2.1 基础环境配置
首先需要准备Python环境,建议使用3.8及以上版本。我推荐使用conda创建虚拟环境:
bash复制conda create -n deepseek-chat python=3.8
conda activate deepseek-chat
2.2 依赖包安装
项目主要依赖两个Python包:
bash复制pip install streamlit openai
- Streamlit:用于快速构建Web界面
- OpenAI:虽然是OpenAI官方库,但通过修改base_url可以兼容DeepSeek API
注意:如果遇到安装问题,可以尝试使用清华镜像源:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple streamlit openai
3. 核心代码解析
3.1 页面基础配置
python复制st.set_page_config(
page_title="WEP_AI助手",
page_icon=".venv/web/yonngxuan/c77b2ddaf0eb023c3fcbf4bf000b746a.jpg",
layout="wide",
initial_sidebar_state="expanded",
menu_items={'About': "@古方路杰出青年 2026"}
)
这段代码配置了Web应用的基本属性:
page_title:设置浏览器标签页标题page_icon:设置网站图标(需要提供本地图片路径)layout="wide":使用宽屏布局,更适合聊天界面initial_sidebar_state:控制侧边栏初始状态
3.2 聊天历史管理
python复制if 'messages' not in st.session_state:
st.session_state.messages = []
for message in st.session_state.messages:
if message["role"] == "user":
st.chat_message("user").write(message["content"])
else:
st.chat_message("assistant").write(message["content"])
这里使用了Streamlit的session_state来持久化聊天记录:
messages列表保存所有聊天消息- 每条消息包含
role(user/assistant)和content(消息内容) - 页面刷新时会自动重新渲染所有历史消息
4. DeepSeek API集成
4.1 客户端初始化
python复制client = OpenAI(
api_key=os.environ.get('DEEPSEEK_API_KEY'),
base_url="https://api.deepseek.com"
)
关键点说明:
api_key从环境变量获取,避免硬编码在代码中base_url指向DeepSeek的API端点- 使用OpenAI客户端库但实际调用DeepSeek服务
4.2 消息处理流程
python复制if prompt:
st.chat_message("user").write(prompt)
st.write("WEP_AI正在思考中...")
st.session_state.messages.append({"role": "user", "content": prompt})
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "system", "content": system_prompt},
*st.session_state.messages
],
stream=False
)
st.chat_message("assistant").write(response.choices[0].message.content)
st.session_state.messages.append({"role": "assistant", "content": response.choices[0].message.content})
工作流程解析:
- 用户输入触发
if prompt条件 - 先展示用户消息并保存到历史
- 调用DeepSeek API获取回复
- 展示AI回复并保存到历史
5. 部署与运行
5.1 本地运行
设置环境变量后直接运行:
bash复制export DEEPSEEK_API_KEY=your_api_key
streamlit run app.py
5.2 生产部署建议
对于生产环境,可以考虑:
- 使用Docker容器化部署
- 添加Nginx反向代理
- 实现用户认证功能
- 增加速率限制
6. 常见问题排查
6.1 API调用失败
可能原因:
- API密钥未正确设置
- 网络连接问题
- DeepSeek服务不可用
解决方案:
python复制try:
response = client.chat.completions.create(...)
except Exception as e:
st.error(f"API调用失败: {str(e)}")
6.2 聊天历史丢失
Streamlit的session_state在以下情况会重置:
- 页面完全刷新
- 服务器重启
- 代码修改后重新运行
持久化解决方案:
python复制# 使用SQLite保存聊天历史
import sqlite3
conn = sqlite3.connect('chat_history.db')
7. 功能扩展建议
7.1 流式输出改进
当前设置为stream=False,可以改为流式输出:
python复制response = client.chat.completions.create(
model="deepseek-chat",
messages=[...],
stream=True
)
message_placeholder = st.empty()
full_response = ""
for chunk in response:
full_response += chunk.choices[0].delta.content or ""
message_placeholder.markdown(full_response + "▌")
message_placeholder.markdown(full_response)
7.2 多模态支持
DeepSeek可能支持图片理解,可以扩展文件上传功能:
python复制uploaded_file = st.file_uploader("上传图片")
if uploaded_file is not None:
# 处理图片上传逻辑
我在实际开发中发现,这种基于Streamlit的AI应用原型开发效率极高,特别适合快速验证想法。通过环境变量管理敏感信息、合理组织聊天历史数据结构、添加适当的错误处理,就能构建出健壮的AI对话应用。