Phi-4-mini-reasoning Chainlit前端定制:添加历史记录与多会话管理功能
Phi-4-mini-reasoning Chainlit前端定制添加历史记录与多会话管理功能1. 项目背景与目标Phi-4-mini-reasoning是一个基于合成数据构建的轻量级开源模型专注于高质量、密集推理的数据处理。该模型支持128K令牌的上下文长度特别适合需要复杂推理的应用场景。在实际使用中我们发现通过Chainlit构建的基础前端界面存在两个主要限制对话历史无法保存每次刷新页面后之前的对话记录就会丢失无法同时管理多个独立的对话会话本文将详细介绍如何通过定制Chainlit前端实现以下功能增强完整的对话历史记录功能多会话管理界面本地存储的会话持久化2. 环境准备与基础验证2.1 确认模型服务状态在开始前端定制前首先需要确认Phi-4-mini-reasoning模型服务已正常部署。可以通过以下命令检查服务日志cat /root/workspace/llm.log当看到模型加载完成的日志信息后表示服务已就绪。2.2 基础Chainlit调用验证启动基础Chainlit前端界面进行简单的提问测试确保模型能正常响应import chainlit as cl cl.on_message async def main(message: str): # 这里添加调用Phi-4-mini-reasoning模型的代码 response 模型响应内容 await cl.Message(contentresponse).send()3. 历史记录功能实现3.1 对话历史存储方案我们将使用Chainlit提供的会话状态管理功能结合本地存储实现历史记录持久化from typing import Dict, List import json cl.on_chat_start async def init_chat(): # 初始化对话历史存储 cl.user_session.set(history, []) cl.on_message async def handle_message(message: str): # 获取当前历史记录 history cl.user_session.get(history) # 添加新消息到历史 history.append({role: user, content: message}) # 调用模型获取响应 response await get_model_response(message, history) # 保存模型响应到历史 history.append({role: assistant, content: response}) cl.user_session.set(history, history) # 发送响应 await cl.Message(contentresponse).send()3.2 历史记录界面展示在Chainlit前端添加历史记录侧边栏展示完整的对话历史cl.on_chat_start async def show_history_ui(): # 创建历史记录侧边栏 sidebar cl.Sidebar(title对话历史) # 添加历史记录查看按钮 sidebar.add_button( name查看历史, callbackdisplay_history ) async def display_history(): history cl.user_session.get(history, []) # 在侧边栏显示历史记录 elements [] for i, item in enumerate(history): elements.append(cl.Text( namef记录{i1}, contentf{item[role]}: {item[content]} )) await cl.Sidebar(elementselements).send()4. 多会话管理实现4.1 会话状态管理使用Chainlit的用户会话功能为每个独立会话维护单独的状态cl.on_chat_start async def init_multisession(): # 初始化会话管理器 if not cl.user_session.get(session_manager): cl.user_session.set(session_manager, { current_session: default, sessions: { default: { history: [], created_at: datetime.now() } } })4.2 会话切换功能实现会话创建、切换和删除的完整功能cl.on_chat_start async def setup_session_controls(): # 添加会话管理UI元素 controls cl.Column() # 新建会话按钮 controls.add_button( name新建会话, callbackcreate_new_session ) # 会话选择下拉框 sessions cl.user_session.get(session_manager)[sessions] controls.add_select( namesession_selector, optionslist(sessions.keys()), callbackswitch_session ) await controls.send() async def create_new_session(): session_id fsession_{len(sessions)1} session_manager cl.user_session.get(session_manager) session_manager[sessions][session_id] { history: [], created_at: datetime.now() } session_manager[current_session] session_id cl.user_session.set(session_manager, session_manager) # 刷新UI await refresh_session_ui()5. 功能整合与优化5.1 完整代码结构将所有功能整合到一个完整的Chainlit应用中import chainlit as cl from datetime import datetime from typing import Dict, List cl.on_chat_start async def init_app(): await init_chat() await init_multisession() await show_history_ui() await setup_session_controls() cl.on_message async def main(message: str): # 获取当前会话 session_manager cl.user_session.get(session_manager) current_session session_manager[current_session] session_data session_manager[sessions][current_session] # 处理消息并更新历史 session_data[history].append({role: user, content: message}) response await get_model_response(message, session_data[history]) session_data[history].append({role: assistant, content: response}) # 发送响应 await cl.Message(contentresponse).send() # 更新UI await refresh_session_ui()5.2 本地存储持久化将会话数据保存到本地文件实现持久化存储import os import pickle SESSION_FILE sessions.pkl def save_sessions(sessions: Dict): with open(SESSION_FILE, wb) as f: pickle.dump(sessions, f) def load_sessions() - Dict: if os.path.exists(SESSION_FILE): with open(SESSION_FILE, rb) as f: return pickle.load(f) return {} cl.on_chat_start async def load_persisted_sessions(): sessions load_sessions() if sessions: cl.user_session.set(session_manager, sessions)6. 总结与效果展示通过本文的定制开发我们为Phi-4-mini-reasoning的Chainlit前端添加了两个重要功能完整的对话历史记录所有对话内容自动保存可通过侧边栏随时查看历史记录支持历史记录的持久化存储多会话管理可创建多个独立对话会话支持会话间的快速切换每个会话维护独立的历史记录这些功能显著提升了用户体验特别适合需要同时处理多个复杂对话场景的用户。开发者可以基于此基础进一步扩展更多定制功能如会话标签、搜索过滤等。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2496381.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!