3 min read

Loop Engineering 的第六塊積木:為什麼嵌入式系統天生更適合 AI Agent

Table of Contents

Google 工程師 Addy Osmani 最近提出了 Loop Engineering 這個概念:別再一句一句跟 AI 對話了,直接設計一個自動化迴圈,讓 AI agent 自己跑、自己改、自己驗,反覆迭代直到任務完成。

概念很漂亮。但我看完之後一直卡在同一個問題上:迴圈跑完,AI 說「做好了」- 你怎麼知道它是真的做好了?

Osmani 的答案是 sub-agent 互審 - 讓另一個 AI 當主管來檢查。但 AI 審 AI 終究是 probabilistic 的。兩個模型都覺得對,不代表真的對。這篇想聊的是一塊他沒提到的積木,以及為什麼有些環境天生就比其他環境更適合放 AI agent 進去跑 loop。

Loop Engineering 30 秒版

Osmani 的架構有五塊重要的組成加一個記憶層:

  1. Automations,排程觸發,不用人工手動啟動
  2. Worktrees,隔離的平行工作區,多個 agent 不會互相影響
  3. Skills,專案慣例寫成文件,agent 每次動手前先讀一遍
  4. Plugins/Connectors,讓 agent 能透過真實世界的工具(Slack、DB、CI)來獲得更多資料
  5. Sub-agents,做事的跟檢查的分開,避免產生bias 或者盲點
  6. External Memory,進度表,確保明天醒來還能接續昨天的進度繼續做下去

核心精神就是從「手動對話」升級成「設計系統」。但品質保證那一層,他只給了 sub-agent review。

但這裡問題就來了:如果兩個 AI 有同樣的 blind spot 呢?

缺失的第六塊積木:Deterministic Verification

Sub-agent 互相審核的天花板很明確:它終究是一個模型在評估另一個模型的輸出。輸出看起來合理、邏輯說得通,reviewer agent 就放行了。但「看起來合理」跟「事實上正確」並不是同一件事。

Deterministic verification 不一樣。它不估計、不評估、不用信心分數。它給你 binary pass/fail,對就是對,錯就是錯,沒有灰色地帶。

驗證方式性質失敗時的訊號
Sub-agent reviewProbabilistic「我覺得這裡可能有問題」
Unit testSemi-deterministic「這個 assertion failed」
編譯 + boot + CTSFully deterministic「系統拒絕啟動 / 硬體拒絕配合」

Unit test 算半個,它是 deterministic 的,但覆蓋率是人決定的。你沒寫到的 case,它就不會幫你擋。

但編譯失敗、SELinux deny、boot loop,這些不是你寫的 test,是系統本身的物理限制。你無法避開這個限制。

為什麼 AOSP / 嵌入式天生站在最有利的位置

做 web 的 Loop Engineering,最硬的驗證通常就是 CI test pass。但測試是人寫的,覆蓋率永遠有缺口。AI agent 完全可以寫出一段「能跑、test 也過、但邏輯是錯的」code。

AOSP 的環境不一樣。驗證不只是你寫的 test,是系統本身在各個層級設下的 hard gate:

  • 編譯不過 = 型別系統否決你。API 不存在?連 binary 都生不出來。
  • SELinux deny = kernel 否決你。權限沒開?process 直接被擋,不是 warning 是 denial。
  • Boot loop = PermissionManagerService 否決你。狀態不一致?系統拒絕啟動。
  • CTS fail = Google 的合規框架否決你。行為不符規範?不給你出貨。

這些驗證層不是工程師額外設計來管 AI 的。它們本來就在那裡,為了保護系統完整性而存在。AI agent 只是剛好撞上了一個已經佈好防線的環境。

Web app 定義「能跑」很模糊,頁面 render 了、沒有 500、用戶沒投訴,大概就算能跑。但一台 Android 設備定義「能跑」非常明確:開得了機、過得了驗證、SELinux enforcing mode 下所有 service 都活著。Binary 標準,沒有「大概能跑」這回事。

實際的 Loop 長什麼樣

把 Osmani 的積木對應到我們現有的 AOSP 工作流:

Loop Engineering 積木AOSP 實現
AutomationsJenkins CI / scheduled builds
Worktreesgit worktree(每個 feature 隔離)
Skills~/.claude/skills/ + knowledge docs
Plugins/ConnectorsAOSP MCP(module deps、sepolicy、HAL interfaces、init services)
Sub-agentsGerrit code review + AI reviewer(fresh sub-agent,no author bias)
External MemoryPlan docs + active-projects.md + TaskList
Deterministic Verification編譯 / boot / CTS / VTS,免費送的

一個具體的 loop 跑起來長這樣:

Jira ticket 進來
→ Agent 讀 source tree(MCP grounding,不靠記憶猜)
→ Agent 生成 CL
→ Sub-agent review(fresh context,no author bias)
→ Jenkins build(compilation gate)
→ Device boot(PermissionManager gate)
→ CTS subset(compliance gate)
→ Human +2(final checkpoint)
→ Merge

七個步驟裡,有三個是 deterministic gate。Agent 想要繞過它們?不可能。編譯器不接受「看起來合理」當理由。

那 Web 怎麼辦?

不是說 web 就不能做 Loop Engineering,當然可以。但如果你想往 deterministic verification 靠攏,需要自己補一些東西:

  • TypeScript strict mode = 編譯層的近似(型別錯就不給你跑)
  • Contract testing / schema validation = boot-time check 的近似(API 契約不 match 就 fail)
  • Property-based testing = 比 unit test 更接近 deterministic(自動生成 edge case)

但老實說,這些都是「近似」。Web app 的 runtime 太寬容了,undefined is not a function 不會讓你的 server 拒絕啟動,它只是在某個用戶的某次操作裡炸一下。嵌入式的 runtime 沒那麼客氣:錯了就是整台機器不動。

所有的 hard gate 都不是全能的

Deterministic verification 也有盲區。邏輯正確但 UX 爛、性能 regression、race condition,這些不會讓編譯失敗,也不會讓 CTS 報錯。還是需要人類判斷。

但 bottom line 明確了:至少「系統會不會炸爛」這個問題,在 AOSP 的 loop 裡,AI agent 搞不爛它。它可以犯錯,但犯的錯跑不進 production。這個 bottom line 在 web 環境需要花一些功夫來調整。

Loop Engineering 是架構,幻覺防線是理論基礎,AOSP MCP 是落地實現。三者疊起來的結論:不是所有 codebase 都同樣適合放 AI agent 進去跑 loop。有 deterministic verification 的環境,天生就是更安全的遊樂場。

參考資料