每週收斂自動開的 PR,merge 前的樣子

這篇講的管線

catime 每小時生一隻新貓,靠的是一份風格庫:art_style、composition、lighting、texture、color_palette 五軸,每軸一堆「這個風格長什麼樣」的描述,排列組合出貓的樣子。庫裡的風格不會自己變多,得有人餵新的進去。

先講這個管線在幹嘛:每天固定去抓一個 FB 粉專相簿的新照片,AI 判斷留或丟,順手從留下的照片抽風格描述。每週再把這一週攢下來的候選,收斂去重,開一個 PR 併進風格庫。開頭到中間全自動,最後一步留給人按 merge。

每天:抓圖、判留丟、順手抽風格

每天固定時間,腳本去抓相簿的新照片,縮圖丟給 claude 判斷這張圖留還是丟,留下的圖再抽一組「5軸:xxx/xxx/xxx/xxx/xxx」的風格描述,寫進 styles/<page>.md,標記成「★新」。

這步每天在做,量不大,但天天累積。一週下來,styles/*.md 裡躺著一堆 ★新 候選,重複的、太細碎的、跟庫裡已經有的撞名的,全部混在一起。

每週:兩層便宜過濾,才輪到 claude 出手

收斂那天,先跑一支純 Python 的腳本,把 ★新 候選跟風格庫現有的名字比對,字面一樣或明顯重複的直接濾掉。這一步不用 AI,字串比對就夠,便宜又快。

濾完剩的,才送去給 claude 做真正花錢的那一步:語意去重(候選跟庫裡已有的東西意思一樣,就算字面不同也要丟)、內部聚類(近義的候選合成一條,出現次數太少的細碎風格折進母題)、幫每條配好中文名、英文名、一句英文 prompt。任務說得很白:寧缺勿濫,沒有真正獨特的新風格就交白卷。

這個順序是故意的:便宜的字面比對先擋一輪,貴的語意判斷只處理剩下的少量候選。全部丟給 AI 判斷也能做,只是沒必要每次都燒一輪完整推論去比對幾百條裡九成都是重複的東西。

開 PR,人只做最後一件事

claude 收斂完,腳本再跑一次 dry-run,算這輪真的能併進去幾條。零條就直接跳過,不開沒意義的 PR。有東西才寫進风格庫的分支,開一個 PR,標題直接寫「本週收斂 FB 相簿幾個新風格」。

腳本到這裡就停手。不自動 merge,PR 開著等人看一眼再按。

上禮拜六(2026-07-06)這條線第一次照這個週期跑出真的成果:catime #65,自動開的 PR,內文寫著「請人工檢查後 merge」,一小時內我看過按了 merge。同一批修改也順手把每天的抓圖結果做了異地備份,面板也是每次跑完自動重新產生,不用手動點。

為什麼這樣切,而不是全自動到底

會停在「開 PR 給人看」而不是自動 merge,是我刻意的判斷:AI 收斂出來的風格描述,好不好看、準不準,終究要有人真的看過才放心讓它變成貓咪風格庫的一部分。腳本負責把「有沒有新東西、值不值得看」這件苦工做完,人只花幾秒鐘做真正需要判斷力的那一步。

這跟前幾天 K-Rider、咏唱魔法那幾篇講的甲方思維是同一件事:規格與驗收留給人,重複的苦工丟給 AI。這裡的驗收動作小到只剩一個按鈕,但那個按鈕沒有拿掉。