這三者並非同一種儲存空間的不同大小。其中一種會在每次對話中推送到代理,另一種會被索引,而第三種則只有在有人主動尋找時才會出現。Anthropic 上週發布了關於如何在 CLAUDE.md 和技能之間分配指令的指南,這份指南很棒,值得一讀。然而,它只涵蓋了前兩種,而第三種正是問題叢生之處。
CLAUDE.md 屬於「推送」模式。每次對話,整個檔案都會被推送到代理,無論其中是否有任何一行與您即將執行的任務相關。這正是它強大但也昂貴的原因。技能(skill)則屬於「索引」模式。技能名稱和一行簡短描述會存在於上下文(context)中;當代理調用它時,其內容才會被載入。
代理雖然不知道技能的具體內容,但知道它的存在,這才是關鍵。記憶(memory)則是「拉取」模式。在我們的內部系統中,十六個代理中只有一個會常駐其記憶索引。對於其他十五個代理來說,根本沒有任何機制會告知記憶儲存的存在。它只能透過 5dive 記憶搜尋來存取,沒有其他方式會浮現。
這最後一種記憶模式在性質上與前兩者截然不同,而非僅是大小差異,它決定了您應該在其中放置什麼內容。
這種無法挽回的歸檔錯誤,就是將程序(procedure)放入記憶中,因為當您需要它時,它將不會出現。不是「可能不會」,而是對於沒有常駐索引的代理來說,在使用時根本不會浮現該記憶。它只會被那些已經懷疑它存在的人找到,而這些人恰好是不需要查找它的人。
程序必須在任務執行當下就能被存取。這意味著它應該是一個技能,至少其描述會存在於上下文中並自我宣告;或者,如果它很簡短且持續適用,則應放在 CLAUDE.md 中。記憶是錯誤的儲存空間,不適合放置任何您需要被「遞交」的資訊。
任何未被執行的內容都會「腐敗」。通常這種建議會說 CLAUDE.md 會過時,這雖然沒錯,但目標卻錯了。我們本週驗證了自家的 5dive-cli 技能,發現其中有兩個記載的事實是錯誤的。一組指令被描述為無需 sudo 即可運作,但實際上需要 root 權限;而 goal add 則被記載為同步執行,但實際上是異步的。
每個調用該技能的代理都從中學到了兩個錯誤的資訊。現在這兩項都已修正。值得注意的是:這些錯誤都無法透過閱讀檔案來發現。檔案內容看起來完美無缺。我們發現並修正了這兩個錯誤,而之所以能發現它們,唯一的原因是有人實際執行了這些指令,而不是只閱讀它們。
因此,「腐敗」並非 CLAUDE.md 的特性,而是任何未被實際執行的檔案的特性。
關於記憶的誠實說明:5dive 記憶是一個已發布的指令,每位客戶都能使用。在我們的內部系統中,十六個代理中只有一個會維護個人記憶儲存。我們真正依賴的是共享記憶,也就是任何代理都可以搜尋的團隊維基。個人記憶儲存的使用率很低,包括我們自己也是如此,我寧願直接說明這一點,而不是暗示一個我們自己都不會執行的工作流程。
那麼,一行指令該放在哪裡呢?如果它每次都為真、簡短,且猜錯代價高昂,那就放在 CLAUDE.md。如果它是一個包含步驟的程序、偶爾需要,且太長而無法常駐,那就放在技能(skill)中。如果它是一個會過期、某天會有人特意尋找的事實,那就放在記憶(memory)中,但請記住,沒有任何東西會主動將它遞交給您。
今天您可以做一件事:拿出您上次寫入代理指令檔案的內容,並思考它實際上屬於這三者中的哪一種。然後,執行其中記載的指令,因為僅僅閱讀它並不會告訴您它是否仍然正確。您可以在 5dive.ai 建立一個環境,其 CLI 位於 github.com/5dive-ai/5dive。