Python与AI应用(项目开发实战:AI智能伴侣第三版)

接下来是针对于项目实战代码的进一步优化,这一个版本及其之后,我成功实现了方向性的突破,让我的代码搭建起来的网页终于有了AI智能伴侣的雏形,代码块如下:

复制代码
#AI智能伴侣网页版(侧边栏制作)

#生成本地网页的路径:streamlit run AI_partner_03.py(注意这里必须点击该项目,从该项目进入终端才可以输入这一串命令生成网页)

#所有代码都可以在streamlit中找到样例,官方文档路径:https://docs.streamlit.io/

from pathlib import Path

# 获取当前代码文件(streamlit入门.py)所在的文件夹路径
BASE_DIR = Path(__file__).parent

# 定义一个辅助函数,专门用来拼接资源路径
def get_resource_path(filename):
    return str(BASE_DIR / 'resources' / filename)

import streamlit as st

import os
from openai import OpenAI

#标题

st.title("AI智能伴侣(DeepSeek)")


#创建与AI交互的大模型客户端对象(DEEPSEEK_API_KEY环境变量的名字,值就是DeepSeek的API_KEY的)

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

st.set_page_config(
    page_title="AI智能伴侣", #这里用来设置网页的标签名字
    page_icon="🥰",
    layout="wide", #控制网页布局,可以设置centered(只占用中间区域)和wide(布满整个页面)
    initial_sidebar_state="expanded", #用于控制侧边栏的语句
    menu_items={

    }
)

#昵称(这里是默认值,如果用户没有输入昵称,则使用这个默认值)

if 'nick_name' not in st.session_state:
    st.session_state.nick_name = '木婉清'

#性格(这里是默认值,如果用户没有输入性格,则使用这个默认值)

if 'nature' not in st.session_state:
    st.session_state.nature = '高冷傲娇心里一直默默暗恋用户,却由于害羞从未开口言明'

#侧边栏制作

with st.sidebar:
    st.subheader("AI智能伴侣")
    # 昵称输入框
    nick_name = st.text_input('昵称',placeholder = '请输入昵称',value = st.session_state.nick_name)
    if nick_name:
        st.session_state.nick_name = nick_name
    # 性格输入框
    nature = st.text_area('性格',placeholder = '请输入性格',value = st.session_state.nature)
    if nature:
        st.session_state.nature = nature



#初始化聊天信息

if 'message' not in st.session_state:
    st.session_state.message = []


#展示聊天信息

for message in st.session_state.message:
    st.chat_message(message["role"]).write(message["content"])

#系统提示词

system_prompt = """
        你叫%s,现在是用户的真实伴侣,请完全代入角色
        规则:
            1.每次回复一条消息
            2.匹配用户的语言
            3.做他的知音,和他拥有灵魂级别的共鸣
            4.像微信聊天一样正常回复他的消息
            5.回复内容要符合角色性格定位
            6.用符合伴侣的方式说话
        伴侣性格:
           %s
        严格遵守以上规则,不要违背角色定位
"""  # 在这里提供AI的角色定位
#消息输入框

prompt = st.chat_input('请输入您要交互的内容') #这个语句用来创建一个消息输入框
if prompt: #这里字符串会自动转化成布尔值
    st.chat_message('user').write(prompt) #这个语句用来创建一个消息显示框
    print('调用AI大模型,提示词:',prompt)
    st.session_state.message.append({"role": "user", "content": prompt}) #保存用户输入的信息

    #调用AI大模型
    # noinspection bad-argument-type
    response = client.chat.completions.create(
        model="deepseek-flash",
        messages=[
            {"role": "system",
             "content": system_prompt % (st.session_state.nick_name, st.session_state.nature)},
            *st.session_state.message  #这样就成功让AI记住了我们的对话
        ],
        stream=True,
        reasoning_effort="high",
        extra_body={"thinking": {"type": "enabled"}}
    )
    #输出大模型返回的结果

    #非流式输出的代码

    # print('大模型返回的结果',response.choices[0].message.content)
    # st.chat_message('assistant').write(response.choices[0].message.content)

    #流式输出的代码

    response_message = st.empty() #创建一个新的组件,用于显示AI的返回结果
    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.message.append({"role": "assistant", "content": full_response})  # 保存AI返回的信息

上面这个版本的代码添加了侧边栏,可以给AI伴侣赋予你想要的名字和性格,达成你想要交互的效果。说实话,每一个版本的代码的产出都是不太容易的,因为我本人就对这些代码是一知半解的,很多语句都是从streamlit官网的文档直接复制粘贴调用过来的,所以可能存在一些不够严谨或者错误的地方。

我是非常期待这个项目能够完成的,毕竟它是我自己亲手制作的第一个项目,也是很感叹,我这么一个小白也能通过编程和AI的结合跑出来这么一个项目,麻雀虽小,但也是五脏俱全,还是十分令人激动的,期待后面的学习和进一步的优化,这个项目还有很多路要走,加油。

相关推荐
aqi004 小时前
鸿蒙版本的电子书阅读APP开放源码啦
android·华为·ai编程·harmonyos·鸿蒙
敬往事一杯酒哈4 小时前
海康 AGV 导航读码器学习
学习
qq_284274056 小时前
机械原理笔记:平面机构自由度计算(复合铰链、局部自由度、虚约束)与四杆机构入门(含考点)
笔记·学习·平面·自动化·制造
全栈练习生6 小时前
AI Agent 沙箱
python·ai
小虎AI生活7 小时前
把重复工作流派给 AI 的完整方法:四样要素、固定熟手与定时任务
aigc·ai编程
qq_284274057 小时前
数控铣床与加工中心笔记:铣刀与刀柄系统、G54试切对刀、镜像加工指令、孔加工工艺(钻扩铰镗)与固定循环G73/G83/G81/G76/G87/G84
笔记·学习·自动化·制造
SEO_juper8 小时前
用 Python 写一个 GEO 可见性检查脚本:你的网站现在能被 AI 引用吗
开发语言·人工智能·爬虫·python·seo·外贸独立站
用户5563525560568 小时前
[避坑] AI工具雷达避坑 | agent-browser的真实问题
ai编程
Titan20248 小时前
MySQL访问个人学习笔记
笔记·学习·mysql
用户8356290780519 小时前
使用 Python 对 Excel 工作表进行排序
后端·python