LFM2.5-1.2B-Instruct实战指南:Gradio界面添加历史记录导出CSV功能改造
1. 项目背景与模型介绍
LFM2.5-1.2B-Instruct是一个1.2B参数量的轻量级指令微调大语言模型,特别适合在边缘设备或低资源服务器上部署运行。这个模型由Liquid AI和Unsloth团队联合开发,具有以下突出特点:
- 轻量高效:仅需2.5-3GB显存即可运行
- 多语言支持:支持中英等8种语言
- 长上下文:支持32K tokens的上下文长度
- 易部署:提供开箱即用的Transformers+Gradio解决方案
该模型非常适合用作嵌入式AI助手、轻量客服机器人等场景,也是Linux环境下入门大模型部署的首选方案。
2. 基础环境准备
2.1 部署结构概览
项目默认部署目录结构如下:
/root/LFM2.5-1.2B-Instruct/ ├── webui.py # Gradio WebUI主程序 ├── supervisor.conf # Supervisor配置备份 └── logs/ ├── webui.log # 标准输出日志 └── webui.err.log # 错误日志2.2 服务管理命令
使用Supervisor管理服务进程:
# 查看状态 supervisorctl status lfm25-1.2b # 重启服务 supervisorctl restart lfm25-1.2b # 停止服务 supervisorctl stop lfm25-1.2b # 启动服务 supervisorctl start lfm25-1.2b3. Gradio界面功能改造
3.1 原始界面分析
默认的Gradio界面提供了基础的对话功能,但缺少历史记录管理和导出能力。我们将通过以下改造增强其实用性:
- 添加对话历史记录功能
- 实现CSV格式导出
- 优化界面布局
3.2 代码改造步骤
3.2.1 导入所需库
首先在webui.py开头添加必要的库导入:
import csv from datetime import datetime import gradio as gr import pandas as pd from pathlib import Path3.2.2 添加历史记录存储
在原有代码中添加全局变量存储对话历史:
# 在全局变量区域添加 chat_history = [] output_dir = Path("chat_history") output_dir.mkdir(exist_ok=True)3.2.3 修改对话函数
改造原有的对话处理函数,添加历史记录功能:
def chat_fn(message, history): # 原有模型调用逻辑保持不变 response = model.generate(message) # 添加当前对话到历史记录 timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") chat_history.append({ "timestamp": timestamp, "user": message, "assistant": response }) return response3.2.4 添加导出功能
实现CSV导出功能:
def export_to_csv(): if not chat_history: return "没有可导出的对话历史" df = pd.DataFrame(chat_history) filename = output_dir / f"chat_history_{datetime.now().strftime('%Y%m%d_%H%M%S')}.csv" df.to_csv(filename, index=False, encoding='utf-8-sig') return f"对话历史已导出到: {filename}"3.2.5 界面布局改造
修改Gradio界面布局,添加导出按钮:
with gr.Blocks() as demo: with gr.Row(): with gr.Column(): chatbot = gr.Chatbot() msg = gr.Textbox(label="输入消息") btn = gr.Button("发送") with gr.Column(): clear_btn = gr.Button("清空历史") export_btn = gr.Button("导出CSV") output_msg = gr.Textbox(label="导出状态", interactive=False) btn.click(chat_fn, [msg, chatbot], [chatbot]) clear_btn.click(lambda: [], None, [chatbot]) export_btn.click(export_to_csv, None, [output_msg])4. 功能验证与测试
4.1 启动改造后的服务
修改完成后,重启服务使更改生效:
supervisorctl restart lfm25-1.2b4.2 测试流程
- 访问
http://localhost:7860 - 进行几次对话测试
- 点击"导出CSV"按钮
- 检查
chat_history目录下是否生成CSV文件 - 打开CSV文件验证内容完整性
4.3 预期输出
生成的CSV文件应包含以下列:
timestamp,user,assistant "2024-03-15 14:30:22","你好","你好!我是AI助手,有什么可以帮您的?" "2024-03-15 14:30:35","今天的天气怎么样","我无法获取实时天气信息,建议查看天气预报应用。"5. 进阶优化建议
5.1 自动保存机制
可以添加定时自动保存功能,防止意外丢失对话记录:
import threading import time def auto_save(): while True: time.sleep(300) # 每5分钟自动保存 if chat_history: export_to_csv() # 在demo.launch()前启动自动保存线程 threading.Thread(target=auto_save, daemon=True).start()5.2 历史记录查看
添加历史记录查看面板:
def load_history(): files = sorted(output_dir.glob("*.csv"), reverse=True) return "\n".join(f.name for f in files[:5]) with gr.Blocks() as demo: # ...原有界面代码... with gr.Accordion("历史记录管理"): history_files = gr.Textbox(label="最近记录文件", interactive=False) refresh_btn = gr.Button("刷新列表") refresh_btn.click(load_history, None, [history_files]) demo.load(load_history, None, [history_files])5.3 多格式导出
支持JSON和TXT格式导出:
def export_history(format_type): if not chat_history: return "没有可导出的对话历史" timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") if format_type == "CSV": filename = output_dir / f"chat_history_{timestamp}.csv" pd.DataFrame(chat_history).to_csv(filename, index=False) elif format_type == "JSON": filename = output_dir / f"chat_history_{timestamp}.json" pd.DataFrame(chat_history).to_json(filename, force_ascii=False, indent=2) else: # TXT filename = output_dir / f"chat_history_{timestamp}.txt" with open(filename, "w", encoding="utf-8") as f: for item in chat_history: f.write(f"[{item['timestamp']}] 用户: {item['user']}\n") f.write(f"[{item['timestamp']}] AI: {item['assistant']}\n\n") return f"对话历史已导出为{format_type}: {filename}"6. 总结
通过本次改造,我们为LFM2.5-1.2B-Instruct的Gradio界面添加了实用的历史记录管理和导出功能:
- 对话历史存储:完整记录所有对话内容
- 多格式导出:支持CSV、JSON和TXT格式
- 界面优化:添加了导出按钮和历史记录管理面板
- 自动保存:防止意外丢失重要对话
这些改进显著提升了模型的实用性和用户体验,特别适合需要记录对话内容的客服、咨询等场景。改造后的代码仍然保持轻量级特性,不会显著增加资源消耗。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。