陈牧函

核心功能总结

基于 Streamlit 框架开发了一个网页版 AI 聊天应用,命名为“WEP_AI助手”,核心功能是对接 DeepSeek 大模型(通过 OpenAI 兼容的 API),实现用户与 AI 的实时对话,并持久化保存单次会话内的聊天历史。

一.整体代码呈现

import sys
from platform import system

import streamlit as st
import os
from openai import OpenAI

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"
    }
)

st.title("WEP_AI助手")
st.subheader("@古方路杰出青年")
st.logo(".venv/web/yonngxuan/c77b2ddaf0eb023c3fcbf4bf000b746a.jpg")
import streamlit as st

system_prompt = """
    You are a helpful assistant.
    """
prompt=st.chat_input("请说点什么吧")

#初始化聊天消息
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"])

client = OpenAI(
        api_key=os.environ.get('DEEPSEEK_API_KEY'),
        base_url="https://api.deepseek.com")


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})
    # 打印调用大模型信息
    print("---------->调用大模型", prompt)
    print("---------->大模型返回结果",response.choices[0].message.content)

二.代码逐模块详细解释

1. 模块导入

import sys
from platform import system
import streamlit as st
import os
from openai import OpenAI
  • sys/platform.system:导入但未实际使用,属于预留的系统相关依赖;
  • streamlit as st:核心依赖,用于快速搭建网页界面(无需前端开发);
  • os:用于读取系统环境变量(获取 API 密钥);
  • openai.OpenAI:OpenAI 官方客户端,这里兼容调用 DeepSeek 的 API(非 OpenAI 官方模型)。

2. 页面基础

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"}
)
  • 配置网页标题、图标(指定本地图片路径)、布局(宽屏显示)、侧边栏默认展开;
  • 自定义“关于”菜单的说明文字。

3. 页面视觉元素

st.title("WEP_AI助手")
st.subheader("@古方路杰出青年")
st.logo(".venv/web/yonngxuan/c77b2ddaf0eb023c3fcbf4bf000b746a.jpg")
  • 展示应用主标题、副标题,以及指定路径的 logo 图片。

4. 聊天基础配置

system_prompt = """You are a helpful assistant."""
prompt=st.chat_input("请说点什么吧")
  • system_prompt:定义 AI 的系统角色(设定为“乐于助人的助手”),决定 AI 的基础行为;
  • st.chat_input:创建聊天输入框,用户输入的内容会赋值给 prompt 变量。

5. 聊天历史初始化与展示

# 初始化聊天消息(会话级持久化)
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"])
  • st.session_state:Streamlit 的会话状态对象,用于保存单次会话内的聊天记录(刷新页面不丢失);
  • 遍历历史消息列表,按“用户(user)”/“助手(assistant)”角色,以不同样式的聊天气泡展示内容。

6. DeepSeek 客户端初始化

client = OpenAI(
    api_key=os.environ.get('DEEPSEEK_API_KEY'),
    base_url="https://api.deepseek.com"
)
  • 创建 OpenAI 客户端实例,但实际对接 DeepSeek 接口:
  • api_key:从系统环境变量 DEEPSEEK_API_KEY 读取(避免硬编码密钥);
  • base_url:指定 DeepSeek 的 API 地址(兼容 OpenAI 接口格式)。

7. 处理用户输入与调用 AI

if prompt:  # 当用户输入内容时
    # 展示用户输入的内容
    st.chat_message("user").write(prompt)
    st.write("WEP_AI正在思考中...")
    
    # 保存用户消息到历史记录
    st.session_state.messages.append({"role": "user", "content": prompt})
    
    # 调用DeepSeek模型
    response = client.chat.completions.create(
        model="deepseek-chat",  # DeepSeek对话模型
        messages=[
            {"role": "system", "content": system_prompt},  # 系统提示词
            *st.session_state.messages  # 所有历史聊天消息
        ],
        stream=False  # 非流式输出(等待完整回复后展示)
    )
    
    # 展示AI回复并保存到历史记录
    st.chat_message("assistant").write(response.choices[0].message.content)
    st.session_state.messages.append({"role": "assistant", "content": response.choices[0].message.content})
    
    # 控制台打印调试信息
    print("---------->调用大模型", prompt)
    print("---------->大模型返回结果",response.choices[0].message.content)
  • 核心逻辑:用户输入内容后,先展示输入、保存到历史,再调用 DeepSeek 模型获取回复,最后展示回复并保存到历史;
  • stream=False:表示一次性获取完整回复(若设为 True 则为实时流式输出,更贴近ChatGPT的体验);
  • 控制台打印程序日志:方便开发者调试,查看用户输入和 AI 回复。

三.总结

  1. 核心功能:基于 Streamlit 快速搭建网页版 AI 聊天应用,对接 DeepSeek 大模型实现对话;
  2. 关键特性:支持会话级聊天历史保存、宽屏布局、自定义页面样式,API 密钥通过环境变量读取(更安全);
  3. 核心依赖:Streamlit(网页框架)+OpenAI 客户端(兼容调用 DeepSeek API)。
Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐