基于 Streamlit 与 DeepSeek API 构建个性化 AI 智能伴侣(支持会话记忆与流式输出)
在人工智能技术快速发展的今天,如何快速搭建一个专属于自己的 AI 应用成为了许多开发者关注的方向。Streamlit 作为一款专注于数据科学和机器学习的轻量级 Python Web 框架,能够让开发者在无需掌握复杂前端技术的情况下,仅用几行 Python 代码就构建出美观、互动的 Web 界面。
本文将带领大家基于 Streamlit 与 DeepSeek API,从零开始搭建一个可以自定义昵称、性格,并具备会话记忆与流式输出能力的 AI 智能伴侣。
一、 项目核心功能
本项目主要包含以下几个核心功能模块:
- 个性化设定(侧边栏):用户可以在侧边栏输入伴侣的“昵称”与“性格说明”,这些设定将作为
system_prompt实时注入到大模型的对话上下文当中,从而让 AI 拥有符合设定的特定人设与说话风格。 - 会话记忆功能(Session State):由于 Streamlit 的运行机制是每次交互都会从头执行一遍脚本,因此我们利用
st.session_state维护了一个历史对话列表,确保 AI 能够记住前文内容。 - 流式输出(Streaming):支持打字机式的流式文本输出,无需等待整句生成完毕即可边生成边阅读,提升交互体验。
- 简洁优雅的 UI 设计:利用 Streamlit 自带的
chat_message和chat_input组件,快速搭建出媲美原生聊天软件的交互界面。
二、 系统架构与工作流程
项目的核心工作流如下图所示:
- 用户输入(昵称、性格及聊天信息)。
- 状态保存(信息存入
st.session_state.messages确保记忆不丢失)。 - 构建上下文(将系统提示词与历史对话合并,作为请求体传递给大模型接口)。
- 流式响应(大模型生成结果流式返回,前端使用
st.empty()实时刷新显示)。 - 保存响应(将 AI 返回的完整内容存入历史会话,等待下一次对话循环)。
三、 完整代码实现
请在本地新建一个名为 app.py 的 Python 文件,并将以下代码复制进去:
import streamlit as st
import os
from openai import OpenAI
# 设置页面布局与基本信息
st.set_page_config(
page_title="AI智能伴侣", # 浏览器标签页标题
page_icon="💬", # 标签页图标
layout="wide", # 页面布局:宽屏模式
initial_sidebar_state="expanded", # 默认展开侧边栏
menu_items={}
)
# 页面大标题
st.title("AI智能伴侣")
# 系统提示词模板
system_prompt = "你是一名AI助理,你的名字叫%s,请温柔耐心的回答用户问题,伴侣性格:%s"
# 初始化聊天信息(会话记忆核心)
if "messages" not in st.session_state:
st.session_state.messages = []
# 初始化昵称状态
if "nick_name" not in st.session_state:
st.session_state.nick_name = "AI伴侣"
# 初始化性格状态
if "nature" not in st.session_state:
st.session_state.nature = "温柔耐心"
# 展示历史聊天信息(保障刷新页面时历史对话不消失)
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"])
# 创建与AI大模型交互的客户端对象(配置API密钥与Base URL)
client = OpenAI(
api_key=os.environ.get('DEEPSEEK_API_KEY'),
base_url="https://api.deepseek.com"
)
# 左侧侧边栏配置区
with st.sidebar:
st.subheader("伴侣信息配置")
# 昵称输入框
nick_name = st.text_input("昵称", placeholder="请输入昵称,如:小爱")
if nick_name:
st.session_state.nick_name = nick_name
# 性格输入框
nature = st.text_area("性格设定", placeholder="请输入性格,如:傲娇、活泼、严谨")
if nature:
st.session_state.nature = nature
# 消息输入框
prompt = st.chat_input("请输入您要问的问题...")
# 处理用户输入并与大模型交互
if prompt:
# 1. 立即在界面上显示用户输入的内容
st.chat_message("user").write(prompt)
# 2. 保存用户输入的提示词到会话历史中
st.session_state.messages.append({"role": "user", "content": prompt})
# 3. 调用 AI 大模型(这里配置了 system 提示词与完整的历史对话)
response = client.chat.completions.create(
model="deepseek-chat", # 根据实际使用的模型名称修改
messages=[
{"role": "system", "content": system_prompt % (st.session_state.nick_name, st.session_state.nature)},
*st.session_state.messages
],
stream=True, # 开启流式传输
)
# 4. 创建一个空容器用于流式渲染大模型的回答
response_message = st.empty()
full_response = ""
# 5. 流式解析并实时渲染输出
for chunk in response:
if chunk.choices[0].delta.content is not None:
content = chunk.choices[0].delta.content
full_response += content
# 持续刷新渲染助手回答
response_message.chat_message("assistant").write(full_response)
# 6. 将最终大模型返回的完整结果保存到历史会话中,以便下一次交互使用
st.session_state.messages.append({"role": "assistant", "content": full_response})
四、 核心技术点解析
1. st.session_state 会话状态管理
Streamlit 的页面每次触发事件(例如用户在对话框输入文本并敲击回车)时,整个 Python 脚本都会从头到尾重新运行一遍。这意味着所有的局部变量都会被重置。
为了避免对话记录在页面重新加载时丢失,我们使用了 st.session_state。在脚本开头,我们检查 messages 是否在 st.session_state 中,若不在则进行初始化。每次产生新对话时,将对话内容 append 进去。在加载页面时,通过一个 for 循环将历史记录全部渲染出来。
2. 流式响应(Streaming)处理
传统的 API 请求需要等待大模型把整句话生成完毕后一次性返回,在遇到长文本时会有明显的卡顿感。
在本项目中,我们通过 stream=True 开启了流式输出:
- 使用
st.empty()创建一个占位容器。 - 循环遍历
response迭代器,获取模型实时产出的每个 token。 - 将增量内容拼接至
full_response中,并用response_message.chat_message("assistant").write(full_response)实时刷新页面显示,从而实现了平滑、流畅的打字机交互效果。
3. 系统提示词(System Prompt)的动态注入
通过侧边栏的 st.text_input 和 st.text_area,用户可以动态修改伴侣的昵称和性格特点。程序将这些参数动态格式化到 system_prompt 字符串中,并在每次向 API 发送请求时,将其放置在对话列表的第一项。大模型以此为依据调整自身的对话人设。
五、 项目效果展示
1. 基本交互效果
在主页面下,可以直接与 AI 智能伴侣进行基础的问答互动。
2. 侧边栏与人设配置
通过侧边栏输入不同的昵称和性格特征,点击对话后,AI 的回复语气会随着您的设定发生改变。
六、 如何运行该项目?
1. 安装依赖库
在终端中执行以下命令,安装运行所需的 Python 第三方库:
pip install streamlit openai
2. 配置 API Key
在运行程序之前,您需要将您的 DeepSeek 密钥配置为系统环境变量(也可以直接在代码中将 API Key 替换为您的明文密钥,但从安全角度出发不推荐这么做)。
- Linux / macOS:
export DEEPSEEK_API_KEY="your-deepseek-api-key-here" - Windows (PowerShell):
$env:DEEPSEEK_API_KEY="your-deepseek-api-key-here"
3. 启动应用
在终端切换到项目脚本所在的目录下,执行以下命令:
streamlit run app.py
运行成功后,终端会输出本地访问链接(通常为 http://localhost:8501),在浏览器中打开该链接即可开始使用您的 AI 智能伴侣。
七、 总结
通过本项目,我们基于 Streamlit 框架快速完成了应用界面的搭建,并配合 OpenAI SDK 实现了与大模型的长对话交互。借助内置的会话状态管理,解决了单页应用的上下文连贯问题。
未来,该项目还可以在以下方向进行拓展:
- 支持更多模型选择:在侧边栏加入下拉菜单,让用户自由切换不同的 LLM 模型。
- 加入历史对话导出与清空按钮:方便用户一键重置对话或保存珍贵对话记录。
- 增加多模态支持:利用大模型的多模态接口,实现发送图片让 AI 伴侣进行解析和互动的功能。
- 参考课程视频:黑马程序员Python+AI零基础入门到大神全套视频课程
更多推荐

所有评论(0)