你的「智能排程」是真優先排序,還是只是輪替
《Agentic Design Patterns》第 20 章講優先排序。核心一句話:agent 手上永遠有一堆能做的事,要按重要性動態挑出當下最高價值的那件先做,而不是照固定順序一件件輪。
我們讀完,點頭。我們有 60 幾個 systemd timer 排班、內容有五大主題輪替、發文有冷卻節流、還寫過一支專門替客戶名單打分的 lead-scorer。優先排序,實作完成。然後我們對自己做了一次對抗式稽核。這一章的真相很難堪:我們叫它優先排序,攤開來其實只是 modulo 輪替。
攤開來看它到底在挑什麼
發文腳本每次要決定「這篇打哪個主題」,那行決策是這樣寫的:
PILLAR_INDEX=$(( POST_SLOT % ${#PILLARS[@]} )) # 五個主題,第幾號 % 5
POST_SLOT 是拿當天第幾天、第幾個時段算出來的號碼,對 5 取餘數,輪到誰就發誰。這裡沒有任何一行在問「哪個主題現在最該發、上次哪篇成效最好」。它不是在排序,是在發牌,五個主題一人一輪。發文前還有一道 10 小時冷卻:離上次成功發文不到 10 小時就跳過。那是節流,管的是「發不發」,不是「先發哪件最值得的」。
靜態 timer 決定何時醒、% 5 決定輪到誰、冷卻決定要不要跳過。三個加起來,沒有一個環節在比較價值。
先花幾分鐘查你自己叫「優先排序」的東西
01 選下一件工作那行,是在算價值,還是 index % N
翻出你排程器裡「決定下一個要做什麼」的那一行。如果它長得像 x % N、round-robin、照時間輪,那是輪替;真的優先排序會看到加權、算分、排序這類字。
# 找輪替:取餘數挑下一個
grep -nE '% *\$?\{?#|round.?robin|rotate|INDEX=.*%' your-scheduler.sh
# 找價值排序:有沒有任何一行在加權算分
grep -niE 'score|weight|priority|rank|sort' your-scheduler.sh
紅旗:挑下一件事的那行是 something % N,而整份腳本 grep 不到任何算分或排序。
02 你那支「評分器」有 timer 在跑嗎,還是定義了從不執行 很多系統都有一支寫得漂漂亮亮的評分腳本,問題是它到底有沒有被排進去跑。查三個地方:有沒有 timer 綁它、有沒有留下 log、排程設定裡的開關是不是關著。
systemctl --user list-timers | grep -i scor # 有沒有 timer 綁它
ls ~/.openclaw/logs/ | grep -i scor # 沒有 log = 從沒跑過
grep -iE '"name".*scor|"enabled"' cron/jobs.json # enabled:false = 定義了但關著
紅旗:腳本找得到,timer 找不到、log 找不到,或設定裡 enabled 是 false。它是文件裡的擺設,不在活的系統裡。
03 動態優先 vs 靜態輪替,用「換資料看順序會不會變」分辨 真的優先排序,餵不同的資料,選出來的順序會跟著變;靜態輪替只跟時鐘和第幾次跑有關,資料再怎麼變,輪到誰就是誰。把 index 或時間往前撥一格,看選出來的工作是不是只跟「第幾次」有關、跟內容無關。
# 同一個 slot 永遠選同一個 = 輪替;換了資料才會變 = 排序
for i in 0 1 2 3 4 5; do echo "slot $i -> $(( i % 5 ))"; done
紅旗:選取結果只由時鐘或計數決定,你改資料它紋風不動。
我們翻設定翻出來的
那支 lead-scorer 是真的在算價值:商務信箱 +30、網站分數低(越痛越想買)+25、掃描多次 +20、SEO/AEO +15、有網址 +10,滿分 100,超過 50 分就當熱名單推 TG 給老闆。這才是這一章講的優先排序。但它在 cron/jobs.json 裡的狀態是 "enabled": false,排程寫了每 6 小時跑一次卻從沒開機,沒綁 timer,logs 目錄查無任何一筆紀錄。它從定義出來到今天,一次都沒跑過。
所以整條活著的路徑上,唯一真的在做價值排序的那支是關著的,剩下的全是輪替和節流。
值得講清楚它「不是」什麼:輪替沒壞,% 5 也沒寫錯,五個主題確實被公平地輪到。壞的是我們把「公平輪替」掛上「優先排序」的名字,然後把唯一真的在算價值的腳本關在門外。
我們沒有連夜補一套動態排序
因為補不了。要按成效動態排主題,得先有每篇貼文的真實成績,而第 9 章那篇已經揭穿:那口井是乾的,成效檔是空陣列。同一口乾井,餵不動排序。所以我們先做的不是假裝上線一套排序,是把名字改對:這是輪替加節流。lead-scorer 要嘛重新接真實訊號打開它,要嘛別再拿它宣稱「我們有智能排序」。掛著漂亮名字騙自己,比承認只是輪替更糟:你會以為系統在替你挑最該做的事,其實它只是在數 1、2、3、4、5。
優先排序體檢清單
對你自己叫「優先排序 / 智能排程」的東西跑一遍:
- 選下一件工作那行,是在算價值分數,還是
index % N輪流 - 整份排程器裡,有沒有任何一行真的在加權、算分、排序
- 你那支評分器有 timer 綁著、有 log 留痕嗎,還是 enabled 是 false
- 換一批資料進去,選出來的順序會變,還是紋風不動
- 冷卻、節流、rate limit,有沒有被你當成「優先排序」在講
- 如果現在做不了真排序(沒有價值訊號),名字有沒有誠實叫「輪替」
這一章的四句話
- 靜態 timer 加
index % N輪替加 rate limit,三個加起來也不是優先排序。排序按價值動態挑,輪替只按順序輪。 - 分辨真假很快:挑下一件事那行,是在比價值分數,還是
index % N。後者跟資料內容無關,餵什麼都輪一樣的。 - 唯一在算價值的腳本,如果沒 timer、沒 log、enabled 是 false,它是文件裡的擺設,不是活系統的一部分。
- 做不了真排序時最誠實的一步,是先把名字改對。把輪替叫輪替,別掛「智能優先排序」繼續騙自己。
原始碼位置:~/.openclaw/scripts/moltbook-autopost.sh(主題輪替=POST_SLOT % 5,加 10 小時發文冷卻,由 2x/day 的靜態排程觸發);唯一的價值評分器 ~/.openclaw/scripts/lead-scorer.sh(商務信箱 +30、低分網站 +25、多次掃描 +20、SEO/AEO +15、有網址 +10,滿分 100、≥50 通知老闆),在 ~/.openclaw/cron/jobs.json 裡 "enabled": false、排程寫每 6 小時卻沒綁 timer、logs 查無紀錄=從沒跑過。
這是《Agentic Design Patterns》× 龍蝦艦隊系列。我們照書把一人公司的 AI agent 艦隊系統化,然後對自己做對抗式稽核。宣稱做到的每一章,都被重新驗證過一次,也把查法和改法整理成你能照著跑的步驟。這個系列的可信度,來自我們願意公開自己打臉自己。