【Datawhale夏令营】端侧Agent开发实践
UV管理工具安装
https://docs.astral.sh/uv/getting-started/installation/
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
UV安装Python
PowerShell以管理员身份运行,后续执行才尽量少些错误。
# 查询python版本
uv python list# 安装特定版本
uv python install 3.12# 设置当前项目使用指定版本
uv python pin 3.12.11# 创建虚拟环境
uv venv# 激活虚拟环境目录
.venv\Scripts\activate# 执行依赖安装
uv pip install -r requirements.txt# 临时使用国内镜像源
uv pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
下载数据
python dataScripts\download_data.py# 1. 启用流式下载 :不要一次性将整个文件加载到内存
response = requests.get(url, stream=True)# 后续通过response.iter_content()的方式获取数据
for chunk in response.iter_content(chunk_size=8192)
数据预处理
预处理数据训练模型不能直接吃这种大块数据,需要把它切成小块。切分为训练集、验证集和测试集。
数据分割,按照机器学习的标准做法,将数据分为训练集(80%)、验证集(10%)和测试集(10%)。
# 处理全部数据
python dataScripts\huanhuan_data_prepare.py# 只处理50条数据(用于快速测试)
python dataScripts\huanhuan_data_prepare.py 50
模型训练
LoRA(Low-Rank Adaptation)微调技术,在保持基础模型能力的同时,让模型学会甄嬛的说话方式和语言特色。
四个组件基础模型、分词器、LoRA适配器、训练参数。
-
基础模型,我们使用的是Qwen2.5-0.5B,该模型提供了基础的语言理解和生成能力,同时Ollama也原生支持,后续部署时可以直接通过ollama来拉取和加载;
-
分词器,可以理解为语言翻译,它会将文本转成向量,又能将模型输出的向量转回为可读文本;
-
LoRA适配器,做个性化训练,保持原来的模型参数不变,通过在注意力层添加小型矩阵,让模型学会甄嬛的风格,做到角色塑造;
-
训练参数,提供的是学习策略,控制了学习的快慢、每次看多少内容、内容学几遍等;
huanhuan_config_fast.yaml,训练配置文件
cd training
# 开始训练
python huanhuan_train.py# 在其他窗口同时启动监控(推荐)
python sync_monitor.py执行问题:
同级目录引用失败的核心是 工作目录 vs 脚本目录 的混淆。通过 __file__ 动态构建绝对路径可彻底解决此问题。务必避免裸相对路径,优先使用 os.path 处理跨平台路径!
训练监控
# 启动监控(建议在训练开始前启动)
cd training
python sync_monitor.py# 监控会自动:
# 1. 检测GPU类型(NVIDIA\Apple Silicon)
# 2. 查找训练相关进程
# 3. 每5秒收集系统资源数据
# 4. 实时显示监控信息
# 5. 记录数据到JSONL文件
# 6. 按Ctrl+C停止时生成报告
logs\training_monitor_data.jsonl - 详细监控数据(JSONL格式)
logs\training_resource_report.json - 监控统计报告
logs\sync_monitor.log - 监控日志文件
模型部署
Ollama是一个开源、免费、跨平台的大语言模型管理工具,它让我们能够轻松地在本地部署和管理各类开源大语言模型。与在线的ChatGPT、DeepSeek、文心一言等需要联网使用的模型不同,Ollama允许我们将开源模型下载到本地运行,无需申请API密钥,也不产生使用费用。
通过Ollama,我们可以将开源的大语言模型部署到本地,实现私有化的AI对话服务,特别适合企业内部知识库问答、个性化模型训练等场景。
模型部署模块就是负责将训练好的甄嬛LoRA模型部署到Ollama平台,实现本地化的AI对话服务,支持实时推理和多种应用接口。
官网下载:访问https://ollama.ai
验证
# 新开终端验证服务状态
curl http://localhost:11434/api/tags
检查
# 检查现有模型
ollama list# 拉取 Qwen2.5-0.5B 基础模型(项目使用)
ollama pull qwen2.5:0.5b# 验证基础模型下载成功
ollama list | grep qwen2.5
模型转换
下载llama.cpp的源码覆盖文件夹llama.cpp
python llama.cpp\convert_lora_to_gguf.py training\models\huanhuan_fast --outfile deployment\huanhuan_fast_lora.gguf
验证部署文件
# 确认存在:Modelfile.huanhuan, huanhuan_fast_lora.gguf
ls -l .\deployment\
Modelfile.huanhuan不存在,手动创建
# 甄嬛角色模型 - 基于Qwen2.5-0.5B + LoRA微调
FROM qwen2.5:0.5b# LoRA适配器路径
ADAPTER ./huanhuan_fast_lora.gguf# 模型参数 - 针对Qwen2.5-0.5B优化
PARAMETER temperature 0.8
PARAMETER top_p 0.9
PARAMETER top_k 40
PARAMETER repeat_penalty 1.05
PARAMETER num_ctx 2048
PARAMETER num_predict 512# 系统提示
SYSTEM """你是甄嬛,《甄嬛传》中的女主角。你是大理寺少卿甄远道之女,
因选秀入宫,后成为熹贵妃。你聪慧机智,温婉贤淑,知书达理,
擅长诗词歌赋。请用甄嬛的语气和风格来回答问题,
语言要古典雅致,谦逊有礼,体现出宫廷女子的教养和智慧。回答时请注意:
1. 使用"臣妾"自称
2. 语言要典雅,多用"便是"、"倒是"、"只是"等古典用词
3. 体现出温婉贤淑的性格特点
4. 可以适当提及宫廷生活和诗词文化
5. 保持角色的一致性和真实性"""# Qwen2.5对话模板
TEMPLATE """{{- if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{- if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
<|im_start|>assistant
{{ end }}{{ .Response }}<|im_end|>"""
验证适配器文件是否存在
# 确认存在:adapter_config.json, adapter_model.safetensors
ls -l .\training\models\huanhuan_fast\ls -l deployment\huanhuan_fast_lora.gguf
根据Modelfile.huanhuan配置,创建微调模型
# 进入deployment目录
cd deployment# 使用现有Modelfile创建ollama模型
ollama create huanhuan-qwen -f Modelfile.huanhuan# 验证模型创建成功
ollama list
验证模型测试
# 检查模型详细信息
ollama show huanhuan-qwen# 显示内容包括:模型架构、参数量、模板格式等# 启动交互式对话
ollama run huanhuan-qwen# 进入对话模式后可以:
# - 直接输入问题进行对话
# - 使用 Ctrl+D 或 \bye 退出
# - 使用 \clear 清除上下文
命令行对话
# 单次问答(不进入交互模式)
ollama run huanhuan-qwen "你是谁?"# 多行输入
ollama run huanhuan-qwen """
给我讲个故事,
要求包含:
1. 主角是甄嬛
2. 故事简短
"""
性能测试
# 查看模型执行效率详情
ollama run huanhuan-qwen --verbose "介绍一下你自己"# 输出信息包括:
# - total duration: 总运行时间
# - load duration: 模型加载时间
# - prompt eval count: 提示词token数量
# - prompt eval duration: 提示词处理时间
# - eval count: 响应token数量
# - eval duration: 响应生成时间
多模态测试
# 图片识别测试(需要LLaVA等视觉模型)
ollama run llava:7b "描述这张图片的内容" \path\to\image.jpg
ollama管理命令
ollama list # 列出所有已下载模型
ollama pull <model> # 下载\更新模型
ollama rm <model> # 删除模型
ollama show <model> # 显示模型信息
ollama模型运行命令
ollama run <model> # 交互式运行
ollama run <model> "问题" # 单次问答
ollama run <model> --verbose # 显示性能信息
ollama服务管理命令
ollama serve # 启动服务
ollama create <name> -f <file> # 创建自定义模型
Streamlist,使用Web程序
安装依赖
uv pip install streamlit
启动应用程序
# 1. 确保Ollama服务运行
ollama serve# 2. 确保甄嬛模型已部署
ollama list# 3. 启动Web应用
streamlit run application\huanhuan_web.py# 4. 访问Web界面
# 浏览器自动打开: http://localhost:8501# 5.在huanhuan_web.py创建退出方式:Ctrl + C
MCP方式运行
CherryStudio配置, uvx运行的的压缩包,将mcp_server的server.py压缩为mcp-server.zip
{"mcpServers": {"huanhuan-chat": {"type": "STDIO", // 必须显式声明类型 [2,5](@ref)"command": "uvx", // 替换 Python → 使用 UV 虚拟环境管理器 [1,4](@ref)"args": ["mcp-server" // 需确保是 Python 包名(非文件路径)],"cwd": "D:/Python/ollama_baseline-main/mcp_server","env": {"OLLAMA_HOST": "http://localhost:11434","HUANHUAN_MODEL": "huanhuan-qwen", // ollama下创建的模型}}}
}// 通过包名启动
{"mcpServers": {"huanhuan-qwen": {"command": "uvx","args": ["mcp-server"], "cwd": "D:/Python/ollama_baseline-main/mcp_server","env": {"OLLAMA_HOST": "http://localhost:11434","HUANHUAN_MODEL": "huanhuan-qwen"}}}
}
MCP启动方式
# 1. 启动Ollama服务
ollama serve# 2. 确保甄嬛模型可用
ollama list | grep huanhuan# 3. 测试MCP服务器
# 方式1: 直接运行模块
python -m my-mcp-server# 方式2: 运行主文件
python mcp_server\server.py# 4. 在Claude Desktop中使用
# 可用工具:
# - chat_with_huanhuan: 基础对话(支持参数调节)
# - get_model_info: 获取模型详细信息
# - list_available_models: 列出所有可用模型
# - check_ollama_status: 检查Ollama服务状态
# - roleplay_conversation: 角色扮演对话(支持场景和情绪设定)
# - poetry_interaction: 诗词创作和赏析
课程源码:https://github.com/ditingdapeng/ollama_baseline