python项目实战09-AI智能伴侣(ai_partner_5-6)

1.功能扩充(ai_partner_5):加载指定的会话信息,高亮显示当前正在使用的会话。

(1).加载指定会话信息

python 复制代码
def load_session(session_name):
    try:
        if os.path.exists(f"sessions/{session_name}.json"):
            # 读取会话数据
            with open(f"sessions/{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.nature = session_data["nature"]
                st.session_state.current_session = session_name
    except Exception:
        st.error("加载会话失败!")

(2)实现了"当前选中项高亮"的功能

python 复制代码
# 三元运算符: 如果条件为真, 则返回第一个表达式的值; 否则, 返回第二个表达式的值 --> 语法: 值1 if 条件 else 值2
if st.button(session, width="stretch", icon="📄", key=f"load_{session}", type="primary" if session == st.session_state.current_session else "secondary"):
    load_session(session)
    st.rerun()
  • 这是一个 Python 三元运算符(行内条件表达式)。
  • 它拿当前遍历到的会话(session)和系统记录的"当前会话名"(st.session_state.current_session)作比较
  • 如果相等 (说明这是你正在聊的那个窗口):按钮类型设为 "primary"。在 Streamlit 中,这通常意味着实心、高亮颜色(如蓝色或红色),表示"激活状态"。
  • 如果不等 (说明这是别的旧窗口):按钮类型设为 "secondary"。这通常是空心或灰色的按钮,表示"普通状态"。

2.功能扩充(ai_partner_6):删除指定会话

python 复制代码
# 删除会话信息函数
def delete_session(session_name):
    try:
        if os.path.exists(f"sessions/{session_name}.json"):
            os.remove(f"sessions/{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("删除会话失败!")

with col2:
    if st.button("", width="stretch", icon="❌️", key=f"delete_{session}"):
        delete_session(session)
        st.rerun()

3.功能扩充(ai_partner_6):会话列表降序排序(最新会话显示在最上面)

python 复制代码
# 加载所有的会话列表信息
def load_sessions():
    session_list = []
    # 加载sessions目录下的文件
    if os.path.exists("sessions"):
        file_list = os.listdir("sessions")
        for filename in file_list:
            if filename.endswith(".json"):
                session_list.append(filename[:-5])
    session_list.sort(reverse=True) # 排序, 降序排列
    return session_list
相关推荐
FYKJ_20102 分钟前
springboot游泳馆管理系统79222-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·mysql·django·课程设计
艾莉丝努力练剑7 分钟前
【AI大模型接入SDK】C++ ChatSDK使用手册
开发语言·网络·c++·人工智能·学习·大模型
“AI国潮设计-小江”9 小时前
《Python+SDXL实战:用ControlNet精准控制“英歌舞翻糖吐司”构图,附批量生成脚本》
开发语言·人工智能·python·prompt·aigc
程序喵大人9 小时前
【C++入门】编译链接模型 - 01 一个 C++ 程序是怎样变成可执行文件的
开发语言·c++·编译链接模型
wenwen_chao9 小时前
Python学习与开发资源合集:实用技巧与工具推荐
python
for_ever_love__10 小时前
函数——参数、lambda、*args与作用域
python·函数·大模型开发·编程基础
东莞市云毅网络有限公司10 小时前
企业资料时效性判定:Last-Modified、正文日期与版本字段三路交叉
python·sqlite·自动化运维·geo·数据监测
Query*10 小时前
深入浅出LangGraph【一】_基础篇
python·ai·langchain
sunshine22 girl10 小时前
Java学习七 Java 项目实战1-项目创建和主页面搭建
java·开发语言·学习
XiaoMaqqqq11 小时前
市面上正规的IP驱动产业新场景新工具哪家强
运维·python·网络协议·tcp/ip