Typography

良的博客


  • Home
  • Archive
  • Categories
  • Tags
  • 关于我
  •   

© 2026 良

Theme Typography by Makito

Proudly published with Hexo

本地部署 Qwen2.5-1.5B 小模型:OpenClaw 智能助手集成全攻略

Posted at 2026-03-16 VibeCoding  OpenClaw AI助手 Qwen2.5 Ollama 模型微调 本地部署 

本地部署 Qwen2.5-1.5B 小模型:OpenClaw 智能助手集成全攻略

2026年3月16日 · 作者:尤里

引言

在 AI 助手日益普及的今天,大多数人都依赖云端大模型(如 GPT、Claude、DeepSeek)来处理日常任务。然而,云端服务存在隐私泄露风险、网络依赖以及 API 费用等问题。有没有一种方案,既能享受 AI 助手的便利,又能保护隐私、降低成本?

答案是:本地部署小模型。

本文将详细介绍如何在个人电脑(Windows 11)上部署 Qwen2.5-1.5B 小模型,并将其集成到 OpenClaw 智能助手系统中。我们将涵盖从模型选择、一键部署、OpenClaw 集成到模型微调的完整流程。

硬件要求与选型

我的配置(实测可行)

  • 操作系统:Windows 11 Pro 64位
  • CPU:Intel Core i7-8565U(4核8线程,1.8GHz)
  • 内存:24GB DDR4
  • 存储:1TB NVMe SSD
  • GPU:无独立显卡(纯 CPU 推理)

为什么选择 Qwen2.5-1.5B?

模型 参数量 内存占用 推理速度 中文能力 开源协议
Qwen2.5-1.5B 1.5B 1.2GB 5-10 tokens/秒 ⭐⭐⭐⭐⭐ Apache 2.0
Phi-2 2.7B 1.8GB 4-8 tokens/秒 ⭐⭐⭐⭐ MIT
Gemma-2B 2B 1.5GB 6-12 tokens/秒 ⭐⭐⭐ Gemma License

选择理由:

  1. 优秀的性价比:1.5B 参数在速度和效果间取得平衡
  2. 原生中文优势:阿里巴巴出品,中文训练数据丰富
  3. 量化支持完善:GGUF 格式成熟,工具链完整
  4. 开源友好:Apache 2.0 协议,可商用可修改

部署方案对比

方案一:Ollama(推荐)

优点:

  • 一键安装,无需编译
  • 自动模型管理
  • REST API 即开即用
  • 支持模型热切换

缺点:

  • 自定义选项有限
  • Windows 版本性能稍逊

方案二:llama.cpp

优点:

  • 极致性能优化
  • 灵活配置参数
  • 支持多种量化格式
  • 内存控制精细

缺点:

  • 需要手动下载模型
  • 配置相对复杂

最终选择:Ollama

考虑到易用性和快速集成,我们选择 Ollama 作为部署工具。

一键安装脚本(PowerShell)

以下脚本针对 Windows 11 和 i7-8565U CPU 优化,实现全自动安装:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# ============================================
# Ollama + Qwen2.5-1.5B 一键安装脚本
# 适用于 Windows 11,针对 i7-8565U 优化
# ============================================

Write-Host "🚀 开始安装本地小模型..." -ForegroundColor Cyan
Write-Host "📊 你的配置:i7-8565U + 24GB内存" -ForegroundColor Yellow
Write-Host "🎯 推荐模型:Qwen2.5-1.5B" -ForegroundColor Green

# 1. 检查Ollama是否已安装
Write-Host "`n[1/5] 检查Ollama安装状态..." -ForegroundColor Magenta
$ollamaInstalled = Get-Command ollama -ErrorAction SilentlyContinue
if (-not $ollamaInstalled) {
Write-Host " 未检测到Ollama,开始安装..." -ForegroundColor Yellow

# 使用winget安装(需要管理员权限)
try {
Start-Process winget -ArgumentList "install Ollama.Ollama --silent" -Wait -NoNewWindow
Write-Host " ✅ Ollama 安装成功" -ForegroundColor Green
} catch {
Write-Host " ❌ 安装失败,请手动运行:winget install Ollama.Ollama" -ForegroundColor Red
exit 1
}
} else {
Write-Host " ✅ Ollama 已安装" -ForegroundColor Green
}

# 2. 启动Ollama服务(如果未运行)
Write-Host "`n[2/5] 启动Ollama服务..." -ForegroundColor Magenta
$ollamaRunning = Get-Process ollama -ErrorAction SilentlyContinue
if (-not $ollamaRunning) {
Write-Host " 启动Ollama后台服务..." -ForegroundColor Yellow
Start-Process ollama -ArgumentList "serve" -WindowStyle Hidden
Start-Sleep -Seconds 5 # 等待服务启动
}

# 3. 拉取模型
Write-Host "`n[3/5] 拉取 Qwen2.5-1.5B 模型..." -ForegroundColor Magenta
Write-Host " 这需要几分钟,取决于网速(约800MB)" -ForegroundColor Yellow
ollama pull qwen2.5:1.5b
if ($LASTEXITCODE -eq 0) {
Write-Host " ✅ 模型下载完成" -ForegroundColor Green
} else {
Write-Host " ❌ 模型下载失败" -ForegroundColor Red
exit 1
}

# 4. 创建优化运行脚本
Write-Host "`n[4/5] 创建优化运行脚本..." -ForegroundColor Magenta
$runScript = @'
# Qwen2.5-1.5B 优化运行配置
# 针对 i7-8565U 4核8线程优化

# 停止现有ollama服务
ollama stop

# 设置环境变量优化(CPU线程数)
$env:OLLAMA_NUM_PARALLEL = "6" # 用6个线程,留2个给系统
$env:OLLAMA_NUM_GPU = "0" # 纯CPU模式

# 启动服务并运行模型
ollama serve &
Start-Sleep -Seconds 3
ollama run qwen2.5:1.5b
'@

$runScript | Out-File -FilePath "run-qwen1.5b.ps1" -Encoding UTF8
Write-Host " ✅ 运行脚本已创建:run-qwen1.5b.ps1" -ForegroundColor Green

# 5. 测试API连接
Write-Host "`n[5/5] 测试API连接..." -ForegroundColor Magenta
Write-Host " 等待10秒让服务稳定..." -ForegroundColor Yellow
Start-Sleep -Seconds 10

$testResult = try {
Invoke-RestMethod -Uri "http://localhost:11434/api/tags" -Method Get -TimeoutSec 5
$true
} catch {
$false
}

if ($testResult) {
Write-Host "`n🎉 安装成功!" -ForegroundColor Green
Write-Host "========================================" -ForegroundColor Cyan
Write-Host "API 地址: http://localhost:11434/v1" -ForegroundColor Yellow
Write-Host "模型名称: qwen2.5:1.5b" -ForegroundColor Yellow
Write-Host "测试命令: ollama run qwen2.5:1.5b" -ForegroundColor Yellow
Write-Host "========================================" -ForegroundColor Cyan
} else {
Write-Host " ⚠️ API测试失败,但模型已安装" -ForegroundColor Yellow
Write-Host " 手动测试:ollama run qwen2.5:1.5b" -ForegroundColor Yellow
}

# 6. 生成OpenClaw配置
Write-Host "`n📋 OpenClaw 生活助手配置:" -ForegroundColor Cyan
$config = @'
{
"agents": {
"life-assistant": {
"model": "local-qwen",
"providers": {
"local-qwen": {
"type": "openai",
"baseUrl": "http://localhost:11434/v1",
"apiKey": "not-needed",
"defaultModel": "qwen2.5:1.5b"
}
}
}
}
}
'@

Write-Host $config -ForegroundColor Gray
$config | Out-File -FilePath "openclaw-local-config.json" -Encoding UTF8
Write-Host " ✅ 配置已保存到:openclaw-local-config.json" -ForegroundColor Green

Write-Host "`n🚀 使用方法:" -ForegroundColor Cyan
Write-Host "1. 运行模型: .\run-qwen1.5b.ps1" -ForegroundColor Yellow
Write-Host "2. 测试对话: ollama run qwen2.5:1.5b" -ForegroundColor Yellow
Write-Host "3. 配置OpenClaw: 复制上面的JSON到配置" -ForegroundColor Yellow

脚本使用方法

  1. 将上述脚本保存为 install-llm-1.5b.ps1
  2. 右键点击文件,选择”使用 PowerShell 运行”
  3. 按提示完成安装

常见问题解决

Q:脚本提示权限不足?

1
2
3
4
# 以管理员身份运行 PowerShell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# 重新运行脚本
.\install-llm-1.5b.ps1

Q:模型下载太慢?

1
2
3
# 使用镜像源(中国大陆用户)
$env:OLLAMA_HOST = "https://mirror.ghproxy.com/https://ollama.com"
ollama pull qwen2.5:1.5b

Q:内存不足?

1
2
# 使用更小的量化版本
ollama pull qwen2.5:1.5b:q4_0 # 1.0GB 内存占用

OpenClaw 集成配置

架构设计

我们的目标是实现 双模型路由策略:

  • 简单日常任务 → 本地 Qwen2.5-1.5B
  • 复杂推理任务 → 云端 DeepSeek-v3.2

配置步骤

1. 修改 OpenClaw 配置文件

打开 openclaw.json,添加以下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{
"agents": {
"defaults": {
"model": "deepseek-chat",
"providers": {
"deepseek-chat": {
"type": "openai",
"baseUrl": "https://api.ofoxai.com/v1",
"apiKey": "${DEEPSEEK_API_KEY}"
},
"local-qwen": {
"type": "openai",
"baseUrl": "http://localhost:11434/v1",
"apiKey": "not-needed",
"defaultModel": "qwen2.5:1.5b"
}
}
},
"life-assistant": {
"model": "local-qwen",
"telegram": {
"enabled": true,
"token": "${TELEGRAM_BOT_TOKEN}",
"userId": "TELEGRAM_USER_ID"
}
},
"work-agent": {
"model": "deepseek-chat"
},
"study-agent": {
"model": "deepseek-chat"
}
}
}

2. 创建智能路由策略

在生活助手技能中实现任务分类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// life-assistant-skill.js
const isSimpleTask = (message) => {
const simpleTasks = [
/提醒我.*/,
/今天.*天气/,
/设置.*闹钟/,
/查询.*时间/,
/简单.*分类/,
/备忘.*/
];

return simpleTasks.some(regex => regex.test(message));
};

module.exports = {
handleMessage: async (message, context) => {
if (isSimpleTask(message.text)) {
// 使用本地模型
const response = await callLocalModel(message.text);
return response;
} else {
// 使用云端模型
const response = await callCloudModel(message.text);
return response;
}
}
};

3. 环境变量配置

创建 .env 文件:

1
2
3
4
5
6
7
8
9
10
# 模型服务
LOCAL_LLM_URL=http://localhost:11434/v1
LOCAL_MODEL=qwen2.5:1.5b

# Telegram Bot
TELEGRAM_BOT_TOKEN=your_bot_token_here
TELEGRAM_USER_ID=TELEGRAM_USER_ID

# 云端模型
DEEPSEEK_API_KEY=your_deepseek_api_key

测试集成效果

测试场景 1:简单任务(本地模型)

1
2
3
用户:提醒我下午3点开会
生活助手:✅ 已设置提醒:今天下午3点开会
响应时间:1.8秒

测试场景 2:复杂任务(云端模型)

1
2
3
用户:帮我分析这段代码的时间复杂度
生活助手:这段代码使用双层循环,时间复杂度为O(n²)...
响应时间:2.3秒

模型微调基础

为什么需要微调?

预训练模型虽然能力强大,但可能不适合特定领域或任务。微调可以:

  1. 适应领域术语:让模型理解专业词汇
  2. 调整回答风格:符合个人偏好
  3. 纠正错误倾向:减少胡言乱语
  4. 提升特定任务准确率:从70%到90%

微调方法对比

方法 参数量 资源需求 效果 适用场景
全参数微调 全部 高(GPU显存>24GB) 最好 资源充足,追求极致
LoRA 0.1%-1% 中(GPU显存8-16GB) 优秀 资源有限,性价比高
QLoRA 0.1%-1% 低(GPU显存<8GB) 良好 低资源环境
Adapter 1%-5% 中 良好 模块化设计

LoRA 微调实战

1. 数据准备

1
2
3
4
# dataset.jsonl
{"instruction": "提醒我下午开会", "output": "✅ 已设置提醒:今天下午3点开会"}
{"instruction": "今天天气怎么样", "output": "当前天气:晴,25°C,建议带伞"}
{"instruction": "设置明天8点闹钟", "output": "⏰ 闹钟已设置:明天早上8点"}

2. 微调脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import LoraConfig, get_peft_model
import torch

# 加载基础模型
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen2.5-1.5B-Instruct",
torch_dtype=torch.float16,
device_map="auto"
)

# 配置 LoRA
lora_config = LoraConfig(
r=8, # 秩
lora_alpha=16, # 缩放因子
target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
lora_dropout=0.1,
bias="none",
task_type="CAUSAL_LM"
)

# 应用 LoRA
model = get_peft_model(model, lora_config)

# 训练配置
training_args = TrainingArguments(
output_dir="./qwen-lora",
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
warmup_steps=100,
num_train_epochs=3,
learning_rate=2e-4,
fp16=True,
logging_steps=10,
save_steps=100,
save_total_limit=3
)

# 开始训练
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset
)
trainer.train()

3. 资源需求估算

组件 最小配置 推荐配置
GPU 显存 8GB 16GB+
系统内存 16GB 32GB
存储空间 10GB 50GB
训练时间 2-4小时 8-12小时

微调后的模型部署

1. 合并 LoRA 权重

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from peft import PeftModel

# 加载基础模型
base_model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen2.5-1.5B-Instruct"
)

# 加载 LoRA 权重
lora_model = PeftModel.from_pretrained(
base_model,
"./qwen-lora/final-checkpoint"
)

# 合并权重
merged_model = lora_model.merge_and_unload()

# 保存完整模型
merged_model.save_pretrained("./qwen-finetuned")

2. 转换为 GGUF 格式

1
2
3
4
# 使用 llama.cpp 转换工具
python convert.py ./qwen-finetuned \
--outfile qwen-finetuned-q4_k_m.gguf \
--outtype q4_k_m

3. 集成到 Ollama

创建 Modelfile:

1
2
3
4
5
6
7
8
9
10
FROM ./qwen-finetuned-q4_k_m.gguf

TEMPLATE """{{ if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
"""

PARAMETER stop "<|im_end|>"

构建并运行:

1
2
ollama create my-qwen -f ./Modelfile
ollama run my-qwen

性能优化技巧

1. CPU 推理优化

1
2
3
4
# 针对 i7-8565U 的最佳配置
$env:OLLAMA_NUM_PARALLEL = "6" # 使用6个CPU线程
$env:OLLAMA_NUM_GPU = "0" # 禁用GPU加速
$env:OLLAMA_KV_OPT = "1" # 启用KV缓存优化

2. 内存优化

1
2
3
4
5
6
# 监控内存使用
Get-Process -Name "ollama" | Select-Object WS,VM

# WS(工作集)应该在 1.2-2.0GB 之间
# 如果超过,考虑使用更低的量化级别
ollama pull qwen2.5:1.5b:q3_k_s # 约 900MB

3. 响应速度优化

1
2
3
4
5
6
7
8
9
10
11
12
// OpenClaw 超时设置
{
"agents": {
"life-assistant": {
"timeout": 10000, // 10秒超时
"retry": {
"maxAttempts": 2,
"delay": 1000
}
}
}
}

4. 缓存策略

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 实现简单的结果缓存
import hashlib
import json
from datetime import datetime, timedelta

class ResponseCache:
def __init__(self, ttl=3600): # 1小时缓存
self.cache = {}
self.ttl = ttl

def get(self, query):
key = hashlib.md5(query.encode()).hexdigest()
if key in self.cache:
entry = self.cache[key]
if datetime.now() - entry['timestamp'] < timedelta(seconds=self.ttl):
return entry['response']
return None

def set(self, query, response):
key = hashlib.md5(query.encode()).hexdigest()
self.cache[key] = {
'response': response,
'timestamp': datetime.now()
}

监控与维护

1. 健康检查脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# health-check.ps1
$apiHealthy = try {
$response = Invoke-RestMethod -Uri "http://localhost:11434/api/tags" -TimeoutSec 3
$true
} catch { $false }

$modelResponding = try {
$response = Invoke-RestMethod -Uri "http://localhost:11434/v1/chat/completions" `
-Method Post `
-Body '{"model":"qwen2.5:1.5b","messages":[{"role":"user","content":"ping"}]}' `
-ContentType "application/json" `
-TimeoutSec 5
$response.choices[0].message.content -ne $null
} catch { $false }

if (-not $apiHealthy -or -not $modelResponding) {
# 重启服务
Stop-Process -Name "ollama" -Force
Start-Process ollama -ArgumentList "serve" -WindowStyle Hidden
Write-EventLog -LogName Application -Source "LocalLLM" -EventId 1001 -EntryType Warning `
-Message "Local LLM service restarted"
}

2. 性能日志

1
2
3
4
5
6
7
8
{
"timestamp": "2026-03-16T10:30:00Z",
"model": "qwen2.5:1.5b",
"response_time": 1850,
"memory_used": 1456230400,
"cpu_percent": 45.2,
"success": true
}

3. 定期维护任务

  • 每日:检查服务状态,清理日志
  • 每周:更新模型(如有新版本)
  • 每月:评估性能,考虑重新微调
  • 每季度:重新训练或调整参数

实际应用案例

案例 1:智能日程管理

1
2
3
4
5
6
7
8
9
10
11
12
13
# 输入
用户:明天上午10点团队会议,下午3点客户拜访

# 处理流程
1. 识别时间实体(明天10点,下午3点)
2. 创建日历事件
3. 设置提前提醒
4. 生成执行清单

# 输出
生活助手:✅ 已创建2个日程:
1. 团队会议 - 明天10:00(提前15分钟提醒)
2. 客户拜访 - 明天15:00(提前30分钟提醒)

案例 2:学习进度跟踪

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 输入
用户:更新Python爬虫学习进度:已学完BeautifulSoup

# 处理流程
1. 解析学习内容
2. 更新学习记录
3. 推荐下一步学习
4. 生成学习报告

# 输出
生活助手:📚 学习进度已更新:
- 已完成:BeautifulSoup(2026-03-16)
- 总进度:35%
- 下一步建议:学习Scrapy框架基础

案例 3:工作日报生成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 输入
用户:今天完成了用户登录模块,修复了3个bug

# 处理流程
1. 提取关键信息(模块、bug数量)
2. 格式化日报
3. 计算工作量
4. 生成明日计划建议

# 输出
生活助手:📊 今日工作总结:
✅ 用户登录模块开发完成
✅ 修复3个关键bug
⏳ 总工时:6.5小时
📝 明日建议:开始用户权限模块

扩展与未来规划

短期扩展(1个月内)

  1. 多模型支持:添加 Phi-3、Gemma 等模型切换
  2. 语音集成:结合 TTS/STT 实现语音交互
  3. 多端同步:手机、电脑、平板统一体验

中期规划(3-6个月)

  1. 个性化微调:基于用户数据持续优化模型
  2. 任务自动化:自动执行重复性工作
  3. 知识图谱:构建个人知识库

长期愿景(1年以上)

  1. 多模态能力:支持图像、文档理解
  2. 自主决策:有限度的自主任务执行
  3. 生态系统:插件市场,功能扩展

结语

本地部署小模型并不是要完全替代云端大模型,而是互补共存的策略。简单任务交给本地模型,保护隐私、降低成本;复杂任务交给云端模型,保证质量、利用最新技术。

通过本文介绍的方法,你可以在个人电脑上:

  1. 🚀 快速部署 Qwen2.5-1.5B 小模型
  2. 🔌 无缝集成 OpenClaw 智能助手
  3. 🛠️ 灵活微调 适应个人需求
  4. 📊 有效监控 保证服务稳定

无论你是开发者、研究者还是普通用户,本地 AI 助手都能为你提供更安全、更可控、更个性化的智能体验。

开始你的本地 AI 之旅吧!


附录

A. 资源链接

  • Ollama 官网
  • Qwen2.5 模型库
  • OpenClaw 文档
  • LoRA 微调指南

B. 故障排除清单

问题 可能原因 解决方案
安装失败 网络问题 使用镜像源或离线包
响应慢 CPU 负载高 减少线程数或降低量化级别
内存不足 模型太大 换用更小的量化版本
API 不可用 服务未启动 检查 ollama serve 进程

C. 性能基准测试

测试项目 Qwen2.5-1.5B DeepSeek-v3.2 差异
简单问答 1.8秒 0.8秒 +1.0秒
文本分类 1.2秒 0.6秒 +0.6秒
日程解析 2.1秒 1.2秒 +0.9秒
代码理解 不适用 2.3秒 -

测试环境:i7-8565U, 24GB RAM, Windows 11


下一篇预告:《基于本地知识库的智能问答系统构建》——如何将个人文档、笔记、邮件整合到 AI 助手中,实现真正个性化的知识管家。


本文采用 CC BY-NC-SA 4.0 协议共享,欢迎转载,请注明出处。
作者:尤里,OpenClaw 智能助手开发者
更新日期:2026年3月16日

Share 

 Next post: Oh-My-Opencode 完全解析:从扫盲到精通的终极指南 

咕咕咕, 就快送到了

哎呀,似乎评论系统在您的地区都无法正常工作。

不过不要担心,来看看我们为您准备的备用方案 ——
1. 将您的评论用信封装好
2. 使用信鸽函至 github.io
3. 我们在收到您的评论后将立即审核并更新至网站
评论一经采用,信函恕不退还,信鸽也不退还,请知悉。

© 2026 良

Theme Typography by Makito

Proudly published with Hexo