当前位置: 首页 > news >正文

python_15

本地部署deepseek

import json
import streamlit as st
from openai import OpenAI
from streamlit import sidebar, session_state
from datetime import datetime
import os#创建与AI大模型交互的客户端对象
client = OpenAI(# 本地Ollama的地址base_url="http://localhost:11434/v1",# Ollama不需要密钥,随便写一个就行api_key="not-needed"
)#设置页面的配置项
st.set_page_config(page_title="AI智能伴侣",# 浏览器标签页显示的名字page_icon="🤖",# 标签页旁边的小图标#布局layout="wide", # 页面用宽布局(更舒服)#控制侧边栏initial_sidebar_state="expanded",# 侧边栏默认展开menu_items={}# 隐藏右上角菜单(留空就是隐藏)
)#保存会话
def save_session():if st.session_state.current_session:# 构建会话对象session_data = {"nick_name": st.session_state.nick_name,"nature": st.session_state.nature,"current_session": st.session_state.current_session,"messages": st.session_state.messages}# 如果session目录不存在,则创建if not os.path.exists("../第一章/session"):os.mkdir("../第一章/session")# 保存会话数据with open(f"session/{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=[]#加载session目录下的文件if os.path.exists("../第一章/session"):file_list=os.listdir("../第一章/session")for file_name in file_list:if file_name.endswith(".json"):session_list.append(file_name[:-5])session_list.sort(reverse=True)return session_list#加载指定的会话信息
def load_session(session_name):try:if os.path.exists(f"session/{session_name}.json"):# 读取会话数据with open(f"session/{session_name}.json", "r", encoding="utf-8") as f:session_data = json.load(f)st.session_state.messages = session_data['messages']st.session_state.nick_name = session_data['nick_name']st.session_state.current_session = session_data['current_session']st.session_state.nature = session_data['nature']except Exception:st.error("加载会话失败!")#删除会话信息
def delete_session(session_name):try:if os.path.exists(f"session/{session_name}.json"):os.remove(f"session/{session_name}.json")#如果删除的是当前会话,则需更新消息列表if session_name==st.session_state.current_session:st.session_state.messages=[]st.session_state.current_session=generate_session_name()except Exception:st.error("删除会话失败")#创建会话标识
def generate_session_name():return datetime.now().strftime("%Y-%m-%d %H-%M-%S")#大标题
st.title("AI智能伴侣")#Logo
st.logo("🌘")#系统提示词
system_prompt = """你叫%s,现在是用户的真实伴侣,请完全代入伴侣角色:规则:1.每次只回1条消息2.禁止任何场景或状态描述性文字3.匹配用户的语言4.回复简短,像微信聊天一样5.有需要的话可以用•)物等emoji表情6.用符合伴侣性格的方式对话7,回复的内容,要充分体现伴侣的性格特征伴侣性格:- %s你必须严格遵守上述规则来回复用户。
"""#初始化聊天信息
if "messages" not in st.session_state:st.session_state.messages = []#昵称
if "nick_name" not in session_state:st.session_state.nick_name = "小甜甜"#性格
if "nature" not in session_state:st.session_state.nature = "温柔可爱的台湾姑娘"#会话标识
if 'current_session' not in session_state:st.session_state.current_session = generate_session_name()#展示聊天信息
st.text(f"会话名称:{st.session_state.current_session}")
for message in st.session_state.messages:st.chat_message(message['role']).write(message['content'])#分割线
st.divider()with sidebar:#会话信息st.subheader("AI控制面板")#新建会话if st.button("新建会话",width="stretch",icon="✏"):#1.保存当前会话save_session()#2.创建新会话if st.session_state.messages:#如果聊天消息非空,则为Truest.session_state.messages=[]st.session_state.current_session = generate_session_name()save_session()st.rerun()#重新运行当前页面#会话历史st.text("会话历史")session_list=load_sessions()for session in session_list:col1,col2=st.columns([4,1])with col1:#加载会话信息#三元运算符:语法 值1 if 条件 else 值2if st.button(session,width="stretch",icon="💬",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}"):delete_session(session)st.rerun()# 创建侧边栏 - with: streamlit上下文管理器st.sidebar.subheader("伴侣信息")#昵称输入框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#消息输入框
prompt=st.chat_input("请输入你的问题")
if prompt:#字符串自动转为布尔值,如果字符串为空,则为False;反之,为Truest.chat_message("user").write(prompt)#添加用户输入的prompt到session_state.message中st.session_state.messages.append({"role": "user", "content": prompt})#调用Ai大模型response = client.chat.completions.create(model="deepseek-r1:8b",messages=[{"role": "system","content":system_prompt % (st.session_state.nick_name,st.session_state.nature)},*st.session_state.messages],stream=True)# #输出AI大模型返回的答案(非流式输出的解析方式)# st.chat_message("assistant").write(response.choices[0].message.content)#输出AI大模型返回的答案(流式输出的解析方式)response_message=st.empty()#创建一个空的组件,展示大模型返回的结果full_response = ""for chunk in response:if chunk.choices[0].delta.content is not None:content=chunk.choices[0].delta.contentfull_response += contentresponse_message.chat_message("assistant").write(full_response)#保存Ai大模型返回的结果st.session_state.messages.append({"role": "assistant", "content": full_response})
http://www.jsqmd.com/news/604202/

相关文章:

  • 20254202 2025-2026-2 《Python程序设计》实验2报告
  • Transformer在医疗影像中的落地实践:SwinPA-Net模块拆解与调优指南
  • 20254123 2025-2026-2 《Python程序设计》实验2报告
  • 新手福音:在快马平台通过cmhhc项目轻松入门编程
  • 【数字运维合集】400余份数字运维、AI运维、智慧运维、数字化运维运营方案报告合集
  • 「CF1716F」Bags with Balls - in
  • Python打造智能BMI健康评估工具(带可视化界面)
  • League-Toolkit完全指南:从入门到精通的5个关键步骤
  • StructBERT中文句向量工具实战教程:构建本地FAQ语义搜索系统的完整流程
  • 小爱音箱音乐自由:5分钟解锁无限播放的终极指南
  • 2026年EPM选型避坑指南:17年实施经验总结的6个死亡陷阱 - 冠融盈科
  • 单个关键词优化工具如何与其他SEO策略结合使用_单个关键词优化工具能够帮助分析网站的核心竞争力吗
  • 从MNIST手写识别Demo入手:用TensorRT 8.5+VS2022体验GPU推理加速(Windows10环境)
  • Unity游戏翻译革命:XUnity.AutoTranslator完全指南
  • 路径动态加载详解
  • Phi-3-Mini-128K惊艳演示:连续追问‘为什么’7层后仍给出可验证技术依据
  • 游戏引擎和高频交易系统都不用new——读了libstdc++的monotonic_buffer_resource源码,找到了零碎片零系统调用的极速分配器
  • PixEz-flutter网络架构深度解析:如何构建免代理直连的稳定Pixiv客户端
  • VirtualBox与enspPro模拟器的高效部署指南
  • 边缘设备C++编译体积暴降63%?揭秘ARM64+ThinLTO+Profile-Guided Optimization三重奏
  • OFA图文蕴含推理系统应用场景:元宇宙空间图文语义对齐
  • 从ρ-θ累加器到梯度投票法——OpenCV霍夫变换三大算法源码全解析与交通标志检测实战
  • 配电网多目标动态无功优化 基于IEEE33节点配电网,以配电网网损最小 电压偏差最小以及光伏消...
  • 2026年10款高效降AIGC工具推荐:轻松降低论文AIGC率 - hacknews
  • WizQTClient多语言支持:如何为你的团队定制本地化版本
  • AI子宫伦理:体外胚胎训练生育模型丑闻
  • Vue3.0 + Vite项目实战:自动化生成dist资源包的zip压缩包
  • 显卡驱动清理实战:用DDU彻底告别驱动残留问题
  • 4步解决B站资源管理难题:BiliTools跨平台工具箱技术指南
  • DDrawCompat终极指南:让经典游戏在Windows 11上完美运行的兼容性解决方案