Phi-3-mini-128k-instruct实战手册:Chainlit前端添加历史会话持久化功能
Phi-3-mini-128k-instruct实战手册Chainlit前端添加历史会话持久化功能1. 模型与部署概述Phi-3-Mini-128K-Instruct是一个38亿参数的轻量级开放模型采用Phi-3数据集训练专注于高质量和密集推理能力。该模型支持128K tokens的长上下文经过监督微调和直接偏好优化在常识理解、数学推理、编码等任务上表现出色。我们使用vLLM框架部署该模型并通过Chainlit构建交互式前端界面。本文将重点介绍如何为这个部署方案添加历史会话持久化功能让对话体验更加连贯。2. 基础环境准备2.1 验证模型部署在开始前请确保模型已成功部署。通过以下命令检查服务日志cat /root/workspace/llm.log成功部署后日志应显示模型加载完成和相关服务启动信息。2.2 Chainlit基础调用Chainlit是一个专为AI应用设计的Python框架可快速构建交互式界面。基础调用代码如下import chainlit as cl from vllm import LLM, SamplingParams cl.on_chat_start async def start_chat(): llm LLM(modelPhi-3-Mini-128K-Instruct) cl.user_session.set(llm, llm) cl.on_message async def main(message: cl.Message): llm cl.user_session.get(llm) sampling_params SamplingParams(temperature0.7, top_p0.9) response await llm.generate(message.content, sampling_params) await cl.Message(contentresponse).send()3. 历史会话持久化实现3.1 设计思路传统Chainlit对话默认不保存历史记录。我们将通过以下方案实现持久化使用SQLite数据库存储对话记录为每个会话创建唯一ID在消息处理前后自动读写数据库3.2 数据库模型设计创建chat_history.db数据库包含两个表import sqlite3 def init_db(): conn sqlite3.connect(chat_history.db) cursor conn.cursor() # 会话表 cursor.execute( CREATE TABLE IF NOT EXISTS sessions ( session_id TEXT PRIMARY KEY, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ) # 消息表 cursor.execute( CREATE TABLE IF NOT EXISTS messages ( id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT, role TEXT CHECK(role IN (user, assistant)), content TEXT, timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (session_id) REFERENCES sessions (session_id) ) ) conn.commit() conn.close()3.3 持久化功能集成修改Chainlit应用代码添加历史记录功能import uuid from datetime import datetime cl.on_chat_start async def start_chat(): # 初始化数据库 init_db() # 创建或恢复会话 session_id str(uuid.uuid4()) cl.user_session.set(session_id, session_id) # 保存新会话到数据库 conn sqlite3.connect(chat_history.db) cursor conn.cursor() cursor.execute(INSERT INTO sessions (session_id) VALUES (?), (session_id,)) conn.commit() conn.close() # 加载模型 llm LLM(modelPhi-3-Mini-128K-Instruct) cl.user_session.set(llm, llm) cl.on_message async def main(message: cl.Message): session_id cl.user_session.get(session_id) llm cl.user_session.get(llm) # 保存用户消息 save_message(session_id, user, message.content) # 生成回复 sampling_params SamplingParams(temperature0.7, top_p0.9) response await llm.generate(message.content, sampling_params) # 保存AI回复 save_message(session_id, assistant, response) await cl.Message(contentresponse).send() def save_message(session_id, role, content): conn sqlite3.connect(chat_history.db) cursor conn.cursor() cursor.execute( INSERT INTO messages (session_id, role, content) VALUES (?, ?, ?), (session_id, role, content) ) conn.commit() conn.close()4. 历史会话查看功能4.1 添加会话列表界面扩展前端界面显示历史会话cl.action_callback(view_history) async def on_action(action): conn sqlite3.connect(chat_history.db) cursor conn.cursor() # 获取所有会话 cursor.execute(SELECT session_id, created_at FROM sessions ORDER BY created_at DESC) sessions cursor.fetchall() # 构建UI元素 elements [] for session_id, created_at in sessions: elements.append(cl.Text(namesession_id, contentf会话 {session_id[:8]} - {created_at})) await cl.Message(content历史会话列表, elementselements).send() conn.close() cl.on_chat_start async def start_chat(): # ...原有代码... # 添加查看历史按钮 actions [cl.Action(nameview_history, valueview, label查看历史会话)] await cl.Message(content欢迎使用Phi-3对话系统, actionsactions).send()4.2 会话详情查看添加点击会话查看详细对话记录的功能cl.action_callback(load_session) async def load_session(action): session_id action.value conn sqlite3.connect(chat_history.db) cursor conn.cursor() # 获取会话消息 cursor.execute( SELECT role, content FROM messages WHERE session_id ? ORDER BY timestamp, (session_id,) ) messages cursor.fetchall() # 构建对话显示 for role, content in messages: await cl.Message( contentcontent, author用户 if role user else AI助手 ).send() conn.close()5. 部署与测试5.1 完整应用部署将上述代码整合为完整应用# app.py import chainlit as cl from vllm import LLM, SamplingParams import sqlite3 import uuid # 初始化数据库 def init_db(): # ...数据库初始化代码... # 保存消息 def save_message(session_id, role, content): # ...消息保存代码... cl.on_chat_start async def start_chat(): # ...会话初始化代码... cl.on_message async def main(message: cl.Message): # ...消息处理代码... cl.action_callback(view_history) async def on_action(action): # ...历史会话查看代码... if __name__ __main__: init_db() cl.run(app, host0.0.0.0, port8000)5.2 功能测试流程启动应用chainlit run app.py测试场景进行多轮对话验证消息是否保存关闭浏览器后重新打开检查历史会话是否保留测试同时多个会话的场景6. 总结与优化建议通过本文方案我们实现了Chainlit前端的历史会话持久化功能主要优势包括数据完整性SQLite确保对话记录不丢失会话隔离每个会话独立存储互不干扰易于扩展可添加更多元数据如对话标签、评分等进一步优化建议添加对话导出功能JSON/CSV格式实现基于关键词的会话搜索添加对话摘要生成功能考虑定期自动清理旧会话获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2414711.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!