# Giasip Dispatch

> 多模型调用器 — 把任务或 prompt 派发给其他 AI 模型（Codex / Gemini / Kimi / DeepSeek / 豆包 / Qwen / GLM / MiniMax）执行并取回结果。当你想用某个或某几个其他模型跑任务、需要多模型交叉对比验证、或想用更便宜的模型省钱时触发。提供两类调用通道：API 直调（只需 API key）和 CLI 调用（需本地装对应 CLI）。触发信号：「用 Kimi/Codex/Gemini 跑一下」「交给其他 AI」「换个模型试试」「让几个模型都看看」「这个不用最贵的模型」。

- Skill: `giasip/giasip-dispatch-2` (Agent Skill)
- Install (CLI): `npx skillmds@latest add giasip/giasip-dispatch-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/giasip/giasip-dispatch-2/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- License: MIT
- Author: GiaSip (https://skillmd.com/u/giasip)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/giasip/giasip-dispatch-2

---


> ✦ A **GiaSip** skill · part of the `giasip` toolkit · github.com/GiaSip

# /dispatch — 多模型调用器

把一个任务或 prompt 派发给其他 AI 模型执行，取回结果。这个 skill **只提供调用能力**——选哪个模型、单派还是多派，由你（或当前的 Claude）根据任务临场判断，本 skill 不内置选型偏好。

## 脚本目录（Script Directory）

**重要**：所有脚本都在**本 skill 目录**下的 `scripts/` 子目录里。

**Agent 准备 —— 跑下面任何命令前先做一次**：确定包含本 `SKILL.md` 的目录的绝对路径，export 为 `BASE_DIR`：

```bash
# 全局安装（最常见）；作为 plugin 安装时改用 plugin 缓存路径
export BASE_DIR="$HOME/.claude/skills/giasip-dispatch"
```

下文所有命令都用 `$BASE_DIR/scripts/<脚本名>` 引用脚本。`BASE_DIR` 是**你自己**在 session 里设的 shell 变量——运行时**不存在** `CLAUDE_SKILL_DIR` 这个注入变量，所以必须先设 `BASE_DIR`，否则脚本路径会解析为空。

## 两类调用通道

| 通道 | 模型 | 前提 |
|------|------|------|
| **API 直调**（curl，最快） | DeepSeek / Qwen / GLM / 豆包 / MiniMax | 只需在 `~/.config/ai-keys/` 放对应 `.env`（含 API key） |
| **CLI 调用** | Codex / Gemini / Kimi | 需本地安装并登录对应 CLI |
| **内部 SubAgent** | Claude Haiku / Sonnet | Claude Code 自带，无需外部依赖 |

> 纯思考/分析类任务（不需要读文件、执行命令、改代码）优先走 **API 直调**——比 CLI 快约 10 倍。需要 Agent 能力（操作文件系统、执行命令、改代码）才走 CLI。

---

## 通用纪律（所有 CLI 调用必读）

1. **用 heredoc 传 prompt** —— 避免引号 / 特殊字符问题。
2. **所有 CLI 调用加 `</dev/null`** —— Claude Code 的 Bash 环境中 stdin 是永不关闭的管道，不加会导致 CLI 卡死在等待 stdin。
3. **构造 prompt 时**：简洁明确；不要塞入 Claude Code 专有概念（skills / hooks / SubAgent）；中文任务用中文 prompt，英文任务用英文 prompt；涉及具体项目时补必要上下文。

---

## 复杂度路由

根据任务性质自动选择派遣策略：

```
视觉任务？（PDF 图册 / 扫描件 / 截图 / 图片解析）
├── 是 → [Gemini CLI] — 原生 PDF + 图片视觉解析
│   触发：用户提供了图片/PDF 路径 + 任务涉及"读取"内容；
│   或 markitdown 输出为空/异常小
│   → 不要先试 markitdown——直接路由 Gemini
│
├── 纯思考/分析（商业分析、战略、文本理解、翻译）
│   → [API 直调] — 不需要 Agent 能力，直接 curl
│   快 10 倍；支持没有 CLI 的模型（DeepSeek/Qwen/GLM 等）
│
├── 简单 + 可逆（装包、格式化、搜索、生成模板）
│   → [单派] — 优先 Claude SubAgent (Haiku) 追求速度
│   只有需要中文原生或特定 AI 能力时才走外部 CLI
│
├── 代码执行（修 bug、写测试、小重构、生成代码文件）
│   → [Codex 写模式] — sandbox=full，Codex 直接改代码
│   条件：任务明确、在 git 管理项目中、影响可控
│   执行后必须提醒用户 `git diff`
│
├── 中等复杂（功能开发、文档分析、代码分析）
│   → [单派] — 发给最合适的 AI
│
├── 复杂 + 不可逆（架构设计、技术选型、大重构）
│   → [多派] — 自动升级，发给 2-3 个 AI 对比
│
└── 用户指定（"用 Kimi 跑一下"）
    → [直接指派] — 发给指定 AI，跳过匹配
```

**多派触发条件**（满足任一自动升级）：
- 用户说"重要"、"关键决策"、"不能出错"
- 任务涉及不可逆操作（数据库迁移、生产部署）
- 任务是技术选型或架构设计
- 预估影响面 > 10 文件或 3 模块
- 中文商业/战略分析任务（默认三路并行）

→ 多派阵容推荐见 `references/model-roster.md`。

---

## 调用方式

### API 直调（DeepSeek / Qwen / GLM / 豆包 / MiniMax）

不需要 Agent 能力的纯分析任务，直接调 API。通用脚本：

```bash
$BASE_DIR/scripts/api-dispatch.sh --model <model> "$(cat <<'EOF'
prompt 内容
EOF
)"
```

长文本用 stdin：

```bash
echo "长文本内容" | $BASE_DIR/scripts/api-dispatch.sh --model <model> --stdin
```

支持的模型 — 完整阵容及各模型强项见 `references/model-roster.md`。

| 参数 | 模型 | Key 文件 | 上下文 |
|------|------|---------|--------|
| `deepseek` | DeepSeek V4-Pro（思考模式默认开） | `deepseek.env` | 1M |
| `qwen` | 通义千问 Qwen3.6 Plus | `dashscope.env` | 1M |
| `glm` | 智谱 GLM-5.1（旗舰） | `zai.env` | 200K |
| `doubao` | 字节豆包 Seed-2.0 Pro | `volcengine.env` | 256K |
| `minimax` | MiniMax M2.7 | `minimax.env` | — |

> 模型名随版本更新——调用前可查各家最新文档。

### Codex CLI（OpenAI）— 通过 App Server 协议直连，无冷启动

只读模式（分析 / review / 调研）：

```bash
node $BASE_DIR/scripts/codex-appserver.mjs --effort xhigh "$(cat <<'EOF'
prompt 内容
EOF
)" </dev/null
```

写模式（改代码 / 修 bug / 写测试 / 生成文件）：

```bash
node $BASE_DIR/scripts/codex-appserver.mjs --effort xhigh --sandbox full "$(cat <<'EOF'
prompt 内容
EOF
)" </dev/null
```

**写模式安全规则：**
- 仅在 git 管理的项目目录中使用（`--cwd /path/to/project`）
- 执行完成后必须提醒用户 `git diff` 检查变更；不满意 `git checkout .` 回退
- 涉及生产代码 / 数据库 / 部署脚本时，降级为只读模式 + 输出建议

**注意：**
- `--sandbox` 默认 `read-only`；写模式用 `full`（脚本另支持 `workspace-write` / `danger-full-access` 等高级值）
- 脚本已内置非 ASCII 路径自动 symlink 绕行（`--cwd` 含中文等字符时自动在 `/tmp` 建临时 symlink，退出清理）
- 不要加 `2>/dev/null`——脚本在 stderr 输出结构化进度和错误信息
- 长文本可用 stdin：`echo "长文本" | node $BASE_DIR/scripts/codex-appserver.mjs --stdin --effort xhigh`

### Gemini CLI（Google）— 推荐走 supervisor 脚本

supervisor 内置智能 retry / fallback chain / circuit breaker / timeout / 日志：

```bash
$BASE_DIR/scripts/gemini-supervisor.sh --cwd "/path/to/work/dir" "$(cat <<'PROMPT_END'
prompt 内容
PROMPT_END
)"
```

**Supervisor 默认行为：**
- Fallback chain：高配模型 → GA 稳定版 → flash 版（任一不可用自动跳下一个）
- 错误分类：429 短期拥塞 backoff + jitter 重试；日 quota 耗尽立即跳下一个模型；503 走相同 backoff 路径
- 全局 attempt budget 6 次；单模型 hard timeout 600s（可改 `GEMINI_MODEL_TIMEOUT`）
- Circuit breaker：单模型连续 3 次失败进 30 分钟 cool-down
- 日志 `~/.cache/dispatch/gemini.log`（JSONL）+ 状态 `~/.cache/dispatch/gemini-state.json`

**指定单一模型（不走 fallback）：** `$BASE_DIR/scripts/gemini-supervisor.sh --model <model-id> "prompt"`
**stdin 模式（长 prompt 推荐）：** `cat prompt.txt | $BASE_DIR/scripts/gemini-supervisor.sh --stdin --cwd "/work/dir"`

**Gemini 视觉 / PDF 解析**（Gemini 原生支持 PDF + 图片视觉解析，是处理无文字层 PDF / 截图的标准路径）：

```bash
$BASE_DIR/scripts/gemini-supervisor.sh \
  --cwd "/path/to/files/dir" \
  "$(cat <<'PROMPT_END'
请完整解析 xxx.pdf 的所有页面内容，输出 markdown 格式：
- 保留所有数据表格（用 markdown 表格语法）
- 保留所有规格、技术参数、型号
- 标注页码（## Page 1 / ## Page 2 ...）
- 不要省略任何技术细节
PROMPT_END
)" > output.md
```

适用：PDF 图册（无文字层）、扫描件、产品样本、截图分析、图片 OCR、图表数据提取。输出大文件时建议管道写盘（`... > output.md`），避免长输出截断 stdout。

### Kimi CLI（月之暗面）— 推荐走封装脚本，自动 endpoint 路由

> **Thinking 模型纪律**：Kimi K2.6 是 thinking 模型——复杂 prompt 推理可能耗时数分钟。**Bash timeout 必须 ≥600000**（10 分钟）。脚本内置 SSE streaming + idle guard（120s 无字节阈值）+ 900s hard cap。不要中途 kill 或用手写 curl 替代。快速模式：前缀 `KIMI_NO_THINK=1`（注入 `{"thinking":{"type":"disabled"}}`，~4s 响应，但质量下降——仅用于非推理任务）。

```bash
# 默认：走 Moonshot 通用 endpoint（api.moonshot.cn/v1, MOONSHOT_API_KEY）
$BASE_DIR/scripts/kimi-dispatch.sh "$(cat <<'EOF'
prompt 内容
EOF
)"

# Opt-in coding endpoint（kimi CLI + api.kimi.com/coding/v1, KIMI_API_KEY）
KIMI_FOR_CODING=1 $BASE_DIR/scripts/kimi-dispatch.sh "prompt"

# 快速模式（禁用 thinking，~4s 响应）
KIMI_NO_THINK=1 $BASE_DIR/scripts/kimi-dispatch.sh "简单任务"
```

| Endpoint | 特点 | 适合 |
|---|---|---|
| **默认 Moonshot 通用** | reasoning 可见、保留追问倾向 | 通用分析、综合问答 |
| `KIMI_FOR_CODING=1` | 输出体量更大、自带 agent harness、reasoning 不可见 | 长篇报告、agent 自主写文件、多步骤代码 |

### Claude Code 内部 SubAgent（不走外部 CLI）

简单任务用 Haiku、标准任务用 Sonnet 时，直接用 Agent 工具派 SubAgent（指定 `model: haiku` 或 `model: sonnet`）——比 headless CLI 更快更便宜，且无外部依赖。

---

## 环境检查

调用前快速确认可用工具：

```bash
# CLI 工具
command -v codex; command -v gemini; command -v kimi

# API key（用于 API 直调）
ls ~/.config/ai-keys/*.env 2>/dev/null
```

只派可用的模型。CLI 不可用时切到 API 直调或换模型；API key 存在即可调用对应模型。

---

## 多模型并行（交叉对比 / 多方验证）

需要多个模型对同一问题给出独立视角时，**并行发出多个 Bash 调用**即可，最后由 Claude 综合对比。典型场景：重要决策、技术选型、不可逆操作前的交叉验证、对单一模型结果不放心。

```bash
# 三路并行示例（同一 prompt 发给三个模型）
$BASE_DIR/scripts/kimi-dispatch.sh "分析任务" &
$BASE_DIR/scripts/api-dispatch.sh --model deepseek "分析任务" &
$BASE_DIR/scripts/api-dispatch.sh --model doubao "分析任务" &
wait
```

选阵原则：认知多样性 > 数量——选训练数据 / 架构差异大的模型，得到的视角才真正不同；始终用各模型最高配置，控成本靠控频率而非降单次质量。

---

## 执行参数

- **Bash timeout：**
  - Codex 深度推理（xhigh）：`600000`（10 分钟，Bash 工具上限，与脚本默认 600s 对齐）
  - Gemini 单派：`240000`（4 分钟）；多派每路 `300000`（5 分钟）
  - **Kimi（thinking 模型）**：单派/多派一律 `≥600000`（推理尾部长且不可预测）；仅 `KIMI_NO_THINK=1` 快速模式可用 `240000`
- 单派 = 一个 Bash 调用；多派 = 多个 Bash 调用并行发出
- Codex 走 App Server 协议直连无冷启动，xhigh 深度推理通常 3-8 分钟
- Gemini / Kimi 走 CLI headless 模式，保留 `2>/dev/null`

## Fallback 链

```
首选通道失败（超时 / 报错）
→ 尝试备选模型（同类能力）
→ 备选也失败
→ 降级为"仅推荐"模式：输出建议方案但不执行，交还用户
```

---

## 输出格式

**单派：**

```markdown
## 任务执行结果
**执行者：** [模型名]　**任务：** [一句话复述]

### 结果
[模型输出]

### 执行信息
- 耗时：[X 秒]　状态：[成功 / 部分成功 / 失败]
```

**多派：**

```markdown
## 任务执行结果（多派）
**任务：** [一句话复述]

### [模型 1] 的方案
[核心要点 3-5 条]

### [模型 2] 的方案
[核心要点 3-5 条]

### 综合分析
- **共识：** [各方一致的部分]
- **分歧：** [不同点，标注各方立场]
- **我的判断：** [Claude 作为调度员的独立评估]
```

---

## 回答持久化

使用 `dispatch-persist.mjs` 将**完整一手回答**持久化到 `~/.cache/dispatch/responses/YYYY/MM/DD/<response_id>.md`（YAML frontmatter + prompt + response），并追加到 `~/.cache/dispatch/index.jsonl`（消费入口）。将 dispatch 输出 pipe 给此脚本，或将其 hook 进 dispatch 脚本，避免回答随 /tmp 或 session 日志丢失。

多派时设置 `DISPATCH_BATCH_ID` 将同批回答归组：

```bash
batch_id="$(uuidgen)"
DISPATCH_BATCH_ID="$batch_id" $BASE_DIR/scripts/kimi-dispatch.sh "任务" &
DISPATCH_BATCH_ID="$batch_id" $BASE_DIR/scripts/api-dispatch.sh --model deepseek "任务" &
wait
```

实现细节见 `$BASE_DIR/scripts/dispatch-persist.mjs`。

---

## 脚本清单

| 脚本 | 作用 |
|------|------|
| `api-dispatch.sh` | API 直调（DeepSeek / Qwen / GLM / 豆包 / MiniMax）|
| `codex-appserver.mjs` | Codex App Server 协议直连（只读 / 写模式）|
| `gemini-supervisor.sh` | Gemini CLI 调用 + retry / fallback / circuit breaker |
| `kimi-dispatch.sh` | Kimi 调用 + endpoint 路由 + thinking 模式控制 |
| `dispatch-persist.mjs` | 回答持久化 — 自动落盘 dispatch 结果 |
| `stop-review-gate.mjs` | Codex stop hook — 停止前门控代码 review |

> 安装、依赖、API key 配置见 README.md。

