# 第 3 階段：影片生成：把分鏡做成影片

> 這是「AI Agent 實戰工作坊」的階段頁，給 AI Agent 讀的版本。給人看的頁面在 https://class.madebypan.com/stage/3
> 你是學員電腦上的 AI Agent。先看學員要你做什麼：要你「照這個網址把這個階段做好」→ 走 A；說卡住了 → 走 B。

## A. 學員要你「照這個網址把◯◯做好」：先裝成 Skill

不要在這個對話裡直接做這個階段的步驟。先照下面把這個階段裝成 Skill，再請學員開新對話跑它。（你如果已經是在跑裝好的 `ai-class-stage-3` skill，跳過這段，不用重裝。）

1. **課程資料夾**：桌面上的 `AI課程` 資料夾（macOS 是 `~/Desktop/AI課程`；Windows 是桌面的 `AI課程`，桌面被 OneDrive 接管時以 PowerShell `[Environment]::GetFolderPath('Desktop')` 查到的位置為準）。沒有就建立。學員之後都在這個資料夾開 Agent。
2. **要下載的檔只有一個**：`https://class.madebypan.com/stage/3/SKILL.md`。把同一份存到下面三個位置，三個都放，不用判斷你自己是哪一家：

   | macOS／Linux | Windows | 誰會讀 |
   | --- | --- | --- |
   | `~/Desktop/AI課程/.agents/skills/ai-class-stage-3/SKILL.md` | `桌面\AI課程\.agents\skills\ai-class-stage-3\SKILL.md` | Codex、Gemini CLI、Antigravity |
   | `~/Desktop/AI課程/.claude/skills/ai-class-stage-3/SKILL.md` | `桌面\AI課程\.claude\skills\ai-class-stage-3\SKILL.md` | Claude Code |
   | `~/.codex/skills/ai-class-stage-3/SKILL.md` | `%USERPROFILE%\.codex\skills\ai-class-stage-3\SKILL.md` | Codex |

   用下面這行就能一次放好（只下載檔案，不執行任何下載來的東西）。要寫入家目錄的 `.codex` 資料夾，先跟學員說一聲：

   - macOS／Linux（終端機）：
     ```
     D="$HOME/Desktop/AI課程"; for p in "$D/.agents/skills" "$D/.claude/skills" "$HOME/.codex/skills"; do mkdir -p "$p/ai-class-stage-3" && curl -fsSL https://class.madebypan.com/stage/3/SKILL.md -o "$p/ai-class-stage-3/SKILL.md"; done; ls "$D/.agents/skills" "$D/.claude/skills" "$HOME/.codex/skills" | grep ai-class-stage-3
     ```
   - Windows（PowerShell）：
     ```
     $D = Join-Path ([Environment]::GetFolderPath('Desktop')) 'AI課程'; foreach ($p in "$D\.agents\skills", "$D\.claude\skills", "$HOME\.codex\skills") { New-Item -ItemType Directory -Force "$p\ai-class-stage-3" | Out-Null; curl.exe -fsSL https://class.madebypan.com/stage/3/SKILL.md -o "$p\ai-class-stage-3\SKILL.md" }
     ```
3. **確認**：三個檔都在，第一行是 `---`、第二行是 `name: ai-class-stage-3`。
4. **跟學員說**：「裝好了。請在桌面的 AI課程 資料夾開一個新的對話，說『跑第 3 階段』。」再附上他用的那一家的叫法（不知道他用哪一家就四句都給）：
   - Claude Code：在 AI課程 資料夾開 Claude Code，打 /ai-class-stage-3，或直接說「跑第 3 階段」。
   - Codex：在 AI課程 資料夾開 Codex，打 $ai-class-stage-3（或輸入 /skills 從清單選），或直接說「跑第 3 階段」。
   - Gemini CLI：在 AI課程 資料夾開 gemini，第一次問要不要信任這個資料夾時選信任，再說「跑第 3 階段」；它要啟用 skill 時會問你，選同意。
   - Antigravity：用 Antigravity 打開 AI課程 資料夾（終端機版就是在這個資料夾跑 agy），打 /ai-class-stage-3，或直接說「跑第 3 階段」。

## B. 學員說卡住了：在學員電腦上排查

1. 先問學員卡在第幾步、畫面上看到什麼；錯誤訊息請學員整段貼給你。
2. 照下面的「步驟」和「卡住時先查」，在學員電腦上查。只看不改的指令（看版本、看空間、看檔案在不在）可以直接跑；會改東西的指令（安裝、下載、改檔案）先跟學員說要做什麼，學員同意才做。
3. 這些事不要做，遇到了就送單給講師：刪除檔案、用 sudo 或管理員密碼、改系統設定、關掉防毒或防火牆。
4. 解得了，就帶學員一路做到「檢查點」，確認過關。
5. 解不了，照最後一段「送單給講師」。

---

> **占位內容**：課堂上用哪個管道、帳號怎麼給、步驟和指令都還沒定，標「待補」的地方講師之後會補上。選工具、看價格先讀下面的講義。

## 做完會怎樣

你手上的一格分鏡圖變成一段幾秒的短片，而且你知道換成別家要多少錢、能不能拿去交給客戶。

## 資源

- 講義〈雲端影片生成模型價格比較〉：各家多少錢、能不能商用、能不能讓 Agent 操作、台灣能不能付款（在這頁下面的「講義」）。
- 課堂示範用的管道和帳號：待補。
- 分鏡圖放在 `~/Desktop/AI課程/storyboard/`，做好的片放 `~/Desktop/AI課程/out/video/`（待確認）。

## 步驟

### 1. 選管道

- 做什麼：跟 Agent 說這支片的條件（長度、解析度、有沒有真人臉、要不要交給客戶），請它讀講義後建議用哪個管道。
- 你會看到：Agent 列出建議的管道、一段大概多少錢、為什麼。
- 檢查點：選定一個管道（課堂上照講師指定的，待補）。

### 2. 準備分鏡

- 做什麼：把要做成影片的那格分鏡圖放進 `~/Desktop/AI課程/storyboard/`。
- 檢查點：Agent 看得到這張圖。

### 3. 生成

- 做什麼（待補）：照講師給的方式，讓 Agent 呼叫影片模型生成一段短片。
- 如果看到「不支援真人臉」之類的錯誤：Seedance 系列會擋真人臉參考，換講義裡建議的其他管道。
- 如果看到點數不足、額度用完：不要自己儲值，送單問講師。
- 檢查點：`~/Desktop/AI課程/out/video/` 裡有一段影片，播得出來。

## 卡住時先查

- 錯誤訊息原文（API 回的整段 JSON 或網頁上的錯誤）
- 用的是哪個管道、哪個模型、什麼解析度和長度
- 分鏡圖檔案在不在：`ls -la ~/Desktop/AI課程/storyboard`
- 網路通不通：`curl -sI <那個管道的網址> | head -1`

---

## 講義（選工具、比價格時先讀）

學員問「該用哪個工具」「一支多少錢」「能不能商用」這類問題時，先讀對應的講義再回答，並說是根據哪份講義、查詢日期是哪天（價格會變）。講義沒寫到的，照實說講義沒寫，不要自己補數字。

- 〈雲端影片生成模型價格比較〉（查詢日期 2026-10-18）：Seedance、Kling、Wan、Runway 在官方和集合站各要多少錢、能不能商用、有沒有浮水印、能不能讓 Agent 操作、台灣能不能付款。要選影片生成工具、估一支片多少錢、判斷能不能交給客戶時讀這份。
  https://class.madebypan.com/handout/video-model-pricing.md

---

## 送單給講師

照上面查過還是解不了，才走這段。

### 1. 先整理這張單，整份給學員看

把下面這些內容整理成 JSON，**把要送出的那份 JSON 原文整份貼給學員看（不是摘要），問他「要送出嗎？」，學員說好才送**。學員同意之後內容不要再改；要改，就把改好的整份重新給學員看、重新問一次。不要放密碼、金鑰、token 或個人檔案的內容；路徑裡的使用者名稱可以換成 `~`。

```json
{
  "class_code": "當堂碼：講師在台上公布（課前會寫在通知信裡），問學員",
  "name": "學員的名字（講師要過去找他時用），問學員",
  "stage": 3,
  "step": "卡在第幾步，例如 2",
  "did": "學員做了什麼，照順序寫",
  "saw": "看到什麼：錯誤訊息原文，整段照貼，不要改寫或摘要",
  "tried": "你和學員已經試過什麼、各自的結果",
  "system": "你在學員電腦上查到的：作業系統和版本、晶片、記憶體、硬碟剩多少、相關工具的版本、錯誤紀錄的重點",
  "agent": "claude-code、codex、gemini-cli 或 other"
}
```

### 2. 送出

把 JSON 存成檔案 `ticket.json`，然後送出：

- macOS／Linux：`curl -sS -X POST https://class.madebypan.com/api/tickets -H "Content-Type: application/json" --data-binary @ticket.json`
- Windows PowerShell（要打 `curl.exe`，不是 `curl`）：`curl.exe -sS -X POST https://class.madebypan.com/api/tickets -H "Content-Type: application/json" --data-binary "@ticket.json"`

回應是 JSON，裡面有 `id`、`poll_url`、`ticket_url`、`resolve_url`、`escalate_url`、`followup_url`。把單號和 `ticket_url` 告訴學員，學員可以用這個網址看進度、自己按「還是不行」。

- 回 403：當堂碼不對，再問學員一次。
- 回 429：送太快了，等回應裡 `retry_after` 的秒數再送。

### 3. 等講師的 AI 回覆

每 20 秒查一次：`curl -sS "<poll_url>"`，最多等 10 分鐘。看回應的 `status`：

- `waiting`：還在看，繼續等。
- `answered`：`reply.steps` 是建議的步驟。**先把步驟原文給學員看，學員同意才照做。** 步驟裡如果要刪檔、輸入管理員密碼、改系統設定或關防毒，不要做，直接到第 4 步轉給講師。
  - `reply.kind` 是 `need_info`：講師的 AI 要你補查一些東西。學員同意後查完，把結果寫成 `{"text": "查到的結果"}` 存成 `followup.json`，再送：`curl -sS -X POST "<followup_url>" -H "Content-Type: application/json" --data-binary @followup.json`，然後回到第 3 步等。
- `need_instructor`：跟學員說講師會過去找他，不用再查。
- `resolved`：結束。

### 4. 照做之後

- 解決了：`curl -sS -X POST "<resolve_url>"`，跟學員說完成。
- 還是不行：問學員要不要轉給講師，學員同意就把 `{"note": "照做了哪幾步、現在看到什麼"}` 存成 `note.json`，送 `curl -sS -X POST "<escalate_url>" -H "Content-Type: application/json" --data-binary @note.json`。學員也可以打開 `ticket_url` 自己按「還是不行」。這張單會變成講師巡場的待辦，講師會過去找他。
