! 本篇文章將會介紹 第一週回顧:踩坑與成果,期望大家都能看懂一條全自動寫作管線的真實成績單,還有它踩過的每個坑 :D
鐵人賽第一週正式收工。從 d01 的「為什麼我讓 Agent 替我寫鐵人賽」開始,這個系列一邊介紹工具鏈,一邊用同一套工具鏈生產自己——連你眼前這篇回顧,都是 generate.sh 今晚 19:00 餵了大綱、opencode run 寫出來的(log 可查,不唬爛)。耍廢宣言喊了一個禮拜,今天是驗收日:把 W1 的工具鏈總整理、把 logs/ 裡的真實數據攤在陽光下,順便回答幾個你心裡可能已經浮現的問題。先講結論:六天,零斷更——但絕對不是零驚魂。
讀完這篇你會學到:
opencode --version 跑得動即可)# 進到系列 repo,這週的所有證據都在這
cd /Users/benben/ai/automations/ironman
# 每天一份的生成紀錄(本篇數據全出自這裡)
ls logs/generate-*.log
# 發佈紀錄:日期 | 天數 | 文章網址
cat state/published.log
先把這週五篇文章收攏成一張地圖:
~/.opencode/bin 這個路徑,之後還會陰我們一次(見踩坑記錄第四條)opencode run:headless 模式,把 agent 變成一條可以排程的指令,這是整條生產線的心臟它們在 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 問題秒炸,修腳本後過關 |
三個值得停下來看的點:
小小小測驗:你知道你眼前這篇回顧,也是 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 天「環境變數地雷」會專文處理,這裡先埋伏筆。
opencode run 是心臟,AGENTS.md 與 Skills 是劇本,Subagents 是外援,generate.sh 是組裝線下一篇我們要介紹「Exit hooks:Agent 做完事自動觸發下一步」,W2 自動化核心正式開跑。這週的 generate.sh 還得靠 bash 迴圈硬幹重試與告警,明天開始讓 agent 的生命周期自己說話,事件驅動的自動化骨架,敬請期待!
參考資料:
有任何疑問但沒有 iT 邦幫忙帳號,或是想匿名提問?
歡迎到 https://dev.benben.me/q/Z5442T 提問或加油打氣,沒意外的話會在完賽之後一起回答 :D