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的结合跑出来这么一个项目,麻雀虽小,但也是五脏俱全,还是十分令人激动的,期待后面的学习和进一步的优化,这个项目还有很多路要走,加油。

相关推荐
别动我齐刘海1 小时前
ROS2 Jazzy + C++ 实战路线——进阶学习3
c++·人工智能·vscode·python·算法·机器学习·机器人
Logintern091 小时前
“以一致的顺序获取锁“是预防死锁最核心、最有效的手段
python·postgresql·锁机制
zhangfeng11331 小时前
《从“人工适配“到“智能生成“:KernelSwift 跨国产芯片算子迁移全栈方案解读》 —— 强调范式跃迁和跨硬件属性,适合偏架构分析的写法
人工智能·算法·华为·ai编程·npu
OpsEye1 小时前
为什么你的 Agent 莫名烧钱?聊聊循环调用的兜底方案
javascript·ai编程
打工仔折腾 AI2 小时前
Prometheus 告警推钉钉:从单群 Webhook 到跨网络 Alertmanager 实战
人工智能·后端·python·性能优化
Ivanqhz2 小时前
Ping-Pong 双缓冲
开发语言·人工智能·python·深度学习·mlir
三十岁老牛再出发2 小时前
9月18日总结
python·深度学习·机器学习
pddqjd2 小时前
顺德区中考美术集训画室概念释义与核心服务要点梳理
学习
就叫你天选之人啦2 小时前
安装torch+vllm+flash_attn的prompt
人工智能·pytorch·python