收到一堆不同格式的檔案怎麼處理?編排器模式先分流再合流
蒸餾精華最後一段講編排器模式。我追問了「能不能做一個貼連結就給影片、音檔、逐字稿的服務」,結果 12 段蒸餾精華全部串在一起了。
魯本斯《黎明森林中的獵鹿》(A Forest at Dawn with a Deer Hunt),約 1635 年,木板油畫。魯本斯(Peter Paul Rubens)以動態的構圖描繪一場協調有序的獵鹿行動——獵人、獵犬、馬匹各司其職,在黎明的森林中分頭包抄、最終合圍。這幅畫是編排器模式的完美隱喻:多個角色、不同路線、平行推進、匯聚為一個結果。現藏於紐約大都會藝術博物館。
手上有 PDF、Word、音檔三種格式,要整理成一份報告——你會一個一個打開慢慢轉嗎?編排器模式的做法是:按類型分流、各自用最擅長的工具處理、最後合流成統一輸出。這篇紀錄我怎麼從這個概念出發,追問到一個「貼連結就給影片、音檔、逐字稿」的服務設計,還意外把 12 段蒸餾精華全部串在一起。
核心概念:編排器模式(Orchestrator Pattern)
輸入多個檔案(PDF + Word + 音檔)
↓
Phase 1: 按副檔名分派
.pdf → pdf 處理器
.docx → docx 處理器
.mp3 → 音檔轉譯器
↓
Phase 2: 全部變成純文字
↓
Phase 3: 合併成最終報告
不分流的話,一個 AI 試圖同時處理所有格式——格式混在一起、來源搞不清楚、回頭查也查不到。分流之後,每個處理器只做好一件事,結果乾淨地合併。這是狀態機的進化版:狀態機是線性的(A→B→C→D),編排器是分叉再合流(A → B1+B2+B3 平行處理 → C → D)。
我的追問與發現
「可以如何在 Claude Code CLI 實戰?」
Claude 指出我當下的對話本身就是一個活生生的編排器:挫敗飛輪的素材有三種不同格式(HTML 連結、原始逐字稿、LINE 筆記),處理流程是——辨識三種輸入類型 → 從每種格式各自提取關鍵資訊 → 合併成 12 個知識點 → 三個專家分析。這個流程可以變成一個可重複使用的 /process 技能。
「假如我想做一個貼連結就給影片、音檔、逐字稿的免費服務?」
Claude 畫出了教科書等級的編排器架構:使用者貼上 YouTube/FB/IG 連結 → 偵測平台 → 取得媒體資訊 → 三條平行路線(下載影片 mp4、擷取音檔 mp3、產生逐字稿)→ 呈現三個選項。技術選型完全符合零框架原則:前端純 HTML+CSS+JS 放 Cloudflare Pages,後端用 Cloudflare Worker,工具用 yt-dlp + Whisper/Gemini API。最驚人的是,這個服務設計把前面學的 12 個模式全部用上了——容錯降級、SWR 快取、狀態機、Zero-LLM、提供者抽象、QA 命名⋯⋯一個都沒少。
你可以怎麼用
- 辨識你的多來源輸入:你日常工作中有哪些情境是「多種格式混在一起」的?(例:客戶同時丟 PDF 合約 + 語音訊息 + LINE 文字)
- 畫出分流圖:按輸入類型分派到不同處理器,每個處理器只負責一種格式
- 定義統一輸出格式:所有處理器的輸出都轉成同一種格式(通常是純文字或 Markdown),再合併
- 先做最小版本:跟 MVP 原則一樣,先處理最常見的那一種格式,確認流程通了再擴充
延伸連結
一句話帶走
面對複雜的多來源輸入,不要試圖一口氣處理——先按類型分流、各自擊破、最後合流,就是編排器模式的全部精神。
📚 完整學習對話紀錄(想看完整脈絡可展開)
原文(蒸餾精華 第 12 段)
輸入多個檔案
↓
Phase 1: 按副檔名分派
.pdf → pdf-multimodal-processor
.docx → docx-to-markdown
.mp3/.m4a → gemini-transcribe
↓
Phase 2: 讀取所有轉換後的純文字
↓
Phase 3: 產生 16 份結構化筆記
↓
Phase 4: 合併成最終報告
Claude 的白話解釋
你收到一堆不同格式的檔案——PDF、Word、音檔。手動做法:一個一個打開、一個一個轉檔、一個一個讀。編排器做法:先按檔案類型分流,每個處理器做自己擅長的事,全部變成純文字後合流,產出最終報告。
為什麼要先分流?不分流的話,一個 AI 試圖同時處理所有格式——格式混在一起、來源搞不清楚、回頭查也查不到。分流之後,每個處理器做好一件事,結果乾淨地合併。
這是第 3 段狀態機的進化版:狀態機是線性的(A→B→C→D),編排器是分叉再合流(A → B1+B2+B3 平行處理 → C → D)。
我的提問:可以如何在 Claude Code CLI 實戰?
Claude 的回答:你今天已經在用了
其實這整段對話就是一個活生生的編排器。挫敗飛輪那堆素材是三種不同格式(HTML 連結、原始逐字稿、LINE 筆記),我的處理流程是:
- Phase 1:辨識三種輸入類型
- Phase 2:從每種格式各自提取關鍵資訊
- Phase 3:合併成 12 個知識點
- Phase 4:三個專家分析 → 可用的/有爭議的/丟掉的
這個流程可以變成一個可重複使用的 /process 技能。
我又追問:假如我想做一個線上免費服務——貼一個 FB/YT/IG 連結,給你三個選項:下載影片、下載音檔、複製逐字稿
Claude 的回答:教科書等級的編排器模式
架構長這樣:
使用者貼上連結
↓
Phase 1: 偵測平台
youtube.com → YouTube 處理器
facebook.com → Facebook 處理器
instagram.com → Instagram 處理器
↓
Phase 2: 取得媒體網址 + 標題 + 時長
↓
Phase 3: 三條平行路線
路線 A:下載影片(mp4)
路線 B:擷取音檔(mp4 → mp3)
路線 C:產生逐字稿(音檔 → Whisper/Gemini)
↓
Phase 4: 呈現三個選項
🎬 下載影片(mp4, 85MB)
🎵 下載音檔(mp3, 12MB)
📝 複製逐字稿
技術選型完全符合我的開發原則:
- 前端:純 HTML+CSS+JS(零框架),Cloudflare Pages
- 後端:Cloudflare Worker → 偵測平台 → 呼叫處理器
- 工具:yt-dlp(影片/音檔)、Whisper/Gemini API(逐字稿)
實作上的限制也一併討論了:
- yt-dlp 需要伺服器(不只是 Worker)→ 小型 VPS 或 Fly.io 免費方案
- 第三方下載在平台 ToS 上是灰色地帶
- 逐字稿成本 → Gemini API 處理音檔最便宜
- 暫存檔案 → Cloudflare R2(每月 10GB 免費)
MVP 建議:先只做 YouTube(最穩定),FB/IG 之後再加。
12 段蒸餾精華全部串在一起
我問的這個下載服務,竟然把前面學到的 12 個模式全部用上了:
- 容錯降級:YouTube API 掛了 → 備援擷取方式
- SWR 快取:同一個連結貼兩次 → 從快取回傳
- 狀態機:固定的四階段流程
- Zero-LLM:用關鍵字比對偵測平台(不需要 AI)
- 提供者抽象:逐字稿可以切換 Whisper/Gemini
- QA 命名:逐字稿檔名 = 影片標題
- PEP 723:獨立的處理腳本
- 台灣用語:中文逐字稿 → 自動 OpenCC 簡轉繁
- YAML 知識庫:支援的平台寫成設定檔
- poll_until:逐字稿處理進度條即時顯示
- 觸發詞:從 URL 自動偵測平台
- 編排器:按平台分流 → 平行處理 → 合併結果
我學到的
這是蒸餾精華的最後一段,也是把前面 11 段全部串起來的段落。編排器模式的精神是:面對複雜的多來源輸入,不要試圖一口氣處理,先按類型分流、各自用最適合的工具處理、最後合流成統一的輸出。這跟我學到的所有模式的共同精神一致:拆解問題,各個擊破,最後整合。