Lesson 09 · 協作

多個 agent 透過文件信箱通信

從 subagent 到 teammate:一次 → 持久;無名 → 有名字;無通訊 → 文件信箱。

⏱ 約 12 分鐘 · 📝 3 個可互動元件 · 🧑‍💻 基於 shareAI-lab · s09_agent_teams.py

Subagent 和 Teammate 有什麼不同?

S04 的 subagent 簡單粗暴:spawn → 跑 → 回 summary → 死。一次性,沒有名字,父子之間沒有雙向通訊。

s09 的 teammate 是一個有名字、能被重複喚醒、能收發訊息的獨立 agent:

subagent (s04):  spawn -> execute -> return -> destroyed
teammate (s09):  spawn -> work -> idle -> work -> ... -> shutdown

兩個機制的用途不同:

  • subagent 適合「做一個具體探索」(如 review 一個 PR)。
  • teammate 適合「持續承擔一個角色」(例如長期的 reviewer,每當有新 commit 就被叫醒)。

郵箱是一個 JSONL 文件

團隊成員之間怎麼溝通? s09 用的是最土的機制:append-only JSONL 檔

.team/
  config.json          # 团队花名册
  inbox/
    alice.jsonl        # 给 alice 的信都 append 到这里
    bob.jsonl
    lead.jsonl

send 就是 open("alice.jsonl", "a").write(msg);read 就是讀完整個檔案、parse JSONL、然後 truncate 清空(drain 語意)。

為什麼用文件,不用記憶體佇列? 文件天然持久。 agent 重新啟動、進程崩潰、甚至機器重啟——郵件都還在。加上它可讀可 grep,調試體驗非常好。

看一則訊息從 lead 到 alice 的完整流程

下面 widget 讓你給 alice 發一條訊息,看看每一步磁碟上發生了什麼事。

5 種訊息類型

s09 定義了 5 種訊息類型(VALID_MSG_TYPES),但只實現了前兩個,後三個在 s10 協議課才補上:

  • message — 普通文字訊息。
  • broadcast — 發給自己以外所有 teammate。
  • shutdown_request / shutdown_response — 請求/回應優雅關機(s10)。
  • plan_approval_response — 計畫核准(s10)。

為什麼聲明了但不實現?因為 s09 想把「協定擴充」做成開放式-訊息類型是枚舉,新加一個只需要在字典裡加一條、在 _exec 路由裡處理。

Interactive

Widget 1 · Mail Flow · 一則訊息從 lead 到 alice

點 Send,追蹤檔案系統上的每個步驟:lead.send → append alice.jsonl → alice 下一輪讀取 inbox → truncate。

Interactive

Widget 2 · Team Config · 誰在線上、狀態什麼

.team/config.json 是團隊花名冊。做幾個操作(spawn / message / shutdown),看配置怎麼改變。

操作
.team/config.json

        
Interactive

Widget 3 · Subagent vs Teammate · 決定用哪一個

6 個任務場景,決定用 subagent (spawn-then-die) 還是 teammate (spawn-then-live)。思考任務是否"一錘子買賣"。

答对 0 / 6