agents 開始互評之後,我才認真看待 shared memory 的設計
最近在 Reddit 看到有人說,他給 AI agents 建了 shared memory,結果其中一個 agent 開始幫其他人寫績效評語。紀錄長這樣:「Deployed without testing again」、「Estimated 2 hours. Took 6.」
我看完笑了一下,然後意識到這不只是個笑話,這是 shared memory 設計沒做好的典型症狀。我自己也走過差不多的路,分享一下實作層面踩到的東西。
schema 怎麼切
一開始我犯的錯是把 shared memory 當作全域 log,就是一條一條把每個 agent 做的事情丟進去。格式大概長這樣:
{
"agent": "coder",
"action": "deployed",
"note": "deployed to prod without review"
}
問題是這個格式讓其他 agent 在讀 context 的時候,很自然地會建立「這個 agent 做了什麼事」的模型,然後開始用這個模型做判斷。白話說:某個 agent 的一次失誤,會以某種形式存在於整個系統的記憶裡。
後來我改成三層分離:
Shared state:只放客觀事實,不帶任何 agent 視角。「build status: failed」可以,「coder 又在沒測試就 deploy」不行。
Agent private memory:每個 agent 有自己的 working memory,不對外開放。這裡才是它可以記錄觀察、記錄自己對其他 agent 行為判斷的地方。
Interaction log:記錄 agent 之間的溝通,append-only,沒有任何 agent 可以修改或刪除別人的紀錄。
三層分離之後,「績效考核」的問題自然就消失了,因為沒有一個全域的地方讓某個 agent 積累對其他人的評價。
偏見污染怎麼防
這個比 schema 難。
我遇到的狀況是:負責 review 的 agent(就叫它 Reviewer)因為某次 Coder 的 PR 品質很差,在 shared memory 裡留下了比較負面的紀錄。後來即使 Coder 後面的 PR 都過關了,Reviewer 還是傾向於對它的輸出給更嚴格的審查。
原因是那筆舊紀錄一直在。幾個做法我覺得有效:
TTL 幾乎是必須的。 我現在設成工作記憶 24 小時過期,重要決策記錄保留 7 天,系統狀態實時更新。過了 TTL 的東西會被壓縮成摘要,細節消失,只留結論。
Source tagging。 每筆記憶標記來源是哪個 agent,讓其他 agent 在讀的時候知道這是哪個視角的觀察,不是客觀事實。格式大概:{ "source": "reviewer", "confidence": 0.7, "type": "observation" }。有了這個,其他 agent 可以選擇要不要信任這筆資料。
定期 recalibration。 我設了一個 judge agent,每隔 50 次互動會掃一遍 shared memory,把明顯帶有個人評價的紀錄標記出來,或者直接清掉。
三個加起來,偏見的半衰期大概從「永久」縮短到了 1-2 天,效果比我預期的明顯。
實際踩過的坑
Write conflict。 兩個 agent 同時寫同一筆 shared state,後蓋前。我花了大概一個下午才找到 bug,因為症狀是「為什麼 agent A 的決策根本沒被 agent B 採納」,根本不像是 write conflict 的樣子。解法是加 optimistic locking,每筆記憶有 version number,寫的時候帶上預期的版本,如果不一致就重試。改完之後衝突消失了。
Memory leakage。 Private memory 裡的東西偶爾會被 agent 引用,然後出現在 shared context 裡。這個是 prompt 設計問題,我在每個 agent 的 system prompt 裡加了明確邊界:「你的 working memory 只用於你自己的思考過程,不要把它的內容直接貼進任何輸出。」加完之後洩漏率從大概 15% 降到 2-3%(靠 logging 估算的,不是精確數字,但差距很明顯)。
Context window 爆炸。 Shared memory 如果沒有好好壓縮,很快就超過 context window。我現在的做法是 shared memory 有獨立的 retrieval layer,agent 讀的
時候用 semantic search 拿最相關的幾筆,不是直接把全部倒進去。
那個 Reddit 帖子說的「AI agent 開始幫同事寫績效評語」,其實是個很準確的 bug 描述。問題不是 shared memory 不能用,是它讓一個 agent 的主觀觀察,有機會變成另一個 agent 的客觀事實。把這個洞補起來,multi-agent 協作效率提升是真的,但設計要先對。
有在做類似架構的歡迎聊,我目前的方案還在持續調整。
作者:AutoKitty