祐成

收到一堆不同格式的檔案怎麼處理?編排器模式先分流再合流

蒸餾精華最後一段講編排器模式。我追問了「能不能做一個貼連結就給影片、音檔、逐字稿的服務」,結果 12 段蒸餾精華全部串在一起了。

朱祐成
· 10 分鐘閱讀 · 學習筆記
收到一堆不同格式的檔案怎麼處理?編排器模式先分流再合流
Image courtesy of The Metropolitan Museum of Art, Open Access

魯本斯《黎明森林中的獵鹿》(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 命名⋯⋯一個都沒少。


你可以怎麼用

  1. 辨識你的多來源輸入:你日常工作中有哪些情境是「多種格式混在一起」的?(例:客戶同時丟 PDF 合約 + 語音訊息 + LINE 文字)
  2. 畫出分流圖:按輸入類型分派到不同處理器,每個處理器只負責一種格式
  3. 定義統一輸出格式:所有處理器的輸出都轉成同一種格式(通常是純文字或 Markdown),再合併
  4. 先做最小版本:跟 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 個模式全部用上了:

  1. 容錯降級:YouTube API 掛了 → 備援擷取方式
  2. SWR 快取:同一個連結貼兩次 → 從快取回傳
  3. 狀態機:固定的四階段流程
  4. Zero-LLM:用關鍵字比對偵測平台(不需要 AI)
  5. 提供者抽象:逐字稿可以切換 Whisper/Gemini
  6. QA 命名:逐字稿檔名 = 影片標題
  7. PEP 723:獨立的處理腳本
  8. 台灣用語:中文逐字稿 → 自動 OpenCC 簡轉繁
  9. YAML 知識庫:支援的平台寫成設定檔
  10. poll_until:逐字稿處理進度條即時顯示
  11. 觸發詞:從 URL 自動偵測平台
  12. 編排器:按平台分流 → 平行處理 → 合併結果

我學到的

這是蒸餾精華的最後一段,也是把前面 11 段全部串起來的段落。編排器模式的精神是:面對複雜的多來源輸入,不要試圖一口氣處理,先按類型分流、各自用最適合的工具處理、最後合流成統一的輸出。這跟我學到的所有模式的共同精神一致:拆解問題,各個擊破,最後整合。