实战项目 1: 搭建个人 AI 助手
- **界面**: 极简的聊天窗口 (Streamlit)。
7分钟
2025-12-26
实战项目教程实战项目
实战项目 1: 搭建个人 AI 助手
纸上得来终觉浅。本教程将带你使用 Python 和 Streamlit,从零开始搭建一个类似 ChatGPT 的 Web 界面个人助手,并支持多模型切换。
1. 项目目标
- 界面: 极简的聊天窗口 (Streamlit)。
- 核心: 能够调用 OpenAI/Claude/DeepSeek API。
- 特性:
- 支持流式输出(打字机效果)。
- 支持保存对话历史。
- 侧边栏可调节模型参数 (Temperature)。
2. 环境准备
需要 Python 3.8+。
mkdir my-ai-assistant
cd my-ai-assistant
# 建议创建虚拟环境
python -m venv venv
# Windows 激活
.\venv\Scripts\activate
# Mac/Linux 激活
source venv/bin/activate
# 安装依赖
pip install openai streamlit
3. 代码实现 (app.py)
新建 app.py,复制以下全量代码:
import streamlit as st
from openai import OpenAI
# 1. 页面配置
st.set_page_config(page_title="我的 AI 助手", layout="wide")
st.title("🤖 个人 AI 助手")
# 2. 侧边栏配置
with st.sidebar:
st.header("设置")
api_key = st.text_input("OpenAI API Key", type="password")
base_url = st.text_input("Base URL (可选)", value="https://api.openai.com/v1")
model = st.selectbox("选择模型", ["gpt-3.5-turbo", "gpt-4o", "deepseek-chat"])
temperature = st.slider("随机性 (Temperature)", 0.0, 2.0, 0.7)
if st.button("清除对话历史"):
st.session_state.messages = []
# 3. 初始化对话历史
if "messages" not in st.session_state:
st.session_state.messages = []
# 4. 显示历史消息
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
# 5. 处理用户输入
if prompt := st.chat_input("说点什么..."):
if not api_key:
st.info("请先在左侧输入 API Key")
st.stop()
# 显示用户消息
st.session_state.messages.append({"role": "user", "content": prompt})
with st.chat_message("user"):
st.markdown(prompt)
# 6. 调用 API 并流式输出
client = OpenAI(api_key=api_key, base_url=base_url)
with st.chat_message("assistant"):
message_placeholder = st.empty()
full_response = ""
try:
stream = client.chat.completions.create(
model=model,
messages=[
{"role": m["role"], "content": m["content"]}
for m in st.session_state.messages
],
temperature=temperature,
stream=True,
)
for chunk in stream:
if chunk.choices[0].delta.content:
full_response += chunk.choices[0].delta.content
message_placeholder.markdown(full_response + "▌")
message_placeholder.markdown(full_response)
# 保存 AI 回复
st.session_state.messages.append({"role": "assistant", "content": full_response})
except Exception as e:
st.error(f"发生错误: {e}")
4. 运行与测试
在终端运行:
streamlit run app.py
浏览器会自动打开 http://localhost:8501。
- 在侧边栏输入你的 API Key(OpenAI 或 DeepSeek 均可)。
- 开始对话!
5. 扩展方向
这个 Demo 虽然简单,但骨架已经搭好了。你可以尝试:
- 支持 System Prompt: 在侧边栏增加一个文本框,让用户设定“你是翻译官”或“你是程序员”。
- 多模态: 增加图片上传按钮,支持 GPT-4o 识图。
- 长期记忆: 将
st.session_state.messages保存到本地 JSON 文件或数据库。
最后更新:2025-12