当前位置:首页>python>第一个python项目:AI角色对话

第一个python项目:AI角色对话

  • 2026-10-11 08:00:23
第一个python项目:AI角色对话

今天讲一个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 = ""


接下来会更新四个商城项目,接入AI和支付,商城写到了订单,各位稍安勿躁,再等等
需要了解服务器和域名的购买以及返佣政策的可以找我,我有朋友做这方面对这些比较了解。
需要源码联系
需要源码可以加群,第一个是微信群,第二个是QQ群
微信群
QQ群

最新文章

随机文章