昨天文章最後,我預告要把發文、會議與影片三條產線攤在同一張責任表裡。今天先不加入第三條線。
因為把會議紀錄和影片深讀放在一起後,會先碰到一個更基本的問題:兩邊都有 AI、有步驟,也留下不少產物,這樣就能叫「自動化工作流」嗎?
如果每次開始前,仍要人重新選流程、貼資料、搬結果,再臨場決定下一步,AI 的確做了事,但控制流還在人的腦袋裡。這比較像一連串 AI 任務,不是一條已經接起來的自動化。
所以 Day 7 不再示範一個新工具。我想先替第一週收一個 checkpoint:AI 是執行元件,自動化是人設計的控制流。
下面我會先把三個層級分清楚,再拿前兩天的案例逐段檢查。
照目前的系列地圖,Day 1 已先把整座內容工廠攤開;Day 2 預計盤點手上有哪些工作流;Day 3、4 預計把能機檢的規則搬出 Prompt,再回頭測試那道品質閘門。Day 5、6 的待審草稿,則分別拆會議錄音與影片怎麼變成可回查的內容。
把這些題目排在一起,難點就浮出來了。工具之間怎麼交接:誰決定現在該走哪條路、輸入不合格時誰喊停、AI 完成一段工作後要留下什麼,以及失敗時能不能從正確的位置回來。
少了這些交接,一個 Skill 寫得再完整,仍可能只是「下次可以照著做」。有了固定 Prompt,也只代表任務比較容易重複。要走到自動化,還得把藏在人工操作裡的判斷變成看得見的狀態與規則。
為了不要一看到 Agent、排程或 API 就把整條流程塗成「自動化」,這篇先用三個層級來檢查。
| 層級 | 怎麼開始 | 中間留下什麼 | 出錯後怎麼辦 |
|---|---|---|---|
| 一次 AI 任務 | 每次重新下指令或貼資料 | 可能只剩最後回答 | 人看出不對,再重新問一次 |
| 可重跑 workflow | 有固定入口、步驟與 artifact,可由人啟動 | 知道每一站收到什麼、留下什麼 | 人能從指定階段重做,但相鄰階段可能仍要人工搬接 |
| 自動化工作流 | trigger 明確,啟動後由程式或預先定義的規則接續狀態 | 階段、gate、停止與批准狀態可回查 | 按規則停止、重試、轉人工,或從有效狀態恢復 |
這不是 ISO、BPMN 或哪一套平台的正式成熟度模型,只是我拿來檢查內容產線的一把尺。它刻意不問「用了多強的模型」,而是問每一段交接目前由誰完成。
有一個常見誤會也要先拆掉:人工按下開始,不代表它就不是自動化。
GitHub Actions 的 workflow_dispatch 就是很直接的例子。人可以從網頁、GitHub CLI 或 REST API 啟動一條已經定義好的 workflow。要檢查的不是「有沒有人按按鈕」,而是按下去之後,步驟與狀態是否照既定控制流接續。
同樣地,中途需要人工批准,也不會讓自動化失效。批准本來就可以是一個明確 state。問題只在於:系統會不會真的停在那裡等人,還是 Prompt 裡寫一句「請先確認」,模型照樣一路做完。
把內容工作流拉遠一點看,我會先拆成四段:
我不會把「選哪條 workflow」交給模型自由猜。路由本身帶著權限、成本與發布邊界,應該先由人或 deterministic policy 決定。AI 很適合在邊界內處理模糊內容,不適合一邊解讀資料,一邊替自己擴張能做的事。
這也是內容自動化和單純 Prompt chaining 最大的差別。Prompt chaining 在意上一段回答怎麼餵給下一段;control flow 還要處理「能不能開始」「下一站是哪裡」「何時必須停」和「失敗後從哪裡回來」。
為了讓這些問題可以被比較,我先替這個系列整理一份 Automation Contract v1。它不是現有 repo 已經共用的 schema,也不是新的業界標準,而是後面 23 天都能繼續補的工作底稿。
| 欄位 | 要先說清楚什麼 |
|---|---|
name |
這條 workflow 處理的單一任務與固定名稱 |
trigger |
誰或什麼事件啟動 |
input_contract |
接受哪些輸入、必要欄位與拒絕條件 |
stages |
階段、順序與狀態怎麼轉移 |
artifacts |
每一站留下哪些可回查產物 |
gates |
哪些條件可以機械檢查 |
stop_conditions |
何時拒絕、失敗或交給人 |
human_approval |
哪些決定一定由人作出 |
output |
真正交付的檔案或狀態 |
failure_recovery |
失敗後從哪個有效狀態恢復 |
如果把 Day 6 的影片深讀先套成一份提案,大概會長這樣:
name: video-to-deep-read
trigger: ci-selected-source
input_contract: public-video-url
stages: [capture, intake, ledger, architecture, article]
artifacts: [source-cache, source-ledger, article, meta]
gates: [input-check, artifact-check]
stop_conditions: [unsupported-input, missing-source]
human_approval: required-before-author-claim
output: reviewable-article
failure_recovery: resume-from-last-valid-artifact
這份 YAML 是設計提案,不是把目前的實作換個格式抄一遍。尤其 trigger 和 failure_recovery,現有證據還不足以證明整條線已經照這份契約運作。
一次 AI 任務要走向自動化,光把 stages 寫得很完整還不夠,階段之間的狀態轉移得真的存在。AWS Step Functions 的 state machine 會明確定義每個 state 收到什麼、執行什麼,再把輸出交給下一個 state。順序不是靠檔案剛好排在一起,也不是靠模型自己記得接下來該做什麼。
一條流程在順風時能跑完,不代表它已經接好。失敗路徑才會把隱藏的人工操作全部照出來。
AWS Step Functions 的錯誤處理 會把 Retry、Catch 與 execution failure 分開。移回內容產線,可以先得到幾個很實際的判斷:
| 狀況 | 不該直接做什麼 | 可以怎麼設計 |
|---|---|---|
| 暫時性網路錯誤 | 把整條內容流程從頭重跑 | 只重試沒有副作用的失敗階段 |
| 來源缺失或輸入不支援 | 讓模型看標題或殘缺資料繼續猜 | 停止,保留錯誤狀態 |
| 說話者身分不明 | 自動補一個看起來合理的名字 | 轉到人工確認 |
| 外部發布結果不明 | 直接再發一次 | 先確認冪等或查回既有結果 |
Temporal 把 durable execution 的重點放在保存 workflow 狀態。這個對照很有用:如果流程只留下最後一篇文章,沒有中間 artifact,也不知道哪一站已經成功,那麼「恢復」通常只是全部再跑一次。
重試外部動作又更麻煩。AWS Builders' Library 在 idempotent API 的文章裡提醒,前一次呼叫可能已經產生副作用,只是回覆沒有送回來。內容產線後段如果會建立頁面、部署或發送,盲目重試就可能做出兩份。
Day 7 不需要導入 Step Functions 或 Temporal。這些官方文件在這裡只負責一件事:讓 trigger、state、error path、durable state 與 idempotency 這些詞有明確的工程含義,而不是拿平台名稱替本機流程貼金。
接下來是我覺得最實用的一張表:automation claim ledger。
每一段狀態轉移,都分開填兩個欄位:
execution_mode:automated、repeatable、manual 或 unknown。它回答這一段目前怎麼接續。evidence_status:verified 或 unverified。它回答手上的證據能不能支撐前一欄,以及支撐的是設計還是某次執行。這兩軸不能合併。程式碼可以證明某段設計已經寫下,卻不能證明現在每次都有執行;一份 artifact 可以證明產物存在,卻不能證明所有檔案都來自同一次 run。
我會把證據再拆成五種角色:
| 證據 | 能證明什麼 | 不能直接證明什麼 |
|---|---|---|
| code/Skill | 某個能力或固定步驟已寫下 | 現在每次都有執行 |
| artifact | 某個中間或最終產物存在 | 相鄰階段已自動接續 |
| execution trace | 某次狀態真的照順序發生 | 內容主張一定正確 |
| deployment/HTTP 200 | 外部輸出可以讀取 | 作者已經審閱與批准 |
| human approval | 人願意認領目前狀態 | 前面每一段都全自動 |
這不是在做一條由低到高的「證據排行榜」。五種東西回答的問題不同。把它們混在一起,才會出現「有程式碼,所以每天都在自動跑」或「頁面打得開,所以內容已經確認」這種跳躍。
Day 5 的會議案例,現在能核對的是一組去識別的狀態與元件:原始轉錄資料、時間戳逐字稿、純文字稿、ElevenLabs speaker_id、待確認說話者標籤、複核分段、整理後逐字稿、摘要與審閱報告。
這些 artifact 很有用。它們證明每個狀態有不同責任,也讓人能從摘要回到原話。但套進 automation claim ledger 後,仍有幾段不能直接升級:
| 會議線段落 | execution_mode |
evidence_status |
目前能說到哪裡 |
|---|---|---|---|
| 公開轉錄/摘要 Skill 的固定契約 | repeatable |
verified |
固定輸入與產物角色可核對;這只驗設計 |
speaker_id 對應真實身分 |
unknown |
unverified |
系統 ID 不是身分真相,實際對應方式待補 |
| 轉錄到分段複核,再到報告 | unknown |
unverified |
產物存在,相鄰階段的自動接法仍未核對 |
| 最後會議結論與公開邊界 | unknown |
unverified |
責任契約要求由人判斷;目前實際交接、現行 gate 與批准狀態仍待核對 |
這個結果不是說會議流程「不夠自動」。它只是把下一步講清楚:如果想提高自動化程度,要補的是 trigger、相鄰階段接法與 failure recovery,不是再寫一段更長的摘要 Prompt。
人工判斷的位置也沒有消失。speaker_id 無法可靠對應真實身分、摘要把選項寫成決定、承諾與期限需要回聽,或內容準備離開私人工作區時,workflow 應該把狀態送到人面前,停下來等答案。
Day 6 的影片案例留下 source cache、intake、source ledger、architecture、article、image storyboard、report 與 meta。這些 artifact 讓錯誤能回到不同內容層處理。
它的 wrapper 也有可以核對的 hard stop:抓不到字幕就停止;模型結束後,會檢查是否真的多出 content,並確認 meta.json 的 video_id 和輸入相符。這些 gate 驗的是輸入與交付有沒有接上,不是逐句驗證文章。
2026 年 7 月 26 日保留的紀錄,還能串起外層一次執行:播放清單輪詢找到來源,字幕快取通過,Agent 返回後由 wrapper 驗證新 content 與 video_id,接著完成 build 與 deploy。這足以把當次 outer wrapper 的控制流標成 automated / verified,但不能外推成目前排程仍長期正常運作。
但邊界要停在這裡。intake 到 source ledger、architecture、article 的內部階段,主要證據仍是產物與流程自述,沒有逐階段的獨立 trace。外層順利跑完,也不會自動證明每個主張是真的,更不等於我已經批准文章。
這也是為什麼 Day 6 那四種完成狀態不能合併:pipeline done、build 成功、HTTP 200 與 reviewed: false,分別是控制流、站台、外部可讀與人工審閱狀態。它們可以同時存在,卻不能互相代替。
把會議和影片放進同一份 Contract,現在可以得到一張比較誠實的表:
| Contract 問題 | 會議案例 | 影片案例 |
|---|---|---|
trigger 清楚嗎? |
待補 | selected run 是 playlist poll;目前一般啟動現況待補 |
artifacts 可回查嗎? |
有去識別的狀態角色 | 有 selected package |
gates 能核對嗎? |
有部分規則與複核點;整合待補 | VTT gate 有 code;當次也通過產物與 video_id gate |
| 相鄰階段真的自動接續嗎? | 多數仍是 unknown / unverified |
當次 outer wrapper 有 trace;內層內容階段沒有獨立 trace |
human_approval 獨立嗎? |
責任應由人承擔;現行 gate 與批准紀錄待補 | reviewed: false 證明批准與部署分開 |
failure_recovery 實作了嗎? |
unknown / unverified |
outer wrapper 會記失敗與嘗試;從有效內部 artifact resume 仍待核對 |
老實說,替整條 workflow 打一個「自動化百分比」看起來很乾脆,卻會把每段不同的證據壓扁。我比較在意的是先挑一段轉移,寫清楚它的輸入、輸出、執行方式與證據,再決定要不要把人工交接往前推。
替自己的流程盤點時,可以照這個順序:
execution_mode 與 evidence_status。如果填完出現很多 unknown,不是盤點失敗。它只是把原本藏在手動操作裡的工作照了出來。
走到 Day 7,前面確實花了幾篇談 gate、回查與狀態。但這個系列不是要變成「AI 驗證大全」。這些東西的用途,是把內容自動化真的接起來。
沒有 gate,錯的輸入會一路往後跑;沒有 artifact,失敗後只能重來;沒有 control flow,每次都要人臨場搬資料;沒有人工批准,模型產生的編輯判斷又會被當成作者立場。
發文、會議、影片或投影片,最後都會碰到同一組工程問題。這也是我想用內容產線來談 AI 自動化的原因:模型負責處理模糊內容,人負責定義邊界,程式負責讓狀態真的接得起來。
Day 7 先把這份 Automation Contract v1 立起來。下一篇會往第一個欄位裡鑽:workflow 已經由我或明確入口選好之後,input_contract 要怎麼檢查格式、必要欄位、權限與支援範圍;不符合時,程式應該安全停止,而不是讓 AI 自己猜路。