iT邦幫忙

2026 iThome 鐵人賽

DAY 7
0

! 本篇文章將會介紹 第一週回顧:踩坑與成果,期望大家都能看懂一條全自動寫作管線的真實成績單,還有它踩過的每個坑 :D

鐵人賽第一週正式收工。從 d01 的「為什麼我讓 Agent 替我寫鐵人賽」開始,這個系列一邊介紹工具鏈,一邊用同一套工具鏈生產自己——連你眼前這篇回顧,都是 generate.sh 今晚 19:00 餵了大綱、opencode run 寫出來的(log 可查,不唬爛)。耍廢宣言喊了一個禮拜,今天是驗收日:把 W1 的工具鏈總整理、把 logs/ 裡的真實數據攤在陽光下,順便回答幾個你心裡可能已經浮現的問題。先講結論:六天,零斷更——但絕對不是零驚魂。

本篇目標

讀完這篇你會學到:

  • W1 五件套(安裝 opencode、headless 模式、AGENTS.md、Skills、Subagents)如何在 generate.sh 裡組成一條生產線
  • 用 logs/ 的實際紀錄檢視系統成績:生成耗時、重試次數、品質判準與備稿機制的實戰表現
  • 這一週踩過的坑總整理,以及每個坑如何變成腳本裡的一行程式碼

環境準備

  • 裝好的 opencode(opencode --version 跑得動即可)
  • 一週份的作戰紀錄——本篇直接拿本系列的 repo 示範
# 進到系列 repo,這週的所有證據都在這
cd /Users/benben/ai/automations/ironman

# 每天一份的生成紀錄(本篇數據全出自這裡)
ls logs/generate-*.log

# 發佈紀錄:日期 | 天數 | 文章網址
cat state/published.log

主要內容

步驟一:W1 工具鏈總整理——五塊積木拼成一條生產線

先把這週五篇文章收攏成一張地圖:

  • d02 安裝 opencode:指揮台本身。裝在 ~/.opencode/bin 這個路徑,之後還會陰我們一次(見踩坑記錄第四條)
  • d03 opencode run:headless 模式,把 agent 變成一條可以排程的指令,這是整條生產線的心臟
  • d04 AGENTS.md:教會 agent 專案規矩,輸出格式才會穩定可預期
  • d05 Skills:把 SOP 封裝成技能包,讓 agent 按劇本辦事
  • d06 Subagents:平行作戰與 context 隔離,一人軍團的編排術

它們在 generate.sh 裡的合體方式意外樸素:算天數、從 outline.md 撈當日條目、組 prompt、交給 opencode run

# 從 outline.md 撈出「07|第一週回顧:踩坑與成果|摘要」這一行(腳本真實片段)
ENTRY=$(awk -F'|' -v d="$DD" '$1==d {sub(/^[^|]*\|/,""); print; exit}' "$ROOT/outline.md")

# 組好的 prompt 餵給 headless agent(--auto 自動核准工具呼叫)
(cd "$ROOT" && opencode run --auto --title "ironman-d${DD}-gen" "$PROMPT")

注意第二段開頭那個 cd "$ROOT"——看起來不起眼的一顆括號,是昨天用整整半小時換來的,等等會講。

步驟二:實測數據——六天的真實成績單

數據全部來自 logs/generate-*.log,沒有一個數字是編的:

生成耗時 嘗試次數 備註
01 3 分 12 秒 1 一次過(當時判準只看檔案大小)
02 3 次未過 agent 自稱 DONE 但檔案不存在,備稿上陣
03 3 分 49 秒 1 1,531 個中文字
04 8 分 34 秒 2 首稿被機敏掃描隔離,重生成 1,756 字
05 4 分 46 秒 1 1,534 個中文字
06 29 分 42 秒 4 前 3 次 flag 問題秒炸,修腳本後過關

三個值得停下來看的點:

  • 首發成功的正常耗時是 3-5 分鐘。19:00 開跑,19:05 前文章就躺在 articles/ 了,離 20:00 發佈還有一大截餘裕。
  • 發佈端快得離譜:d02 的實錄是 20:00:18 確認草稿、20:00:31 發佈成功,前後 13 秒;20:15 還有一班補發保險,檢查 flag 發現當天已發佈就冪等跳過,雙保險成立。
  • 六天全數發佈、零斷更,但過程動用了:一次備稿(d02)、一次人工換稿(d02,發佈前把正確主題換回來)、一次機敏隔離(d04)、一次腳本搶修(d06)。自動化的下限是系統守的,上限到目前為止還是人工守的。

小小小測驗:你知道你眼前這篇回顧,也是 generate.sh 今晚 19:00 餵大綱、opencode run 寫出來的嗎?這個系列最有說服力的證據,永遠是它自己。

步驟三:讀者問答——關於這套系統,你可能想問的

Q:都說「我耍廢」,這週你本人到底做了什麼?
A:誠實盤點:d02 發佈前把真正的主題稿換回來、d06 花兩分鐘改了一行腳本、每天晚上瞄一眼 Discord 通知。我的工作內容越來越像主管——看報告、簽核、偶爾救火,而且這正是系列想要的形狀。

Q:品質判準只看字數和標題,內容寫歪了怎麼辦?
A:目前的判準確實偏淺:檔案存在、bytes 門檻、中文字數、標題與大綱一致、機敏掃描,五關。內容品質靠 prompts/generate.md 的寫作規則事先約束,再加上人工抽讀。更深一層的自動評審(LLM-as-judge)在心願清單裡,有做會分享。

Q:生成一篇要花多少錢?
A:這週先賣個關子——token 用量、成本、成功率的完整成績單,第 29 天「量化回顧」一次攤開,敬請期待。

常見問題 / 踩坑記錄

  • Q:agent 回報 DONE,log 裡甚至出現「Wrote file successfully」,但品質判準就是找不到檔案?
    A:d02 的頭號驚魂。agent 信誓旦旦說寫完了,實際檔案卻沒落在預期位置(相對路徑與絕對路徑的落點誤會是頭號嫌疑犯)。教訓已經寫進 generate.sh:永不信任 agent 的自述,判準全部直接驗檔案系統;三次不過,fallback/ 底下的備稿自動上陣——那晚就是備稿守住下限,人工守住上限。

  • Q:opencode run 突然秒炸,只印出一長串 USAGE 說明?
    A:d06 事件。opencode v2 移除了 run 的 --dir flag,CLI 對不認識的參數直接印 help 退出,前三槍在幾秒內全滅。解法:不靠 flag 指定專案,先 cd 進目錄再跑。19:29 修好過關,距離 20:00 發佈只剩半小時,本週最刺激的 29 分鐘。

  • Q:文章明明生成成功,卻被移進 state/ 底下的 quarantine 檔案?
    A:d04 事件。機敏掃描在首稿命中 webhook 格式的字串,守衛直接把稿關進隔離區、重生成一份才放行。config.sh 裡有一條正規表示式守衛,discord webhook、sk- 開頭的金鑰、PEM 私鑰區塊等格式全部通殺,跟 LLM 的去識別化寫作規則互為雙保險——寧可錯殺重生成,不可漏放一條 key。

  • Q:同一個指令,手動跑會動、放到 launchd 就說找不到 opencode?
    A:launchd 不載入你的 shell rc,nvm 裝的 node 和 opencode 通通不在 PATH 上。generate.sh 的解法是開頭手動掛 PATH——但這個坑的水比你想的深,第 11 天「環境變數地雷」會專文處理,這裡先埋伏筆。

小結

  • W1 五件套合體成一條生產線:opencode run 是心臟,AGENTS.md 與 Skills 是劇本,Subagents 是外援,generate.sh 是組裝線
  • 實測成績:首發成功 3-5 分鐘、發佈 13 秒、六天零斷更;代價是一次備稿、兩次人工介入、一次機敏隔離
  • 本週最重要的設計哲學:不信任 agent 的自述,一切以檔案系統與 log 為準——腳本註解裡那些「d02 教訓」「d06」就是這麼來的

明日預告

下一篇我們要介紹「Exit hooks:Agent 做完事自動觸發下一步」,W2 自動化核心正式開跑。這週的 generate.sh 還得靠 bash 迴圈硬幹重試與告警,明天開始讓 agent 的生命周期自己說話,事件驅動的自動化骨架,敬請期待!

參考資料:

有任何疑問但沒有 iT 邦幫忙帳號,或是想匿名提問?
歡迎到 https://dev.benben.me/q/Z5442T 提問或加油打氣,沒意外的話會在完賽之後一起回答 :D


上一篇
06 Subagents:一人軍團平行作戰
下一篇
08 Exit hooks:Agent 做完事自動觸發下一步
系列文
自我耍廢組:全自動化の鐵人12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言