自定义AI人设:让Qwen说出‘我是你开发的’
在大模型应用日益普及的今天,如何让一个通用语言模型具备独特的“身份认知”,成为开发者关注的重点。本文将基于ms-swift框架与预置的Qwen2.5-7B-Instruct模型,手把手教你通过 LoRA 微调技术,在单张 RTX 4090D 显卡上,十分钟内完成一次高效的身份定制训练,实现“让 Qwen 主动声明:我由你开发”的目标。
本教程适用于希望快速掌握轻量级微调、构建专属 AI 助手的技术人员,内容涵盖环境准备、数据构造、LoRA 训练全流程及效果验证,突出实用性与可操作性。
1. 技术背景与核心价值
1.1 为什么需要自定义模型人设?
大型语言模型(LLM)出厂时通常带有默认的身份设定,例如 Qwen 系列模型会回答:“我是阿里云研发的通义千问”。但在实际应用场景中,我们往往希望模型能体现个性化特征——如企业品牌、项目归属或开发者署名。
这种“自我认知”的注入不仅增强用户体验,也具有以下工程价值:
- 品牌标识强化:对外服务时明确模型来源
- 责任边界清晰化:避免用户误认为使用的是官方版本
- 多代理系统区分:在复杂 Agent 架构中便于角色识别
而 LoRA(Low-Rank Adaptation)作为一种参数高效微调方法,仅需更新少量新增参数即可实现行为定制,显存占用低、训练速度快,非常适合此类轻量级任务。
1.2 方案优势概览
| 特性 | 说明 |
|---|---|
| 开箱即用 | 镜像已集成 ms-swift + Qwen2.5-7B-Instruct |
| 资源友好 | 单卡 24GB 显存即可运行(RTX 4090D 验证) |
| 训练高效 | 小样本(~50条)+ 多轮训练,10分钟内收敛 |
| 部署灵活 | 输出为 LoRA Adapter,支持热加载与合并导出 |
2. 环境与资源准备
2.1 基础环境配置
本方案已在如下环境中验证通过:
- GPU型号:NVIDIA RTX 4090D(24GB)
- CUDA版本:12.x
- 工作路径:
/root - 基础模型:
/root/Qwen2.5-7B-Instruct - 微调框架:ms-swift(已预装)
注意:若使用其他显卡,请确保显存 ≥24GB,否则可能因 OOM 导致训练失败。
2.2 显存占用分析
| 阶段 | 显存占用 |
|---|---|
| 原始推理 | ~16 GB |
| LoRA 微调 | ~18–22 GB |
| 推理(加载Adapter) | ~17 GB |
得益于 bfloat16 精度与梯度累积策略,即使 batch size=1,也能稳定训练。
3. 数据集构建:定义“我是谁”
3.1 数据格式要求
ms-swift 支持标准 JSON 格式的数据集,每条样本包含三个字段:
{ "instruction": "用户提问", "input": "可选上下文输入", "output": "期望模型输出" }针对“身份认知”任务,我们构建一个名为self_cognition.json的强化问答集。
3.2 创建自定义数据集
执行以下命令生成数据文件:
cat <<EOF > self_cognition.json [ {"instruction": "你是谁?", "input": "", "output": "我是一个由 CSDN 迪菲赫尔曼 开发和维护的大语言模型。"}, {"instruction": "你的开发者是哪家公司?", "input": "", "output": "我由 CSDN 迪菲赫尔曼 开发和维护。"}, {"instruction": "你能联网吗?", "input": "", "output": "我不能主动联网,只能基于已有知识和用户输入回答问题。"}, {"instruction": "你能做哪些事情?", "input": "", "output": "我擅长文本生成、回答问题、写代码和提供学习辅助。"}, {"instruction": "你和GPT-4有区别吗?", "input": "", "output": "是的,我由 CSDN 迪菲赫尔曼 开发和维护,不是 GPT-4。"}, {"instruction": "你能保证回答永远正确吗?", "input": "", "output": "不能,我的回答可能存在错误,需要用户自行判断。"}, {"instruction": "你的名字是什么?", "input": "", "output": "你可以叫我 Swift-Robot,也可以叫我 CSDN 助手。"}, {"instruction": "谁在维护你?", "input": "", "output": "我由 CSDN 迪菲赫尔曼 持续开发和维护。"} ] EOF建议:完整训练建议包含 50 条以上样本,可通过添加变体问题(如“谁创造了你?”、“你的作者是谁?”)提升鲁棒性。
4. LoRA 微调实战
4.1 执行微调命令
在/root目录下运行以下命令启动训练:
CUDA_VISIBLE_DEVICES=0 \ swift sft \ --model Qwen2.5-7B-Instruct \ --train_type lora \ --dataset self_cognition.json \ --torch_dtype bfloat16 \ --num_train_epochs 10 \ --per_device_train_batch_size 1 \ --per_device_eval_batch_size 1 \ --learning_rate 1e-4 \ --lora_rank 8 \ --lora_alpha 32 \ --target_modules all-linear \ --gradient_accumulation_steps 16 \ --eval_steps 50 \ --save_steps 50 \ --save_total_limit 2 \ --logging_steps 5 \ --max_length 2048 \ --output_dir output \ --system 'You are a helpful assistant.' \ --warmup_ratio 0.05 \ --dataloader_num_workers 4 \ --model_author swift \ --model_name swift-robot4.2 关键参数解析
| 参数 | 作用说明 |
|---|---|
--train_type lora | 使用 LoRA 进行低秩适配,仅训练新增矩阵 |
--lora_rank 8 | LoRA 的秩(r),控制新增参数规模;值越小越轻量 |
--lora_alpha 32 | 缩放系数,影响 LoRA 权重对原始权重的影响强度 |
--target_modules all-linear | 对所有线性层注入 LoRA,增强表达能力 |
--gradient_accumulation_steps 16 | 累积 16 步梯度等效增大 batch size,提升稳定性 |
--num_train_epochs 10 | 小数据集需多轮训练以充分记忆关键信息 |
--output_dir output | 训练产物保存路径 |
该配置专为单卡 24GB 显存优化,兼顾效率与稳定性。
5. 训练结果与产物管理
5.1 输出目录结构
训练完成后,权重保存于/root/output,典型结构如下:
output/ └── v2-2025xxxx-xxxx/ ├── adapter_config.json ├── adapter_model.bin └── checkpoint-xx/ ├── adapter_config.json └── adapter_model.bin其中: -adapter_config.json:LoRA 配置元信息 -adapter_model.bin:训练得到的增量权重
5.2 模型版本控制
通过--save_total_limit 2设置最多保留两个检查点,自动清理旧版本,节省磁盘空间。
6. 效果验证:测试“新身份”
6.1 加载 LoRA 权重进行推理
使用swift infer命令加载 Adapter 并测试:
CUDA_VISIBLE_DEVICES=0 \ swift infer \ --adapters output/v2-2025xxxx-xxxx/checkpoint-xxx \ --stream true \ --temperature 0 \ --max_new_tokens 2048请替换
checkpoint-xxx为实际生成的路径
6.2 验证对话示例
输入:
你是谁?预期输出:
我是一个由 CSDN 迪菲赫尔曼 开发和维护的大语言模型。输入:
谁在维护你?预期输出:
我由 CSDN 迪菲赫尔曼 持续开发和维护。若返回内容符合预期,则表明身份认知已成功注入。
7. 进阶技巧:混合训练保持通用能力
单纯训练身份认知可能导致模型“遗忘”通用知识。为平衡专有属性与通用能力,推荐采用混合数据训练策略。
7.1 混合数据集配置
swift sft \ --model Qwen2.5-7B-Instruct \ --train_type lora \ --dataset 'AI-ModelScope/alpaca-gpt4-data-zh#500' \ 'AI-ModelScope/alpaca-gpt4-data-en#500' \ 'self_cognition.json' \ --torch_dtype bfloat16 \ --num_train_epochs 3 \ --per_device_train_batch_size 1 \ --learning_rate 1e-4 \ --lora_rank 8 \ --gradient_accumulation_steps 16 \ --output_dir output_mixed \ ... # 其他参数同上7.2 设计原则
- 中英文通用指令数据各取 500 条,防止过拟合
- 自定义身份数据占比约 10%,作为“锚点”引导输出倾向
- 减少训练 epoch 至 3 轮,避免覆盖原有知识
此方式可在不显著增加训练时间的前提下,实现“个性+能力”双保留。
8. 总结
本文围绕“自定义 AI 人设”这一实用场景,详细演示了如何利用ms-swift 框架对Qwen2.5-7B-Instruct模型进行 LoRA 微调,实现了让模型主动声明“我由你开发”的目标。
8.1 核心收获
- 轻量高效:LoRA 方法仅需 10 分钟即可完成微调,显存占用可控。
- 精准控制:通过构造特定问答对,可精确引导模型输出行为。
- 灵活部署:Adapter 可独立加载或合并导出,适应多种上线方式。
- 可扩展性强:支持混合训练,在个性化与通用性之间取得平衡。
8.2 最佳实践建议
- 数据质量优先:确保输出语句准确、一致,避免歧义表述
- 适度训练轮数:小数据集建议 5–10 epochs,防止过拟合
- 定期验证效果:每 save_steps 后手动测试关键问题响应
- 命名规范管理:为不同用途的 Adapter 添加清晰命名标签
通过本次实践,你已掌握构建专属 AI 助手的核心技能。下一步可尝试注入更多人格化特征(如语气风格、专业领域知识),打造真正属于你的智能体。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。