尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Python入门第六课

Python入门第六课 上节课程学习了关于Python中的面向对象基础部分下面我们将继续学习Python的核心知识一、异常**异常**就是程序运行过程中出现的错误会中断程序的正常执行1.1异常处理**①不做处理**整个程序因为一个BUG中断执行②捕获异常按照我们自己的处理方式处理完程序继续运行–捕获方式示例# 异常try:print( )# print(my_name)print(1/0)print( )exceptNameErrorase:print(名字不存在异常信息,e)exceptZeroDivisionErrorase:print(除数不能为0异常信息,e)1.2异常传递异常传递就是异常在函数调用中层层上报的过程直到有人处理它或者程序奔溃二、AI项目基础大模型部署分为2.1本地部署ollama是一个运行在本地、管理大语言模型的工具。官网https://ollama.com直接下载即可然后可以在官网找到要下载的AI模型我这里选择的时deepseek的r1模型根据自己电脑的硬件情况来选择按照版本2.2官方开放 API首先去deepseek官网创建一个APIkey创建好的如下图所示2.3代码调用DeepSeek在DeepSeek的API文档当中就有使用python代码调用deepseek网址https://api-docs.deepseek.com/zh-cn/我把代码直接复制在这里importosfromopenaiimportOpenAI# 创建与大模型交互的客户端对象clientOpenAI(# DEEPSEEK_API_KEY是环境变量的名字值就是DeepSeekAPIKey的值api_keyos.environ.get(DEEPSEEK_API_KEY),base_urlhttps://api.deepseek.com)# 与大模型进行交互responseclient.chat.completions.create(# 所调用的模型modeldeepseek-v4-pro,messages[{role:system,content:You are a helpful assistant},{role:user,content:你是谁},],streamFalse,reasoning_efforthigh,extra_body{thinking:{type:enabled}})# 输出大模型返回的结果print(response.choices[0].message.content)2.4提示词工程**提示词**是引导大模型进行内容生成的命令三、AI项目实战3.1streamlit以下是streamlit页面importstreamlitasst st.title(stream第一个程序)st.header(一级标题)st.subheader(二级标题)运行指令在pycharm终端运行streamlit run 文件名3.1.1streamlit基础用法我将streamlit的基础用法写在了python代码块中# 段落文字st.write(这是一段文字)st.write(这是一段文字)st.write(这是一段文字)# 图片st.image(../resources/logo.png,width300)# 音频st.audio(../resources/news.mp3,width300)# 视频st.video(../resources/news.mp4,width300)# logost.logo(../resources/logo.png)# 表格student_data{姓名:[王林,李慕婉,贝罗,莫厉海,石萧],学号:[20260001,20260002,20260003,20260004,20260005],语文:[98,90,59,29,80],数学:[88,78,65,70,39],英语:[99,89,87,59,62],总分:[285,257,211,158,181]}st.table(student_data)# 普通输入框namest.text_input(请输入)st.write(name)# 密码输入框passwordst.text_input(请输入密码,typepassword)st.write(f你输入的密码为{password})# 单选按钮st.radio(请输入您的性别,[男,女,未知])3.1.2streamlit页面布局# 设置页面的配置项st.set_page_config(page_titlestreamlit页面,page_icon,# 网页的布局layoutcentered,# 控制侧边栏initial_sidebar_stateexpanded,menu_items{Get Help:https://www.extremelycoolapp.com/help,Report a bug:https://ollama.com,About:# This is a header. This is an *extremely* cool app!})3.2开发项目AI伴侣系统代码importstreamlitasstimportosfromopenaiimportOpenAIimportdatetimeimportjson# 脚本文件所在目录(用于定位 logo 等资源文件,避免依赖运行时的当前工作目录)BASE_DIRos.path.dirname(os.path.abspath(__file__))# 设置页面的配置项st.set_page_config(page_titleAI智能伴侣 ,page_icon,# 网页的布局layoutwide,# 控制侧边栏initial_sidebar_stateexpanded,menu_items{})# 保存会话信息的函数defsave_session():ifst.session_state.current_session:# 构建新的会话对象session_data{current_session:st.session_state.current_session,messages:st.session_state.messages,nick_name:st.session_state.nick_name,personality:st.session_state.personality}# 如果session目录不存在则创建ifnotos.path.exists(session):os.makedirs(session)# 保存会话数据withopen(fsession/{st.session_state.current_session}.json,w,encodingutf-8)asf:json.dump(session_data,f,ensure_asciiFalse,indent4)# 加载所有的列表信息defload_sessions():session_list[]#加载session目录下的所有json文件ifos.path.exists(session):file_listos.listdir(session)forfilenameinfile_list:iffilename.endswith(.json):session_list.append(filename[:-5])session_list.sort(reverseTrue)#降序排序、returnsession_list# 加载指定会话信息defload_session(session_name):try:ifos.path.exists(fsession/{session_name}.json):# 读取会话数据withopen(fsession/{session_name}.json,r,encodingutf-8)asf:session_datajson.load(f)st.session_state.messagessession_data[messages]st.session_state.nick_namesession_data[nick_name]st.session_state.personalitysession_data[personality]st.session_state.current_sessionsession_nameexceptException:st.error(加载会话失败请检查会话名称是否正确)# 删除会话信息defdelete_session(session_name):try:ifos.path.exists(fsession/{session_name}.json):os.remove(fsession/{session_name}.json)#如果删除的是当前会话则需要更新消息列表ifsession_namest.session_state.current_session:st.session_state.messages[]st.session_state.current_sessiondatetime.datetime.now().strftime(%Y-%m-%d-%H-%M-%S)exceptException:st.error(删除会话失败请检查会话名称是否正确)# 大标题st.title(AI智能伴侣 )st.logo(os.path.join(BASE_DIR,..,resources,logo.png))# 创建与大模型交互的客户端对象clientOpenAI(api_keyos.environ.get(DEEPSEEK_API_KEY),base_urlhttps://api.deepseek.com)# 系统提示词system_prompt 你叫%s现在是用户的真实伴侣请完全代入伴侣角色。 规则 1. 每次只回1条消息 2. 禁止任何场景或状态描述性文字 3. 匹配用户的语言 4. 回复简短像微信聊天一样 5. 有需要的话可以用❤️等emoji表情 6. 用符合伴侣性格的方式对话 7. 回复的内容, 要充分体现伴侣的性格特征 伴侣性格 - %s 你必须严格遵守上述规则来回复用户。 # 初始化聊天信息ifmessagesnotinst.session_state:st.session_state.messages[]# 昵称ifnick_namenotinst.session_state:st.session_state.nick_name噜噜# 性格ifpersonalitynotinst.session_state:st.session_state.personality活泼开朗的东北姑娘# 会话标识ifcurrent_sessionnotinst.session_state:st.session_state.current_sessiondatetime.datetime.now().strftime(%Y-%m-%d-%H-%M-%S)# 展示聊天信息st.text(f会话名称{st.session_state.current_session})formessageinst.session_state.messages:ifmessage[role]user:st.chat_message(user).write(message[content])elifmessage[role]assistant:st.chat_message(assistant).write(message[content])# 左侧的侧边栏withst.sidebar:# 会话管理st.subheader(AI控制面板)# 新建会话ifst.button(新建会话,widthstretch,icon✒️):# 1.保存当前会话信息save_session()#2.创建新的会话ifst.session_state.messages:#如果聊天信息非空True否则Falsest.session_state.messages[]st.session_state.current_sessiondatetime.datetime.now().strftime(%Y-%m-%d-%H-%M-%S)save_session()# 重新运行当前页面st.rerun()# 会话历史st.text(会话历史)session_listload_sessions()forsessioninsession_list:col1,col2st.columns([4,1])withcol1:# 加载会话信息ifst.button(session,widthstretch,icon,keyfload_{session},typeprimaryifsessionst.session_state.current_sessionelsesecondary):load_session(session)st.rerun()withcol2:# 删除会话ifst.button(,widthstretch,icon❎️,keyfdelete_{session}):delete_session(session)st.rerun()#分割线st.divider()# 伴侣st.subheader(伴侣信息)# 昵称nick_namest.text_input(昵称,placeholder请输入昵称)ifnick_name:st.session_state.nick_namenick_name#性格personalityst.text_area(性格,placeholder请输入性格)ifpersonality:st.session_state.personalitypersonality# 聊天消息的输入框promptst.chat_input(请输入你要问的问题)# 在if中字符串会自动转换为bool值ifprompt:# 展示用户输入的问题st.chat_message(user).write(prompt)print(------------------------------这是调用AI大模型提示词,prompt)# 添加用户消息到会话状态st.session_state.messages.append({role:user,content:prompt})# 调用AI大模型responseclient.chat.completions.create(modeldeepseek-v4-pro,messages[{role:system,content:system_prompt%(st.session_state.nick_name,st.session_state.personality)},*st.session_state.messages],streamTrue)# 创建一个空的容器来显示大模型的返回结果response_messagest.empty()full_responseforchunkinresponse:ifchunk.choices[0].delta.contentisnotNone:contentchunk.choices[0].delta.content full_responsecontent response_message.chat_message(assistant).write(full_response)#保存大模型返回的结果st.session_state.messages.append({role:assistant,content:full_response})#保存会话信息save_session()3.3文件操作**文件操作就是分为**打开、读\写、关闭读文件代码示例# 读文件# 1、打开文件fileopen(出师表.txt,r,encodingutf-8)# 2、读取文件一次性读取所有内容# content file.read()# 2、读取文件一行生成contentfile.readlines()forlineincontent:print(line.strip())# 3、关闭文件file.close()写文件代码示例# 写文件# 1、打开文件fileopen(静夜思.txt,w,encodingutf-8)# 2、写文件file.write(静夜思(李白)\n)file.write(床前明月光疑是地上霜。\n)file.write(举头望明月低头思故乡。\n)# 3、关闭文件file.close()3.3.1资源释放繁琐的方式简单的方式3.3.2json文件写入json文件# 写入json文件importjson# 写入json数据文件user{name:张三,age:18,hobby:[看电影,听音乐]}withopen(user.json,w,encodingutf-8)asf:# 把user这个对象转化为json这个字符串写入f# ensure_ascii默认为True确保所有的输出的数据都是ascii编码设置为False则输出中文# indent设置缩进json.dump(user,f,ensure_asciiFalse,indent2)读取json文件# 写入json文件importjson# 读取json文件withopen(user.json,r,encodingutf-8)asf:userjson.load(f)print(user)print(type(user))以上就是本次第六课的全部内容
返回列表