实战项目 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 虽然简单,但骨架已经搭好了。你可以尝试:

  1. 支持 System Prompt: 在侧边栏增加一个文本框,让用户设定“你是翻译官”或“你是程序员”。
  2. 多模态: 增加图片上传按钮,支持 GPT-4o 识图。
  3. 长期记忆: 将 st.session_state.messages 保存到本地 JSON 文件或数据库。

最后更新:2025-12

AI导航助手

Powered by DeepSeek

你好!我是AI导航助手,由DeepSeek驱动。

我可以帮你: • 推荐适合你的AI模型 • 解答AI相关问题 • 直接带你跳转到相关页面

试试点击下方问题,或直接输入你的问题!

快捷提问:

哪个AI模型最好?有免费的AI吗?写代码用哪个?API怎么接入?

点击按钮可直接跳转到相关页面