從 Boids 到 AI 代理:AI 系統的集群飛行法則
1986 年,Craig Reynolds 提出了一個聽起來微不足道的問題:鳥群是怎麼飛成一團的?這不是哲學問題,而是工程問題。他想在電腦繪圖中呈現逼真的鳥群,又不必替每一隻鳥編寫飛行路徑。
Craig Reynolds 1986 年的 boids 演算法證明了,三條簡單的局部規則(分離、對齊、凝聚)無需任何中央控制就能產生連貫的整體行為,而同樣的動力學也支配著多代理 AI 系統。 遵循局部指令的代理,在規則選得好時湧現出協調,選不好時湧現出混亂。為了修補邊緣案例而不斷加規則,只會讓代理變差,不會變好。
他的答案只用了三條規則。分離(separation):轉向以避免擠壓鄰居。對齊(alignment):轉向鄰居的平均航向。凝聚(cohesion):轉向鄰居的平均位置。沒有領袖,沒有飛行計畫,沒有中央控制器。只有三條在每隻鳥身上局部套用的規則,卻產生出與真實鳥群難以分辨的整體協調。1
四十年後的今天,我運作著一套圍繞十種專職代理角色設計的多代理 AI 系統,它們會研究、辯論並對決策投票。那一夜,一個提示詞動態衍生出 23 個代理——每個又再衍生更多,形成失控的連鎖——而它們對一個錯誤的問題達成了完美共識。那一刻我意識到,自己正在目睹 Reynolds 描述過的同一套動力學:簡單規則湧現出協調,同一套機制也湧現出失敗。
TL;DR
Reynolds 的 boids 演算法證明,三條簡單的局部規則無需中央控制即可產生連貫的整體行為。遵循局部指令的代理(評估這段程式碼、檢查那個安全面向、審視這套架構),在規則選得好時湧現協調,選不好時湧現混亂。為了修補邊緣案例而增加規則,只會讓代理更糟,而非更好。我那次23 個代理失控的事故證明了這一點:一個同時約束「寬度」而不只是「深度」的衍生預算,正是代理版的 Reynolds 分離規則。
三條規則,無盡鳥群
切換上方的規則開關,看看會發生什麼事。三條規則全開時,boids 會自然地成群飛行。關掉分離,牠們會塌縮成一團。關掉對齊,牠們會散成隨機亂動。關掉凝聚,牠們會各自飄離,卻仍維持局部一致的航向。每條規則都是必要的,但沒有任何一條單獨就足夠。
Reynolds 在 1987 年的 SIGGRAPH 上以〈Flocks, Herds, and Schools: A Distributed Behavioral Model〉發表了這套模型。1 這篇論文改變了電腦繪圖。boids 之前,動畫鳥群得靠手工編排路徑;boids 之後,鳥群由規則自行湧現。十多年後的 1998 年,Reynolds 因這項成果獲頒美國影藝學院(Academy of Motion Picture Arts and Sciences)的科學與工程獎。2
更深層的貢獻並不在那三條規則本身,而在於它證明了:整體協調不需要全域知識。每隻 boid 只知道緊鄰的鄰居,沒有任何一隻擁有整個鳥群的地圖,也沒有任何一隻知道鳥群要去哪裡。鳥群根本沒有目的地。看似協調一致的移動,其實是局部決策堆疊出的整體樣態。
從像素到流程
從 boids 到 AI 代理的對應並非比喻。NeurIPS 2025 的一篇工作坊論文〈Revisiting Boids for Emergent Intelligence via Multi-Agent Collaboration〉就明確把 boids 原理套用到多代理系統上。3 該論文把 Reynolds 的規則寫成自然語言指引,用於一個協作式的工具打造環境:對齊與分離源自鄰居的工具中繼資料,凝聚則靠注入前一輪的全域摘要。
我的對應更簡單,而且是在讀到那篇論文之前、從實際建系統的過程中得出的:
| Boids 規則 | 代理端的對應 | 它防止了什麼 |
|---|---|---|
| 分離 | 衍生預算:限制每個父代理底下同時活躍的子代理數 | 大量代理堆擠在同一個子問題上 |
| 對齊 | 共用評估標準:所有代理採用同一套證據門檻 | 代理各自朝互不相容的品質定義努力 |
| 凝聚 | 共識協定:代理向群體結論收斂 | 代理飄移到不相干的枝節上 |
這個類比並不完美。boids 的規則是連續的(朝向平均航向轉),代理的規則是離散的(最多衍生 12 個子代理)。boids 活在空間座標裡,代理活在問題空間裡。但結構性的洞見成立:由每個代理獨立套用的局部規則,會產生連貫的群體行為。而失效模式也如出一轍。
23 個代理一起答錯問題的那一夜
2026 年 2 月。我要求代理「調查如何改進掛鉤派發系統」。代理把自己的信心值評為 0.58,因而觸發了審議系統。三個研究代理隨即衍生。每一個都找到子問題,又各自衍生自己的研究代理。那些代理再衍生更多。
七分鐘後:23 個活躍的代理程序。API 額度燒掉 4.80 美元。Token 消耗以每分鐘 0.70 美元的速度往上爬。
遞迴防護只追蹤深度(父代理生子、子代理生孫),卻沒有追蹤寬度(父代理生 12 個子代理,每個又各生 12 個)。深度上限 3 從未被觸發,因為代理是橫向擴散的。我只好手動終止所有程序。
每個代理都同意掛鉤派發系統需要改進。每個代理都提出了合理的變更。卻沒有任何一個代理質疑:這場調查本身的範圍是否正確。
這個結果展示了:當你有凝聚與對齊、卻沒有分離時會發生什麼事。代理們朝同一個結論收斂(凝聚),也對齊了同一套評估標準(對齊),但沒有任何機制阻止它們一窩蜂擠到同一個子問題上。用 Reynolds 的話說,23 隻 boid 佔據了空間中的同一個點——而這正是分離規則明確要防止的行為。
衍生預算就是分離規則
修正只花了 20 分鐘:一個追蹤每個父代理底下活躍子代理總數、上限 12 的衍生預算。4 這是寬度約束,不只是深度約束。
實作是一個計數器,而不是一條規則:
# Simplified spawn budget (actual implementation uses hooks)
active_children = count_active_agents(parent_id=self.id)
if active_children >= MAX_CHILDREN: # MAX_CHILDREN = 12
return "Budget exhausted. Synthesize existing findings instead."
# else: allow spawn
掛鉤會確定性地執行這條限制。代理沒辦法像繞過「盡量別衍生太多代理」這類提示詞指令那樣,用理由說服自己繞過一個計數器。計數器只有放行或攔阻,不接受申辯,也沒有詮釋空間。
用 boids 的語彙說,衍生預算就是分離規則:別擠著你的鄰居。用代理的語彙說:同一個子問題上別放超過 N 個代理,因為第 N+1 個只會增加成本,不會增加觀點。23 個代理那次事故讓我明白,分離是三條規則中最重要的一條。少了它,對齊與凝聚會變得病態:一群代理興高采烈地朝同一個錯誤答案收斂。
Reynolds 演算法的常見實作,正是基於這個理由,把分離力的權重設得比對齊或凝聚高出 1.5 到 2 倍——這個慣例記載於 Reynolds 自己的後續論文〈Steering Behaviors for Autonomous Characters〉(GDC 1999),文中他討論了以優先序組合各種操控力,並指出避免碰撞(也就是分離)通常享有最高優先權。8 在我的系統裡,掛鉤負責執行衍生預算(確定性,代理再怎麼找理由也繞不過去),提示詞與脈絡則負責塑造對齊與凝聚(較軟、可彎折)。最硬的約束,交給最硬的執行手段。
為什麼規則越多,代理越差
回到上面那個 boids 模擬。現在想像加上第四條規則:「避開畫布中央」。第五條:「偏好上半部」。第六條:「每 100 幀反向一次」。
每一條單獨看都合情合理。合在一起,卻毀了整個鳥群。boids 在互相競爭的力之間顫抖,無法同時滿足所有約束。優雅的集群飛行塌縮成雜訊,因為每條規則都會產生一個力向量,而當六個力向量朝不同方向拉扯時,合成後的運動基本上就是隨機的。
我在代理編排上觀察到一模一樣的模式。我的審議系統早期版本有一大堆精緻的規則:最低研究深度、強制引用數量、必須生成反論、強迫進行魔鬼代言人回合。每條規則都改善了某個特定的失效案例。合在一起,卻造就出一批把 token 花在滿足規則、而非解決問題上的代理。舉個具體例子:「強制反論」規則要求每個代理都得反駁自己的發現;「最低引用數」規則要求每項主張都要有三個來源。當某個代理真的產出了一個貨真價實的反論,引用規則就逼它去找三個支持反方立場的來源——結果有時候,錯誤答案的證據反而比正確答案更充分。兩條規則交互作用的結果,是獎勵了「引註完備的唱反調」,而非正確的分析。
我先前記錄過的複利式工程哲學解釋了這件事在系統層級為何會發生:每條新規則都會與既有的每條規則產生交互作用,形成組合爆炸式的複雜度。十條規則不是十個約束,而是最多 45 組兩兩交互作用。系統行為變得更難預測、更難除錯,也更容易湧現失敗。
Reynolds 的原始論文其實隱含地明白這一點。原論文只提出三條規則。Reynolds 也探索過其他行為(避障、目標追尋),但把核心的集群模型維持在最小狀態。若要加上第四條核心規則,就得重新平衡全部四條的權重——而這個問題會隨著每一次新增而組合式地變大。
給代理的啟示是:從能產生你要的行為的最小規則集出發。只有當你觀察到現有規則都無法處理的特定失效時,才增加規則。而每加一條規則,都要檢查它是否干擾了其他規則。
去中心化即架構
沒有中央控制器並不是 boids 的侷限,那就是架構本身。鳥群之所以能協調,正是因為沒有任何一隻鳥對其他鳥擁有權威。一旦某隻鳥成了領袖,系統就會變脆——依賴那隻鳥的判斷,也隨牠的失誤而崩潰。這個模式呼應了結構性的「無」在其他領域所創造的分散式韌性原理。5
同樣的模式也散見於各種多代理 AI 系統。Microsoft 的 AutoGen(v0.4+,2025)透過對話協定而非中央編排來協調代理——每個代理依據局部脈絡決定何時發言,框架也明確避免指派「主導」代理。6 CrewAI(v0.28+,2025)以其「crew」抽象定義代理角色與移交規則,但不賦予任何單一代理凌駕他者的權限。7 在我的審議系統裡,沒有任何代理擁有否決權。每個代理獨立評估,共識協定再彙整它們的發現。若某個代理產出垃圾,其餘代理會以票數壓過它。中央控制只會把去中心化協調所消除的單點故障又請回來。
三條規則奏效之時:一次安靜的成功
23 個代理那次事故之所以令人印象深刻,是因為它敗得很戲劇化。成功則安靜得多,也頻繁得多。
加上衍生預算一週後,我要求系統「評估部落格的 A/B 測試基礎設施應該採用伺服器端還是用戶端的變體指派」。審議系統衍生了三個研究代理。代理 1 調查伺服器端做法(cookie 式、會話式)。代理 2 調查用戶端做法(localStorage、URL 參數)。代理 3 評估混合模式。每個代理獨立作業(凝聚:朝同一個評估問題收斂),採用相同的證據標準(對齊:共用的品質準則)。衍生預算則阻止了任何代理為這項任務再衍生自己的子代理(分離:不擠成一團)。
三個代理交回了各自的發現。代理 1 傾向伺服器端指派,理由是 SEO 一致性。代理 2 傾向用戶端,理由是實作簡單。代理 3 找出一種與既有程式碼模式相符的混合做法。共識協定綜合了這些發現:部落格採伺服器端指派(SEO 在此至關重要),互動元件則開放用戶端覆寫(那裡本來就跑著 JavaScript)。
整場審議耗時四分鐘,花費 1.40 美元。沒有代理衍生子代理,也沒有代理過早附和其他代理。三份建議彼此獨立,而且真正互補。這套三規則架構產生的,正是 Reynolds 描述過的行為:局部決策,協調的整體產出。
其他領域裡的湧現模式
「簡單規則、湧現行為」這個模式並非 boids 或代理獨有。只要局部決策會匯聚成整體結構,它就會出現:
漢明碼展示了一種相關的湧現形式。把同位元策略性地擺在 2 的冪次位置上,就構成一個系統:錯誤的位置會從所有為「1」的位元位置做 XOR 之後自行浮現。沒有任何一個位元知道錯誤在哪裡,錯誤位置是從結構中湧現的。單獨一個同位元幾乎什麼都告訴不了你;擺在正確位置上的多個同位元,卻能告訴你一切。
Conway 的生命遊戲(Game of Life)以套用在網格上的四條規則,產生了滑翔機、振盪器,乃至圖靈完備的運算。它的規則比 boids 更簡單(一個細胞若有 2 到 3 個鄰居就存活,否則死亡),湧現出的複雜度卻沒有上限。
每一個案例的模式都相同:局部規則、沒有中央協調者、湧現出的整體行為。而每一個案例也都適用同一種失效模式:規則加得太多,系統就會從優雅的湧現塌陷成混亂的互相干擾。
重點整理
給設計多代理系統的工程師:
-
三條規則造就集群,四條可能不行。 Reynolds 的洞見是:三條選得好的規則,就足以產生湧現式協調。加上第四條會製造干擾,反而可能摧毀前三條所產生的行為。從能產生你要的行為的最小規則集出發。
-
分離是最重要的一條規則。 少了它,對齊與凝聚會變得病態,代理會一起收斂到同一個錯誤答案上。衍生預算(寬度約束)是我對自己的多代理系統做過影響最大的單一變更。
給打造分散式系統的架構師:
-
沒有領袖,本身就是架構。 中央控制製造單點故障;透過局部規則達成的去中心化協調更有韌性。除非有明確理由,否則設計代理系統時別安排「主導代理」。
-
規則越多,交互作用越多。 N 條規則最多產生 N(N-1)/2 組兩兩交互作用,每加一條,行為就更難預測。只有在觀察到現有規則都無法處理的特定失效時,才增加規則。
練習:畫出你自己的系統。 把你目前的多代理系統(或你打算打造的系統)畫成圖。針對每個代理,指認它遵循 Reynolds 三條規則中的哪幾條。缺了分離,就加上衍生預算或並行上限;缺了對齊,就定義共用的評估標準;缺了凝聚,就補上一道綜合步驟。這張圖會告訴你,你的系統最容易栽在哪一種失效模式上。
FAQ
什麼是 boids?它們對 AI 代理設計為何重要?
boids 是遵循三條局部規則的模擬代理(原文為「bird-oid objects」,意即「類鳥物件」):分離(避免擠壓鄰居)、對齊(轉向鄰居的平均航向)與凝聚(轉向鄰居的平均位置)。Craig Reynolds 於 1987 年的 SIGGRAPH 提出這個概念。它們之所以重要,是因為證明了複雜且協調的整體行為,可以在沒有任何中央控制器的情況下,從簡單的局部規則中湧現——這個原理直接適用於多代理 AI 系統、群體機器人與分散式運算。
boids 規則如何套用到 AI 代理編排上?
每條 boids 規則都對應到一項代理設計約束。分離變成衍生預算(限制同一個子問題上有多少代理在跑)。對齊變成共用的評估標準(所有代理採用同一套品質門檻)。凝聚變成共識協定(代理向群體結論收斂)。這個對應是結構性的,不是比喻性的:兩套系統都是由每個代理獨立套用局部規則,進而產生湧現式協調。
為什麼規則越多,多代理 AI 系統反而越差?
每條新規則都會與既有的每條規則交互作用,形成組合爆炸式的複雜度。十條規則最多產生 45 組兩兩交互作用。代理把 token 花在滿足規則約束上,而不是解決問題。boids 也有同樣的動態:加上第四條規則(例如「避開中央」)會逼得原本三條全部重新平衡,優雅的集群行為往往退化成顫抖,因為代理正試圖同時滿足互相競爭的力。
什麼時候該用中央控制,而不是湧現式協調?
當你需要嚴格的順序保證(循序的管線階段)、失敗必須被確定性地處理(金融交易),或系統需要的是單一權威決策而非共識(合併衝突的解決)時,採用中央控制。當代理可以獨立評估、冗餘能提升可靠度,而且沒有任何單一代理需要掌握全貌才能把事情做好時,採用湧現式協調。
本文屬於互動式探索系列——在這裡,演算法與視覺直覺相遇:從會自己抓出錯誤的漢明碼,到沒有領袖也能成群飛行的 boids。代理編排的模式,在Ralph 系統與多代理審議中有詳細說明。後設認知程式設計層則為上述的代理間協調,補上單一代理的自我監控。
-
Reynolds, C. W. (1987). “Flocks, Herds, and Schools: A Distributed Behavioral Model.” SIGGRAPH ‘87: Proceedings of the 14th annual conference on Computer graphics and interactive techniques, pp. 25-34. red3d.com/cwr/boids/ ↩↩
-
Reynolds 於 1998 年因其在行為動畫上的貢獻——奠基於 boids 的成果——獲頒美國影藝學院的科學與工程獎。該演算法自《蝙蝠俠大顯神威》(Batman Returns,1992)起便用於電影製作。oscars.org/sci-tech/ceremonies/1998。另可參閱 Reynolds 的履歷:red3d.com/cwr/resume.html。 ↩
-
“Revisiting Boids for Emergent Intelligence via Multi-Agent Collaboration.” NeurIPS 2025 Workshop: Scaling Environment. openreview.net/pdf?id=46LJ81Yqm2。該論文把 boids 規則當作自然語言指引,供遵循「觀察—反思—建造」循環的代理使用。 ↩
-
衍生預算的實作記載於Ralph 系統。關鍵的架構決策是:以掛鉤(確定性)而非提示詞(建議性)來執行寬度限制。被指示「限制衍生」的代理會找理由越過上限;一個計算活躍子代理數、直接攔下衍生 API 呼叫的掛鉤則不會。 ↩
-
老子,《道德經》第十一章。英譯:D.C. Lau, Penguin Classics, 1963。該章完整段落談車輪的轂、房間的牆與陶器的坯:三個例子中,可用之處都來自「無」,而非材料本身。完整探討請見「無」即結構。 ↩
-
Microsoft AutoGen,github.com/microsoft/autogen。AutoGen v0.4(2025 年發布)引入了
GroupChat抽象,讓代理在沒有指定領袖的情況下參與對話。該框架的文件明確寫道:「AutoGen enables a group of agents to collectively perform tasks that a single agent alone cannot.」(AutoGen 讓一群代理協力完成單一代理無法獨力完成的任務。)決定發言順序的是對話協定,而非中央控制器。 ↩ -
CrewAI,github.com/crewAIInc/crewAI。CrewAI v0.28+(2025)以角色化代理與任務移交規則來定義 crew。
process參數支援「sequential」(固定順序)與「hierarchical」(由管理者分派)兩種模式,但即使在 hierarchical 模式下,管理者代理也只是協調而非凌駕——它無法更改其他代理的輸出,只能要求修訂。文件:docs.crewai.com。 ↩ -
Reynolds, C. W. (1999). “Steering Behaviors for Autonomous Characters.” Game Developers Conference 1999 Proceedings, pp. 763-782. red3d.com/cwr/steer/。Reynolds 在文中討論了優先序化的力組合:分離(避免碰撞)會最先被處理,並在對齊或凝聚套用之前先耗用可用的操控力。這套優先序機制確保「避免擠壓」永遠享有優先。 ↩