当前位置: 首页 > 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.xdnf.cn/news/1202761.html

相关文章:

  • 【Unity笔记】Unity Camera.cullingMask 使用指南:Layer 精准控制、XR 多视图与性能提升
  • [机缘参悟-236]:通过AI人工神经网络理解人的思维特征:惯性思维、路径依赖、适应性、不同场合不同言行、经验、概率、常规与特殊情形(正态分布)、环境适应性
  • 【linux】md5文件相似校验介绍与实战示例
  • 零基础学习性能测试第九章:全链路追踪-项目实操
  • 设计模式(十七)行为型:迭代器模式详解
  • react前端样式如何给元素设置高度自适应
  • debian系统分卷是不会影响系统启动速度?
  • 内存分页机制分析在海外VPS系统的测试流程
  • C语言:20250728学习(指针)
  • 如何给电脑换个ip地址?电脑换ip几种方法
  • 从零开始的云计算生活——第三十七天,跬步千里,ansible之playbook
  • linux_centos7安装jdk8_采用jdk安装包安装
  • 电脑出现英文字母开不了机怎么办 原因与修复方法
  • 【Java EE】多线程-初阶-线程的状态
  • 云原生作业(haproxy)
  • 设计模式十二:门面模式 (FaçadePattern)
  • C++11之lambda及包装器
  • java设计模式 -【责任链模式】
  • 【智慧物联网平台】编译jar环境 Linux 系统Maven 安装——仙盟创梦IDE
  • RK3568基于mpp实现硬解码(二):FFmpeg + mpp实现ipc摄像头图像解码
  • C++---初始化列表(initializer_list)
  • maven 打包报错 process terminated
  • 数据库原理
  • MCP资源管理深度实践:动态数据源集成方案
  • 终结集成乱局:模型上下文协议(MCP)如何重构AI工具生态?
  • 深入探索Linux:忙碌的车间“进程”间通信
  • 四、计算机组成原理——第6章:总线
  • 微信小程序——早餐小程序
  • LeetCode 85. 最大矩形
  • 「源力觉醒 创作者计划」_文心大模型4.5系列开源模型,意味着什么?对开发者、对行业生态有何影响?