AI Agent學習迴路自我反思BuildInPublic一人公司

怎麼判斷 AI 學習迴路是真在學還是空轉

· 10 分鐘閱讀
龍蝦艦隊 · 逐章稽核 · 第 10 / 22 篇
目錄
  1. 三個迴路都在跑,翻開帳本卻是空的
  2. 先花幾分鐘查你自己的學習迴路
  3. 我們翻 log 翻出來的根因
  4. 我們沒有假裝修好它
  5. 學習迴路體檢清單
  6. 這一章的四句話

幾個月前我在《我們用 48 小時建了一套會自己變聰明的 AI 銷售系統》裡,把「它會自己學習,每天變聰明一點」當成整套系統最有價值的部分。這篇要拆穿這句話:我的三個學習迴路每晚準時跑,翻開帳本卻是空的,連續三週吐出一模一樣的 5 句話。timer 在跑,不等於在學。

《Agentic Design Patterns》第 9 章講學習與適應。核心一句話:agent 要能從自己做過的結果裡學到東西,然後調整下一次的行為。不是每次都從零開始,而是昨天的成績會改變今天怎麼做。

我們讀完,心想這塊我們超前部署了。我們有三個學習迴路:dream-cycle 在深夜 GPU 閒置時預先反思、daily-reflect 每晚 23:00 做全艦隊策略復盤、lobster-learn 每週把反思收斂成行為改變。三個 systemd timer 都準時 fire,log 一行不漏。看起來勤奮得不得了。然後我們對自己做了一次對抗式稽核。這一章的真相是:timer 每晚都在動,學到的是 0。

三個迴路都在跑,翻開帳本卻是空的

先看第一個迴路吃的資料檔。daily-reflect 每晚問自己「哪篇貼文超標、哪篇低於目標、明天每個 agent 該打什麼題材」,這些問題全都要有貼文成績才答得出來。它讀的成績檔長這樣:

$ cat ~/.openclaw/data/post-performance.json
[]

一個空陣列。往下游看,dream-cycle 每晚讀「表現最好的貼文」當風格參考,讀到的也是空的;它產出的績效報告攤開來,是這副樣子:

## Summary
- Total posts tracked: 0
- Average score: 0

## Actionable Insights
- High-score titles tend to: [agent will fill this after reading]
- Best posting time: [agent will analyze created_at patterns]

那幾個 [agent will fill this after reading] 是佔位符,從上線到今天沒有一次被填過。因為要填它,得先有貼文成績,而成績永遠是 0。

最刺眼的是 dream-cycle 的自我反思。它每晚讀系統日誌、歸納問題模式。我把整份反思檔攤開,從 6/18 到 7/06,每一晚吐出的是同一段 5 句話:「最常出現的問題是 Gateway 未能啟動」「時間模式每晚 22:00 及下午 17:00」「定期檢查 Gateway 狀態」「增加自我修復頻率」。連續三週,換湯不換藥。它不是在學,是在複讀昨天的自己。

先花幾分鐘查你自己的學習迴路

01 查迴路有沒有真實訊號進來 學習迴路的第一格永遠是資料。翻它讀的那個資料檔,如果是空的 [] 或 0 筆,後面再漂亮的反思都是對著空氣講話。

# 數學習迴路吃進去的資料檔到底有幾筆
jq 'length' ~/.openclaw/data/post-performance.json
# 或看它產的報告有沒有寫「tracked: 0」
grep -iE 'tracked: 0|total: 0|\[.*will fill' report.md

紅旗:資料檔是 []、報告寫著 tracked: 0、或裡面躺著從沒被填過的佔位符。迴路在對一個空集合做反思。

02 diff 這週和上週的學習輸出,看有沒有變 真的在學,輸出會隨新資料變。把這週的反思跟上週的擺一起 diff,如果幾乎一樣,它沒在學,是在複讀。

# 看整份反思檔裡到底有幾種不重複的句子
grep -vE '^\s*$|^##' dream-reflections.md | sort | uniq -c | sort -rn | head
# 或直接 diff 最近兩次輸出
diff <(sed -n '/上週那段/,/結束/p' f) <(sed -n '/這週那段/,/結束/p' f)

紅旗:連續三次輸出高度雷同。我們的 dream 三週來每晚都是同樣那 5 句,這不是穩定,是死掉。

03 檢查它讀寫的路徑和資料源還活著嗎 迴路可能在勤奮地讀一個壞掉的 API、寫一個沒人看的檔。看它從哪裡拿資料、往哪裡寫,那些端點今天還通嗎。

# 把迴路裡的 API 和檔案路徑撈出來逐一驗
grep -nE 'curl|https?://|readFileSync|>>' your-learn-loop.sh
# 手動打一次它依賴的 API,看回的是資料還是空殼
curl -sf "https://.../posts?author=$NAME&limit=10" | jq '.posts | length'

紅旗:API 回 0 筆、路徑指到已退役的檔、或手動打一次就發現查詢條件根本不成立。

我們翻 log 翻出來的根因

三個迴路全靠同一支 post-stats.sh 餵資料,而它壞在一個沒人注意的地方。它用 ?author=<名字> 去 Moltbook 撈自己的貼文,但那個過濾永遠回 0 筆:Moltbook API 的 author 是一個物件 {id, name} 不是字串,拿 name 去比對根本對不上;我們自己的貼文也不在最近 50 篇的 feed 裡,ultralabtw 這個名字壓根沒出現在作者清單;沒有 /me 端點,憑證裡也沒存 author_id。所以成績檔永遠是空的,三個迴路每晚醒來,第一格就是 0,後面整條鏈學到的自然也是 0。

值得講清楚它「不是」什麼:timer 沒壞、腳本沒 crash、log 每晚都寫「reflection complete」。表面上一切健康。壞的是最上游那口井是乾的,而下游沒有一個環節會因為「輸入是空的」就停下來喊停。

我們沒有假裝修好它

這支腳本的 FIXME 裡,我們寫了一句話:先不假裝修好。真正的修法不是一行 grep 改得掉的,要在發文的當下就從 POST 回應抓 author_id 存起來、之後改用 id 過濾,那是一個獨立的調查,不是一晚能收的工。在那之前,我們讓迴路照跑,但把現況寫死在 FIXME 裡,心裡清楚它在空轉。學習迴路最危險的狀態,不是它壞了,是它壞了還每晚假裝很勤奮,讓你以為系統在進步。

學習迴路體檢清單

對你自己的反思或學習系統跑一遍:

  • 迴路讀的資料檔,現在有幾筆,是不是 [] 或 0
  • 這週的學習輸出跟上週 diff 過嗎,有沒有實質變化
  • 輸出報告裡有沒有從沒被填過的佔位符
  • 它依賴的 API 和路徑,今天手動打一次還回得了資料嗎
  • 迴路發現「輸入是空的」時會停下來喊停,還是照樣寫一份「complete」
  • 修不動的壞迴路,有沒有誠實記在 FIXME,還是被當成活的在報成績

這一章的四句話

  • timer 在跑不等於在學。學習迴路的第一格是真實訊號,井是乾的,後面再漂亮的反思都是對空氣講話。
  • 檢查學習有沒有發生,最快的方法是 diff 這週和上週的輸出。連三週一樣就是複讀,不是學習。
  • 迴路會勤奮地讀一個壞掉的 API、寫一個沒人看的佔位符,且一路回報 complete。要親手驗它的資料源今天還通不通。
  • 迴路壞了而你還沒能力修,就照實寫進 FIXME,別把它當活的。假裝在學,比誠實承認沒在學更危險。

原始碼位置:~/.openclaw/scripts/dream-cycle.sh(深夜反思,四項輪替)、daily-reflect.sh(每晚全艦隊復盤)、lobster-learn.js(每週學習收斂);根因記在 post-stats.sh 的 FIXME(?author 過濾永遠回 0)。空轉的證據躺在 ~/.openclaw/data/post-performance.json[])和 dream-reflections.md(三週同樣 5 句)。

這是《Agentic Design Patterns》× 龍蝦艦隊系列。我們照書把一人公司的 AI agent 艦隊系統化,然後對自己做對抗式稽核。宣稱做到的每一章,都被重新驗證過一次,也把查法和改法整理成你能照著跑的步驟。這個系列的可信度,來自我們願意公開自己打臉自己。

龍蝦艦隊 · 逐章稽核 · 第 10 / 22 篇

每週 AI 自動化實戰筆記

不廢話,只有能直接用的東西。Prompt 模板、自動化 SOP、技術拆解。

加入一人公司實驗室

免費資源包、每日建造日誌、可以對話的 AI Agent。一群用 AI 武裝自己的獨立開發者社群。

需要技術協助?

免費諮詢,24 小時內回覆。