許立衡的個人網站

Dispositions, Knowledges, and Experiences

我今天還在理解 agent 的記憶機制。總之呢我覺得上一篇文章寫到的四種記憶類型我還是很不理解,所以就去找了 CoALA(Cognitive Architectures for Language Agents)這篇 essay 來讀,發現跟我原本理解的其實差蠻多的。

我現在的理解是這樣的:記憶分三種型別(procedural,semantic,以及 episodic),然後有兩種狀態(working memory 與 long-term memory)。也就是說,每一種型別的記憶也都有分「已經載入到 context(對話)裡的」以及「還沒載入到對話裡的」兩種。畢竟不管是哪種記憶,都要先載入變成 working memory 之後才會發生作用。

那麼,這三種記憶型別到底怎麼分呢?我發現原本論文裡面講解的更清楚。簡單來說就是:

如果用自然語言來看的話,大概可以這樣分:

我的文法學不是很好,可能有錯,但反正就是這種感覺。

另外一種譬喻法是 coding 的:

所以我現在的 agent 記憶套裝就變得很簡單,有三份文件:行為規範(procedural memory/depositions),知識庫(semantic memory/knowledges),以及日誌(episodic memory/experiences),然後每份文件再分成初始載入(eager loading)與按需載入(lazy loading)兩種層級。然後 Craft 這種 outliner 意外的適合做載入時間區分,就是把 lazy 的東西丟進子頁面就可以了。

我覺得是蠻有趣的,因為 CoALA 應該是奠基於對人類記憶的分析架構之上。然後雖然三種記憶可能會有不同的實作方式,比如常常被用到的就是 mem0 那種向量或者語意索引,RAG 之類的,但我覺得 .md 或者 Craft 文件這類純文字格式(Craft 的優勢是內建搜尋與 block 等級定位),搭配上自然語言,其實就已經很夠用了。有的時候語意索引如果切太碎可能還會有搞丟脈絡的風險。

這個時候自然語言的訓練突然就派得上用場了。