# Smart Model Switcher V5

> 智能模型自动切换 V5.0.2 - 多模态感知，自动识别图片/视频/音频/代码/文本任务，切换到最适合的模型。支持图片理解(qwen3-vl-plus)、视频音频(qwen3.5-plus)、代码(glm-5)、Office文档(MiniMax-M2.5)、推理等场景。零感知切换，无需手动操作。

- Skill: `lord1egypt/smart-model-switcher-v5` (Agent Skill)
- Install (CLI): `npx skillmds@latest add lord1egypt/smart-model-switcher-v5`
- Raw SKILL.md: https://api.skillmd.com/api/skills/lord1egypt/smart-model-switcher-v5/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: Lord1Egypt (https://skillmd.com/u/lord1egypt)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/lord1egypt/smart-model-switcher-v5

---


# 🧠 Smart Model Switcher V5.0.2 (多模态感知增强版)

**自动识别任务类型 • 智能切换最优模型 • 零感知 • 无需手动**

## 🎯 V5.0.2 核心升级

| 特性 | V4 | V5.0.2 |
|------|----|----|
| **多模态感知** | ✅ 图片 | ✅ 图片 + 视频 + 音频 |
| **Office 模式** | ❌ 无 | ✅ MiniMax-M2.5 |
| **视频理解** | ❌ 不支持 | ✅ 自动切换 qwen3.5-plus |
| **音频理解** | ❌ 不支持 | ✅ 自动切换 qwen3.5-plus |
| **主窗口限制** | ❌ 无限制 | ✅ 仅主窗口生效，子代理不切换 |
| **任务感知** | 智能上下文分析 | 智能上下文分析 + 文件检测 |

## ⚠️ 核心规则：主窗口限制

### 🔒 智能切换仅限主窗口

**智能模型切换只对主窗口（主会话）生效！**

| 会话类型 | 是否执行智能切换 | 说明 |
|---------|-----------------|------|
| **主窗口** | ✅ 执行 | 用户直接对话的会话（飞书、WebChat、Telegram 等） |
| **子代理** | ❌ 不执行 | 团队成员办公室（马云CEO、技术专家、市场猎手等） |
| **Spawned Session** | ❌ 不执行 | 通过 `sessions_spawn` 创建的所有会话 |

### 为什么这样设计？

1. **子代理有固定模型** - 各专业人员的模型是预设的（技术专家用 glm-5，推理用 qwq-plus）
2. **避免干扰** - 智能切换不应该覆盖子代理的专业模型配置
3. **职责分明** - 主窗口处理用户意图，子代理专注执行任务

### 判断方式

```
当前会话是主窗口？
├── YES → 执行智能切换逻辑
└── NO → 跳过切换，使用该会话预设模型
```

**检测方法**：
- 主窗口：`depth = 0` 或无 `subagent context` 标记
- 子代理：消息开头有 `[Subagent Context]` 或 `depth > 0`

---

## 🖼️ 多模态模型列表

### 视觉/音视频模型（支持图片/视频/音频）
| 模型 ID | Provider | 能力 | 推荐场景 |
|---------|----------|------|----------|
| `qwen3.5-plus` | Bailian | 图片/视频/音频 ⭐⭐⭐⭐⭐ | 多模态任务首选 |
| `qwen3-vl-plus` | Bailian | 图片 ⭐⭐⭐⭐⭐ | 纯图片理解、OCR |
| `qvq-max` | Bailian | 图片 ⭐⭐⭐⭐⭐ | 复杂视觉推理 |
| `glm-4v` | GLM | 图片 ⭐⭐⭐⭐ | 图片理解 |

### 代码模型（编程专用）
| 模型 ID | Provider | 代码能力 | 推荐场景 |
|---------|----------|----------|----------|
| `glm-5` | Bailian/GLM | ⭐⭐⭐⭐⭐ | 代码生成、Debug、重构 |
| `qwen3-coder-plus` | Bailian | ⭐⭐⭐⭐⭐ | 代码补全、项目开发 |
| `qwen-coder-turbo` | Bailian | ⭐⭐⭐⭐ | 快速代码任务 |

### 推理模型（复杂思维）
| 模型 ID | Provider | 推理能力 | 推荐场景 |
|---------|----------|----------|----------|
| `qwq-plus` | Bailian | ⭐⭐⭐⭐⭐ | 复杂推理、数学证明 |
| `qwen3-max` | Bailian | ⭐⭐⭐⭐⭐ | 深度思考、分析 |
| `glm-5` | Bailian/GLM | ⭐⭐⭐⭐ | 逻辑推理 |

### Office 文档模型
| 模型 ID | Provider | 能力 | 推荐场景 |
|---------|----------|------|----------|
| `MiniMax-M2.5` | Bailian | ⭐⭐⭐⭐⭐ | Office 文档处理 |

### 通用模型
| 模型 ID | Provider | 综合能力 | 推荐场景 |
|---------|----------|----------|----------|
| `qwen3.5-plus` | Bailian | ⭐⭐⭐⭐ | 日常对话、写作、翻译 |
| `qwen-plus` | Bailian | ⭐⭐⭐ | 快速任务 |
| `qwen-turbo` | Bailian | ⭐⭐ | 简单任务、低成本 |

## 🔄 自动切换规则

### 规则 0: 主窗口检测（最高优先级）
```
IF 当前会话不是主窗口 → 跳过所有切换逻辑，使用预设模型
```

### 规则 1: 多模态检测优先（图片/视频/音频）
```
IF 消息包含图片/视频/音频 → 切换到 qwen3.5-plus
  ├── 图片 + 代码相关 → qwen3.5-plus (视觉+代码)
  ├── 视频文件 → qwen3.5-plus (唯一支持视频)
  ├── 音频文件 → qwen3.5-plus (唯一支持音频)
  └── 纯图片理解 → qwen3-vl-plus 或 qwen3.5-plus
```

**视频文件扩展名**：.mp4, .avi, .mov, .mkv, .wmv, .flv, .webm, .m4v

**音频文件扩展名**：.mp3, .wav, .m4a, .ogg, .flac, .aac, .wma

**图片文件扩展名**：.png, .jpg, .jpeg, .gif, .webp, .bmp, .svg

### 规则 2: 代码任务
```
IF 消息包含代码关键词 → 切换到代码模型
  ├── 复杂代码任务 → glm-5 (最强代码)
  ├── 快速代码补全 → qwen-coder-turbo
  └── 项目级开发 → qwen3-coder-plus
```

### 规则 3: 推理任务
```
IF 消息包含推理关键词 → 切换到推理模型
  ├── 复杂推理 → qwq-plus (最强推理)
  ├── 数学/证明 → qwen3-max
  └── 一般分析 → glm-5
```

### 规则 4: Office 模式
```
IF 用户说 "Office模式" / "切换Office" / "MiniMax" → 切换到 MiniMax-M2.5
  └── Office 文档处理 → MiniMax-M2.5
```

### 规则 5: 文本任务
```
IF 纯文本任务 → 使用通用模型
  ├── 长文档 → qwen3.5-plus (1M context)
  ├── 写作/翻译 → qwen3.5-plus
  └── 简单对话 → qwen-plus / qwen-turbo
```

## 📋 切换决策树（完整版）

```
收到消息
    │
    ├── 🔒 是否为主窗口（主会话）？
    │       ├── NO → 跳过切换，使用该会话预设模型
    │       │
    │       └── YES ↓
    │
    ├── 🖼️ 包含图片/视频/音频？
    │       ├── 视频文件 (.mp4/.avi/.mov/.mkv/...) → qwen3.5-plus ⭐多模态优先
    │       ├── 音频文件 (.mp3/.wav/.m4a/.ogg/...) → qwen3.5-plus ⭐多模态优先
    │       ├── 图片 + 代码关键词 → qwen3.5-plus (视觉+代码)
    │       └── 纯图片 → qwen3-vl-plus 或 qwen3.5-plus
    │
    ├── 💻 代码关键词？
    │       └── YES → glm-5 (最强代码)
    │
    ├── 🧠 推理关键词？
    │       └── YES → qwq-plus / qwen3-max
    │
    ├── 📎 Office 关键词？
    │       └── YES → MiniMax-M2.5
    │
    └── 📝 通用任务 → qwen3.5-plus
```

## 🎯 关键词识别

### 多模态检测（最高优先级）
- **图片**：消息中有 `image` 类型内容，文件扩展名 .png, .jpg, .jpeg, .gif, .webp, .bmp
- **视频**：文件扩展名 .mp4, .avi, .mov, .mkv, .wmv, .flv, .webm, .m4v
- **音频**：文件扩展名 .mp3, .wav, .m4a, .ogg, .flac, .aac, .wma
- 用户说："看这个图"、"视频里是什么"、"听这个音频"、"截图"

### 代码关键词
- 编程相关：代码、编程、python、js、javascript、函数、debug、bug、报错、错误、修复
- 文件类型：.py, .js, .ts, .html, .css, .json, .yaml, .sh
- 操作词：写一个、帮我写、优化、重构、解释这段代码

### 推理关键词
- 推理、逻辑、证明、数学、计算、分析、思考
- 为什么、怎么推导、能不能推出、关系

### Office 关键词
- Office、Office模式、切换Office、MiniMax、文档处理
- Word、Excel、PPT、PowerPoint、表格处理

### 写作关键词
- 写、作文、文章、小说、故事、文案、邮件、报告

## 🔧 配置示例

### 用户配置的最强模型
```json
{
  "modelPreferences": {
    "multimodal": "qwen3.5-plus",     // 视频/音频/图片
    "vision": "qwen3-vl-plus",        // 纯图片
    "coding": "glm-5",                // 代码最强
    "reasoning": "qwq-plus",          // 推理最强
    "office": "MiniMax-M2.5",         // Office 文档
    "general": "qwen3.5-plus",        // 通用最强
    "fast": "qwen-turbo"              // 快速任务
  }
}
```

## 📊 使用示例

### 示例 1: 主窗口发送视频文件
```
用户: [发送一个 .mp4 文件] "帮我分析这个视频"
环境: 主窗口 (WebChat)
检测: 视频文件 + 主窗口
切换: qwen3.5-plus (唯一支持视频的模型)
执行: 分析视频内容
```

### 示例 2: 子代理处理代码任务
```
用户: "让技术专家写个爬虫"
环境: 技术专家办公室 (子代理)
检测: 代码关键词 + 子代理环境
结果: 不执行智能切换，使用技术专家预设模型 (glm-5)
执行: 生成爬虫代码
```

### 示例 3: 主窗口 Office 模式
```
用户: "切换到 Office 模式"
环境: 主窗口 (飞书)
检测: Office 关键词 + 主窗口
切换: MiniMax-M2.5
提示: "🧠 已切换到 MiniMax-M2.5（Office 模式）"
```

### 示例 4: 主窗口发送音频文件
```
用户: [发送一个 .mp3 文件] "转录这段录音"
环境: 主窗口 (Telegram)
检测: 音频文件 + 主窗口
切换: qwen3.5-plus (唯一支持音频的模型)
执行: 转录音频内容
```

### 示例 5: 子代理执行推理任务
```
用户: "让推理专家证明根号2是无理数"
环境: 推理专家办公室 (子代理)
检测: 推理关键词 + 子代理环境
结果: 不执行智能切换，使用推理专家预设模型 (qwq-plus)
执行: 给出证明过程
```

## 🚀 实现逻辑

### Step 0: 主窗口检测（第一步）
```
检测当前会话:
1. 是否有 [Subagent Context] 标记？
2. 是否有 depth > 0？
3. 是否是 spawned session？
   └── YES → 跳过所有智能切换，使用预设模型
   └── NO → 继续执行智能切换逻辑
```

### Step 1: 消息分析
```
分析用户消息:
1. 是否包含图片/视频/音频附件 ← 最高优先级
2. 提取关键词
3. 识别任务类型
4. 确定上下文需求
```

### Step 2: 模型选择
```
选择最优模型:
1. 根据任务类型查找最佳模型
2. 检查模型可用性 (API Key + 套餐)
3. 应用 fallback 逻辑
4. 记录选择原因
```

### Step 3: 执行切换
```
切换模型:
1. 调用 session_status(model: "xxx")
2. 发送提示信息给用户
3. 执行任务
4. 记录性能数据
```

## ⚠️ 核心原则

1. **主窗口限制** - 智能切换仅限主窗口，子代理保持预设模型
2. **多模态优先** - 图片/视频/音频一律走 qwen3.5-plus，绝不走 GLM-5
3. **代码专用** - GLM-5 只用于纯代码/纯技术任务
4. **Office 独立** - MiniMax-M2.5 专门处理 Office 文档
5. **检测优先级** - 主窗口 > 图片/视频/音频 > 代码 > 推理 > Office > 通用
6. **自动切换** - 用户无需手动操作，系统自动识别
7. **fallback** - 如果首选模型不可用，自动降级到备选

## 📝 更新日志

### V5.0.2 (2026-03-25)
- ✅ 新增视频文件自动检测 (.mp4, .avi, .mov, .mkv 等)
- ✅ 新增音频文件自动检测 (.mp3, .wav, .m4a, .ogg 等)
- ✅ 新增 Office 模式，支持 MiniMax-M2.5
- ✅ **新增主窗口限制，子代理不执行智能切换**
- ✅ 更新决策树，主窗口检测为最高优先级
- ✅ 明确 GLM-5 只用于纯代码任务

### V4.0.0 (2026-03-23)
- ✅ 新增多模态感知，自动识别图片
- ✅ 新增视觉模型支持 (qwen3-vl-plus, qwen3.5-plus)
- ✅ 优化切换决策树，图片检测优先
- ✅ 更新关键词识别规则

### V3.0.0
- ✅ 全平台支持
- ✅ API Key 验证
- ✅ 套餐检测

---

---

## 🤖 AI Agent 自动行为指南

**重要：AI Agent 在每次响应前，必须执行以下检测流程！**

### 🔒 规则 0：主窗口检测（第一步！）

**智能切换只对主窗口生效！子代理不要执行模型切换！**

```
Step 0: 检测当前会话类型
├── 消息开头有 [Subagent Context]？
│   └── YES → 这是子代理，跳过智能切换，使用预设模型
│
├── 有 depth 标记且 depth > 0？
│   └── YES → 这是子代理，跳过智能切换，使用预设模型
│
├── 是 spawned session？
│   └── YES → 这是子代理，跳过智能切换，使用预设模型
│
└── NO → 这是主窗口，继续执行智能切换逻辑
```

**子代理示例**：
- `[Wed 2026-03-25 21:05 GMT+8] [Subagent Context] You are running as a subagent...`
- `[Subagent Task]: ...`
- `depth=1` 或任何 `depth > 0`

**主窗口示例**：
- 用户直接在 WebChat/飞书/Telegram 发消息
- 无 `[Subagent Context]` 标记
- `depth=0` 或无 depth 标记

### ⚠️ 会话级别切换（重要！）

**模型切换是会话级别的，不影响其他通道！**

- WebChat 发视频 → 只在 WebChat 切换多模态模型
- 飞书写代码 → 只在飞书会话切换代码模型
- Telegram 聊天 → 只在 Telegram 会话切换模型

**不同通道独立，互不影响！**

### 切换方法（会话级别）

使用 `session_status` 工具，带上当前会话的 sessionKey：

```
// 当前会话切换（不影响其他通道）
session_status(model: "bailian/glm-5")

// 切换其他会话的模型（需要指定 sessionKey）
session_status(sessionKey: "feishu/xxx", model: "bailian/qwen3.5-plus")
```

**默认行为：不带 sessionKey 时，只切换当前会话的模型。**

### 检测流程（每次响应前）

```
Step 0: 主窗口检测 ← 第一步！
├── 是子代理？ → 跳过切换，使用预设模型
└── 是主窗口？ → 继续

Step 1: 检测消息内容
├── 是否包含图片/视频/音频？
│   └── YES → 切换到 qwen3.5-plus（多模态模型）
│
├── 是否包含代码关键词？
│   └── YES → 切换到代码模型 (glm-5)
│
├── 是否包含推理关键词？
│   └── YES → 切换到推理模型 (qwq-plus)
│
├── 是否包含 Office 关键词？
│   └── YES → 切换到 Office 模型 (MiniMax-M2.5)
│
└── 否则保持当前模型
```

### 切换方法

使用 `session_status` 工具切换模型：
```
session_status(model: "bailian/qwen3.5-plus")  // 多模态
session_status(model: "bailian/glm-5")         // 代码
session_status(model: "bailian/qwq-plus")      // 推理
session_status(model: "bailian/MiniMax-M2.5")  // Office
```

### 切换提示

切换成功后，给用户一个简短提示：
- "🧠 已切换到 qwen3.5-plus（视频/音频理解）"
- "🧠 已切换到 qwen3.5-plus（图片理解）"
- "🧠 已切换到 glm-5（代码任务）"
- "🧠 已切换到 qwq-plus（推理任务）"
- "🧠 已切换到 MiniMax-M2.5（Office 模式）"

### 示例行为

```
场景 A: 主窗口发送视频
────────────────────────
用户: [发送一个 .mp4 视频文件] "帮我分析这个视频"

AI 行为:
1. 检测: 无 [Subagent Context] → 是主窗口
2. 检测到视频文件 → 需要多模态模型
3. 决策: 使用 qwen3.5-plus（唯一支持视频）
4. 调用: session_status(model: "bailian/qwen3.5-plus")
5. 提示: "🧠 已切换到 qwen3.5-plus（视频理解）"
6. 分析视频内容

场景 B: 子代理处理代码任务
────────────────────────
消息: [Subagent Context] You are running as a subagent...
任务: 技术专家，写一个爬虫

AI 行为:
1. 检测: 有 [Subagent Context] → 是子代理
2. 决策: 跳过智能切换，使用预设模型 (glm-5)
3. 不调用 session_status
4. 直接执行任务
```

### 注意事项

1. **主窗口限制** - 只有主窗口才执行智能切换，子代理保持预设模型
2. **不要重复切换** - 如果当前模型已经是最优选择，不要切换
3. **切换要快** - 使用简短提示，不要长篇大论
4. **记录切换** - 如果模型切换成功，记住当前使用的模型
5. **优先级** - 主窗口检测 > 图片/视频/音频 > 代码 > 推理 > Office > 通用
6. **多模态内容绝不走 GLM-5** - 视频/音频/图片必须用 qwen3.5-plus

---

## 📋 快速参考

| 场景 | 是否切换 | 最优模型 |
|------|---------|----------|
| 🏠 主窗口 + 视频 | ✅ 切换 | qwen3.5-plus |
| 🏠 主窗口 + 音频 | ✅ 切换 | qwen3.5-plus |
| 🏠 主窗口 + 图片 | ✅ 切换 | qwen3.5-plus |
| 🏠 主窗口 + 代码 | ✅ 切换 | glm-5 |
| 🏠 主窗口 + 推理 | ✅ 切换 | qwq-plus |
| 🏠 主窗口 + Office | ✅ 切换 | MiniMax-M2.5 |
| 🤖 子代理 + 代码 | ❌ 不切换 | 使用预设模型 |
| 🤖 子代理 + 推理 | ❌ 不切换 | 使用预设模型 |
| 🤖 子代理 + 任何 | ❌ 不切换 | 使用预设模型 |

---

**V5.0.2 核心亮点：主窗口智能切换，子代理保持预设，发图片/视频/音频自动切换多模态模型，完全无感！** 🚀
