今天讲一个python项目实战:
python+AI生成一个AI项目
1.首先安装ollama本地模型
下载后双击即可安装,这里不再赘述。
注意:
Ollama默认安装目录是C盘的用户目录,如果不希望安装在C盘的话(其实C盘如果足够大放C盘也没事),就不能直接双击安装了。需要通过命令行安装。
命令行安装方式如下:
在OllamaSetup.exe所在目录打开cmd命令行,然后命令如下: OllamaSetup.exe /DIR=你要安装的目录位置
OK,安装完成后,还需要配置一个环境变量,更改Ollama下载和部署模型的位置。环境变量如下:
OLLAMA_MODELS=你想要保存模型的目录
安装完成后运行ollama run deepseek-r1:7b,首次运行比较慢,需要下载模型

出现这个页面就代表安装成功了
2.接下来就是写代码了
首先介绍一个python开源库:Streamlit,专为数据工程师及机器学习工程师设计,用来快速基于Python代码构建交互式的web网站(无需掌握前端技术)。
安装Streamlit:
pip install streamlit

python中引入streamlit
import streamlit as st
启动页面
streamlit run '.\streamlit.py'
下面讲一些要素
引入
import streamlit as st
st.header("123")
st.subheader("1233")
st.write("周杰伦2004年开了无与伦比演唱会")
st.image("right.png")
#分割线
st.divider()
data={"歌曲":["以父之名","将军","乱舞春秋","夜曲"],"专辑":["叶惠美","叶惠美","叶惠美","11月的肖邦"]}
st.table(data)

接下来写一个AI智能对话
配置
import streamlit as st
import os
from openai import OpenAI
st.set_page_config(
page_title="梨花的AI角色对话",
layout="wide",
initial_sidebar_state="expanded"
)
基本布局
from pyexpat.errors import messages
import streamlit as st
import os
from openai import OpenAI
client=OpenAI(api_key="你的deepseekAPIkey",base_url="https://api.deepseek.com")
st.set_page_config(
page_title="梨花的AI角色对话",
layout="wide",
initial_sidebar_state="expanded"
)
st.header("梨花的AI对话")
prompt=st.chat_input("请输入您要问的问题")
if prompt:
st.chat_message("user").write(prompt)
response=client.chat.completions.create(
model="deepseek-chat",
messages=[
{
"role":"system","content":"我是梨花,你的女朋友"
},
{
"role": "user", "content": prompt
}
],
stream=False
)
print("大模型返回结果")
st.chat_message("assistant").write(response.choices[0].message.content)
界面消息展示:
展示界面消息一般用st.session_state.messages来展示
具体代码如下:
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"])
prompt=st.chat_input("请输入您要问的问题")
if prompt:
st.chat_message("user").write(prompt)
st.session_state.messages.append({
"role":"user",
"content":prompt
})
response=client.chat.completions.create(
model="deepseek-chat",
messages=[
{
"role":"system","content":"我是梨花,你的女朋友"
},
{
"role": "user", "content": prompt
}
],
stream=False
)
print("大模型返回结果")
st.chat_message("assistant").write(response.choices[0].message.content)
st.session_state.messages.append({
"role": "assistant",
"content": response.choices[0].message.content
})
会话记忆和流式返回 会话记忆
*st.session_state.messages 历史记录,将每段对话都摊开,塞进大模型里面
流式返回
Stream:TRUE
prompt=st.chat_input("请输入您要问的问题")
if prompt:
st.chat_message("user").write(prompt)
st.session_state.messages.append({
"role":"user",
"content":prompt
})
response=client.chat.completions.create(
model="deepseek-chat",
messages=[
{
"role":"system","content":"我是梨花,你的女朋友"
},
*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:
full_response+=chunk.choices[0].delta.content
response_message.chat_message("assistant").write(full_response)
print("大模型返回结果")
st.session_state.messages.append({
"role": "assistant",
"content": full_response
})
侧边栏

with st.sidebar:
st.header("AI对话")
nickname=st.text_input("请输入姓名")
if nickname:
st.session_state.nickname=nickname
print(st.session_state.nickname)
nature=st.text_area("请输入性格")
if nature:
st.session_state.nature=nature
response=client.chat.completions.create(
model="deepseek-chat",
messages=[
{
"role":"system","content":("我是%s,你的女朋友,性格:%s" % (st.session_state.nickname,st.session_state.nature))
},
*st.session_state.messages
],
stream=True
)
保存会话,会话结束后需要进行保存操作:主要是保存到磁盘里面
import streamlit as st
import os
from openai import OpenAI
from datetime import datetime
def save_session():
if st.session_state.current_session:
session_data = {
"nick_name": st.session_state.nickname,
"nature": st.session_state.nature,
"current_session": st.session_state.current_session,
"messages": st.session_state.messages
}
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=[]
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
with st.sidebar:
st.header("AI对话")
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"{session}",type="primary"if session == st.session_state.current_session else"secondary"):
load_session(session)
st.rerun()
with col2:
if st.button("删除",width="stretch",icon="❎",key=f'delete{session}'):
st.rerun()
nickname = st.text_input("请输入姓名")
if nickname:
st.session_state.nickname = nickname
print(st.session_state.nickname)
nature = st.text_area("请输入性格")
if nature:
st.session_state.nature = nature
查看会话信息:
def load_session(session_name):
try:
if os.path.exists(f"sessions/{session_name}.json"):
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.nickname=session_data["nickname"]
st.session_state.nature=session_data["nature"]
st.session_state.current_session=session_name
except Exception:
st.error("加载失败")
创建会话,将列表全部置空
with st.sidebar:
st.header("AI对话")
if st.button("新建会话"):
save_session()
if st.session_state.current_session:
st.session_state.messages=[]
st.session_state.current_session=datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
save_session()
st.rerun()
删除会话
if st.button("删除",width="stretch",icon="❎",key=f'delete{session}'):
del_session(session)
st.rerun()
def del_session(session_name):
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.nickname = ""


