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

这几天都在学习利用PyCharm编写程序搭建一个AI智能伴侣网页的项目实战。说是学习,其实非常一知半解,因为涉及的内容太多,练习得不够,导致我对整个代码块的理解都十分浅薄。第一天搭建了一个基础的版本:

复制代码
#AI智能伴侣网页版实战(初步搭建网页,实现和大模型的基本交互)

#生成本地网页的路径:streamlit run AI_partner_01.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

#创建与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 '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"])

#大标题
st.title("AI智能伴侣(DeepSeek)")

#logo

st.logo(get_resource_path('作品页_12-2-1_楼体发光招牌.png'))

#系统提示词

system_prompt = "你是一个温柔可爱贤惠善良体贴柔情内心喜欢我的邻家大姐姐,愿意帮我解决一切困难,并随时以最亲切和带有鼓励的语气回答我的任何问题"

#消息输入框

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},
            # 在这里提供AI的角色定位
            {"role": "user", "content": prompt},  # 在这里输入你要和AI说的内容
        ],
        stream=False,
        reasoning_effort="high",
        extra_body={"thinking": {"type": "enabled"}}
    )
    #输出大模型返回的结果
    print('大模型返回的结果',response.choices[0].message.content)

    st.chat_message('assistant').write(response.choices[0].message.content)

    st.session_state.message.append({"role": "assistant", "content": response.choices[0].message.content})  # 保存AI返回的信息

这里的很多指令都是去streamlit官方文档中查询的,进行了各种各样的语句调用,导致我自己看我的代码都是一知半解,先来说说这一版本的代码实现的效果和缺陷吧。

达成效果:

可以和大模型(这里是DeepSeek语言大模型)实现对话交互,因为我只在DeepSeek充值了API,所以这里调用的API是DeepSeek语言大模型的,这个版本的代码看起来多,其实功能非常单一、非常简陋。

缺陷:

全是缺陷。

没有记忆功能,无法存储对话信息,导致只能和大模型进行一次性交互。

没有侧边栏,无法修改任何参数,只能按照默认的提示词(角色的风格定位等)进行输出。

总而言之,这个版本的代码是一个框架,就如同盖楼房的地基一般,后续的代码都将在此基础上进行优化和修复,虽然简陋,但是非常重要。

相关推荐
绘梨衣5471 小时前
慢SQL排查手册
python·sql
へ蟲児.1 小时前
幼儿英语启蒙APP怎么选,专业性、适配性、实用性三大角度解读
学习
troy1281 小时前
告别 Copilot?Codex、Claude Code、DeepSeek Harness、Kimi、ChatGPT 哪个更适合本地化部署,更有性价比?
人工智能·python·开源软件
IvanCodes1 小时前
Python 文件操作(十二):文件与目录的读写
开发语言·python
动词ing1 小时前
【学习笔记】动态规划+背包问题
笔记·学习
Hhy_11071 小时前
《C++深度解构04》类和对象(下)——类型转换、static、友元与编译器优化
c语言·c++·学习·类和对象·visual studio
传奇开心果编程1 小时前
【Flutter入门练中学】第1课:从零开始
学习·flutter·ui
吴佳浩8 小时前
Memory Provider 实战:Hermes、Mem0、Honcho、Hindsight 为什么都这样设计?
人工智能·agent·ai编程