Phi-3.5-mini-instruct实战教程:Chainlit自定义UI与历史会话持久化配置
1. 环境准备与快速部署
Phi-3.5-mini-instruct是一个轻量级的开放模型,支持128K令牌上下文长度。它基于高质量数据集构建,经过监督微调、近端策略优化和直接偏好优化等增强过程,具备精确的指令遵循能力和强大的安全措施。
1.1 系统要求
- 操作系统:Linux (推荐Ubuntu 20.04+)
- Python版本:3.8+
- GPU:至少16GB显存
- 内存:32GB+
1.2 安装依赖
pip install vllm chainlit1.3 部署Phi-3.5-mini-instruct
使用vLLM部署模型服务:
python -m vllm.entrypoints.api_server \ --model Phi-3.5-mini-instruct \ --tensor-parallel-size 1 \ --gpu-memory-utilization 0.9部署成功后,可以通过以下命令检查服务状态:
curl http://localhost:8000/health2. Chainlit基础配置
2.1 创建Chainlit应用
新建一个Python文件app.py,添加以下基础配置:
import chainlit as cl from openai import AsyncOpenAI client = AsyncOpenAI( base_url="http://localhost:8000/v1", api_key="token-abc123" ) @cl.on_chat_start async def on_chat_start(): await cl.Message(content="欢迎使用Phi-3.5-mini-instruct聊天助手!").send()2.2 运行Chainlit应用
chainlit run app.py -w访问http://localhost:8000即可看到基础聊天界面。
3. 自定义UI实现
3.1 添加侧边栏配置
在app.py中添加侧边栏配置:
@cl.set_chat_profiles async def chat_profile(): return [ cl.ChatProfile( name="通用助手", markdown_description="适用于一般问答场景" ), cl.ChatProfile( name="代码助手", markdown_description="专注于编程相关问题" ) ]3.2 自定义消息样式
@cl.on_message async def on_message(message: cl.Message): response = await client.chat.completions.create( model="Phi-3.5-mini-instruct", messages=[{"role": "user", "content": message.content}], temperature=0.7, ) msg = cl.Message(content="") await msg.send() # 流式输出 for chunk in response: if chunk.choices[0].delta.content: await msg.stream_token(chunk.choices[0].delta.content) await msg.update()4. 历史会话持久化配置
4.1 配置会话存储
from chainlit.storage import LocalStorage storage = LocalStorage() @cl.on_chat_start async def on_chat_start(): # 检查是否有历史会话 session_id = cl.user_session.get("id") history = storage.get(session_id) if history: for msg in history: await cl.Message(**msg).send() else: await cl.Message(content="欢迎使用Phi-3.5-mini-instruct聊天助手!").send()4.2 保存会话历史
@cl.on_message async def on_message(message: cl.Message): # 获取当前会话ID session_id = cl.user_session.get("id") # 获取历史消息 history = storage.get(session_id) or [] # 添加新消息 history.append({ "role": "user", "content": message.content }) # 获取模型回复 response = await client.chat.completions.create( model="Phi-3.5-mini-instruct", messages=history, temperature=0.7, ) # 处理回复 msg = cl.Message(content="") await msg.send() full_response = "" for chunk in response: if chunk.choices[0].delta.content: token = chunk.choices[0].delta.content full_response += token await msg.stream_token(token) await msg.update() # 保存完整对话 history.append({ "role": "assistant", "content": full_response }) storage.set(session_id, history)5. 进阶功能实现
5.1 文件上传处理
@cl.on_file_upload async def on_file_upload(files: List[cl.File]): for file in files: if file.type == "text/plain": content = file.content.decode("utf-8") await cl.Message(f"已上传文件: {file.name}\n内容预览: {content[:200]}...").send()5.2 自定义动作按钮
@cl.action_callback("clear_history") async def on_action(action: cl.Action): session_id = cl.user_session.get("id") storage.delete(session_id) await cl.Message(content="历史记录已清空").send() await action.remove() @cl.on_message async def on_message(message: cl.Message): actions = [ cl.Action(name="clear_history", value="clear", label="清空历史") ] await message.send(actions=actions)6. 总结
通过本教程,我们实现了:
- 基础部署:使用vLLM部署Phi-3.5-mini-instruct模型
- UI定制:配置Chainlit聊天界面,添加侧边栏和自定义消息样式
- 会话持久化:实现历史对话的本地存储和恢复功能
- 进阶功能:文件上传处理和自定义动作按钮
这些功能可以帮助开发者快速构建基于Phi-3.5-mini-instruct的交互式应用。在实际项目中,您还可以进一步扩展:
- 添加用户认证系统
- 实现多模态输入处理
- 集成更多第三方服务
- 优化存储方案(如使用数据库)
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。