当前位置: 首页 > news >正文

【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配置

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

http://www.lryc.cn/news/602263.html

相关文章:

  • CodeBuddy的安装教程
  • JAVA东郊到家按摩服务同款同城家政服务按摩私教茶艺师服务系统小程序+公众号+APP+H5
  • 基于BEKK-GARCH模型的参数估计、最大似然估计以及参数标准误估计的MATLAB实现
  • openlayer根据不同的状态显示不同的图层颜色
  • Fortran实现 3维反距离加权(IDW)插值算法
  • 初识 docker [下] 项目部署
  • ETH 交易流程深度技术详解
  • 二、Linux文本处理与文件操作核心命令
  • 从0开始学习R语言--Day60--EM插补法
  • git stash apply 冲突合并方法解决
  • Kafka 3.9.1的KRaft模式部署
  • linux系统----Ansible中的playbook简单应用
  • 从零开始的云计算生活——第三十七天,跬步千里,ansible之playbook
  • 【Blender小技巧】Blender使用多边形建形工具创建多边形模型,挤出面,模型创建修改编辑UV贴图
  • 【第四章:大模型(LLM)】01.神经网络中的 NLP-(2)Seq2Seq 原理及代码解析
  • 从0到500账号管理:亚矩阵云手机多开组队与虚拟定位实战指南
  • 【归并排序】排序数组(medium)
  • Rust/Tauri 优秀开源项目推荐
  • C/C++ 调用lua脚本,lua脚本调用另一个lua脚本
  • 最新的前端技术和趋势(2025)
  • Maven中的bom和父依赖
  • Nginx HTTP 反向代理负载均衡实验
  • YOLO11 改进、魔改|低分辨率自注意力机制LRSA ,提取全局上下文建模与局部细节,提升小目标、密集小目标的检测能力
  • 免费 SSL 证书申请简明教程,让网站实现 HTTPS 访问
  • ADAS测试:如何用自动化手段提升VV效率
  • 【CDA干货】金融超市电商App经营数据分析案例
  • unbuntn 22.04 coreutils文件系统故障
  • GaussDB as的用法
  • 亚马逊广告关键词优化:如何精准定位目标客户
  • MyBatis中#{}与${}的实战避坑指南