使用Streamlit+Deepseek搭建AI大模型
实现代码
import streamlit as st
import os
from openai import OpenAI
from streamlit import sidebar
import datetime
import json
st.set_page_config(
page_title="AI智能大模型",
page_icon="🤖",
# 页面布局
layout="wide",
#控制侧边栏状态
initial_sidebar_state="expanded",
menu_items={}
)
# 保存会话信息
def save_session():
# 构建新的会话对象
session_data = {
"friend_name": st.session_state.friend_name,
"friend_nature": st.session_state.friend_nature,
"current_session": st.session_state.current_session,
"messages": st.session_state.messages
}
print("保存会话信息:",st.session_state.current_session)
if not os.path.exists("sessions"):
os.mkdir("sessions")
# 保存会话数据
with open(f"sessions/{st.session_state.current_session}.json", "w", encoding="utf-8") as f:
json.dump(session_data, f, ensure_ascii=False, indent=2)
# 加载所有的会话信息
def load_sessions():
session_list = []
# 加载sessions目录下的所有会话信息
if os.path.exists("sessions"):
file_list = os.listdir("sessions")
for filename in file_list:
if filename.endswith(".json"):
session_list.append(filename[:-5])
session_list.sort(reverse=True)
return session_list
# 加载指定会话信息
def load_session(session_name):
try:
if os.path.exists(f"sessions/{session_name}.json"):
print("session:"+session_name)
# 读取会话数据
with open(f"sessions/{session_name}.json","r",encoding="utf-8") as f:
session_data = json.load(f)
st.session_state.messages = session_data["messages"]
st.session_state.friend_name = session_name["friend_name"]
st.session_state.friend_nature = session_data["friend_nature"]
st.session_state.current_session = session_name
except Exception:
st.error("加载会话失败!")
# 删除指定会话信息
def delete_session(session_name):
try:
if os.path.exists(f"sessions/{session_name}.json"):
os.remove(f"sessions/{session_name}.json")
# 如果删除的是当前会话,则更新当前会话列表展示
if session_name == st.session_state.current_session:
st.session_state.messages = []
st.session_state.current_session = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
except Exception:
st.error("删除会话失败!")
# 大标题
st.title("AI智能大模型")
# 调用AI大模型
client = OpenAI(
api_key=os.environ.get('DEEPSEEK_API_KEY'),
base_url="https://api.deepseek.com")
# 系统提示词
system_prompt = ("你是%s,你是用户的真实朋友,请完全代入朋友角色"
"朋友性格:%s")
# 初始化聊天信息
if "messages" not in st.session_state:
st.session_state.messages = []
if "friend_name" not in st.session_state:
st.session_state.friend_name = "天天"
if "friend_nature" not in st.session_state:
st.session_state.friend_nature = "活泼开朗热情的河北姑娘"
# 会话标识
if "current_session" not in st.session_state:
now = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
st.session_state.current_session = now
st.text(f"会话名称:{st.session_state.current_session}")
# 展示聊天信息
for message in st.session_state.messages:
st.chat_message(message["role"]).write(message["content"])
# 左侧侧边栏
with sidebar:
# 会话信息管理
st.subheader("AI控制面板")
# 新建会话
if st.button("新建会话",width="stretch",icon="🖋"):
# 1、保存当前会话信息
if st.session_state.current_session:
save_session()
# 2、创建新的会话
if st.session_state.messages:
st.session_state.messages = []
st.session_state.current_session = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
save_session()
st.rerun()
# 会话历史
st.text("会话历史")
session_list = load_sessions()
for session in session_list:
col1,col2 = st.columns([4,1])
with col1:
# 加载会话信息
if st.button(session, width="stretch", icon="📄",key=f"load_{session}", type="primary" if session == st.session_state.current_session else "secondary"):
st.session_state.current_session = session
load_session(session)
st.rerun()
with col2:
# 删除会话信息
if st.button("",width="stretch",icon="❌",key=f"delete_{session}"):
delete_session(session)
st.rerun()
# 分割线
st.divider()
st.subheader("朋友信息")
friend_name = st.text_input("昵称",placeholder="请输入朋友的昵称",value=st.session_state.friend_name)
if friend_name:
st.session_state.friend_name = friend_name
friend_nature = st.text_input("性格",placeholder="请输入朋友的性格",value=st.session_state.friend_nature)
if friend_nature:
st.session_state.friend_nature = friend_nature
# 消息输入框
prompt = st.chat_input("请输入您要问的问题")
if prompt:
st.chat_message("user").write(prompt)
print("调用AI大模型发送的提示词")
# 保存用户输入的提示词
st.session_state.messages.append({"role": "user", "content": prompt})
# 调用AI模型,与其交互
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "system", "content": system_prompt%(st.session_state.friend_name, st.session_state.friend_nature)},
# 会话记忆的实现
*st.session_state.messages
],
stream=True
)
# 流式输出的结果解析方式
response_message = st.empty() # 创建一个空的组件,用于展示大模型返回的结果
full_response = ""
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)
# 保存大模型返回的提示词
st.session_state.messages.append({"role": "assistant", "content": full_response})
# 保存会话信息
save_session()
实现效果


左侧侧边栏可以设置AI的角色,灵活性较强

浙公网安备 33010602011771号