跳到內容

記憶衰退

可以將人格的長期記憶想像成桌上的便條紙。她在每次回覆前都會重讀桌上的每張便條紙,因此擺滿便條紙的桌面會讓每次回覆變得更長且成本更高。記憶衰退會將一段時間內沒人需要的便條紙移入抽屜。它們並未被丟棄:當對話觸及抽屜中的某張便條紙時,她會再次將它拿出來。這些文件將桌面上的便條紙稱為生效中,抽屜裡的便條紙稱為休眠中。

衰退機制需要嵌入模型;請參閱供應商與模型。若沒有嵌入模型,每則記憶都會保持生效中。

  1. 每則記憶都有一個未使用天數的計數器,初始值為 0。
  2. 在每次回覆時,TomoriBot 會執行一次搜尋。她會將最新訊息轉換為嵌入(一組描述其語意的數字清單;請參閱搜尋如何運作),並將其與她在該對話中可能使用的每則記憶進行比對。
  3. 在伺服器記憶與個人記憶中,最多選出 3 則最接近的相符項目,只要達到合理的相符程度就算作已使用。它們的計數器會歸零。
  4. 該次搜尋中的其他每則記憶計數器都會增加 1 天。無論發送了多少則訊息,此增加最多每天(UTC)發生一次。
  5. 計數達到 7 天時,該記憶便進入休眠。它不再隨著每次回覆一同發送,但依然處於儲存且可搜尋的狀態。
  6. 當後續的訊息與休眠中的記憶相符時,她會將該記憶加入該次回覆中,且其計數器會重設,從而再次恢復為生效中。

處於生效中與被使用是不同的。一則記憶只有在持續成為某些訊息的最佳相符項目時,才會保持生效中。

只有搜尋成功的天數才會計入。沒有對話的日子,或是搜尋失敗的回覆,都不會改變任何狀態,因此不會有記憶僅僅因為時間流逝就進入休眠。

一則伺服器記憶:「Juno 的貓叫做 Mochi」:

對話日發生了什麼計數器狀態
儲存當天儲存0生效中
接續的 6 個對話日聊遊戲相關話題;從未提到 Mochi6生效中
平靜的一週沒有人說話6生效中(暫停計數)
下一個對話日另一次沒有提到 Mochi 的對話7休眠中
之後的某個對話日Juno 詢問「Mochi 最近過得如何?」0於該次回覆喚回,隨後恢復為生效中

伺服器記憶會在該人格於該伺服器中發言的日子老化。個人記憶只有在其擁有者參與對話時才會被搜尋,因此只會在那些日子老化。Bau 每個月造訪一次,因此 Bau 的記憶需要 7 次從未提及該記憶的造訪才會進入休眠,常客們頻繁熱絡的對話日並不會加速消耗它們。

因隱私設定、黑名單、頻道限制或標籤而隱藏的記憶絕不會被搜尋,因此既不會老化,也不會被喚回。

預設情況下,每個人格可容納 100 則伺服器記憶與 100 則個人記憶。當 TomoriBot 要在已滿的清單中儲存新記憶時,她會遺忘一則休眠記憶以騰出空間。從未相符過的記憶會優先被遺忘,其次是距離上次相符最久的記憶。確認訊息會依據伺服器的記憶通知可見性設定,顯示已儲存與已遺忘的內容。

她絕不會遺忘:

  • 全域個人記憶
  • 某人透過 /memories 或 /personal memories 新增或編輯過的記憶

匯入的記憶不受保護。若要保護某則記憶,請使用 /memories 或 /personal memories 將其編輯並儲存一次。受保護的記憶依然可以透過搜尋進入休眠與喚回;保護機制僅防止其被遺忘。

若沒有符合條件的記憶可供遺忘,或是該次回覆無法使用搜尋,儲存請求將會被拒絕。

像「一律用西班牙文回覆 Juno」這樣的記憶很少會與人們說的話相符,因此可能會進入休眠並停止套用。應始終適用的指示請放在人格屬性、人格提示詞,或是常駐(Always On)世界書條目中。

搜尋每次回覆僅需一次嵌入請求,並與文件搜尋共用。喚回的記憶會放在提示詞尾端附近,緊鄰文件,因此提示詞開頭在各次回覆之間保持相同。供應商通常會對重複的提示詞開頭提供折扣,因此喚回機制能保留此折扣。只有在記憶於生效中與休眠中之間轉換後的下一次回覆,提示詞開頭才會變動。

自架者可以設定 MEMORY_DECAY_ENABLED=false 來為整個安裝環境關閉記憶衰退。如此一來,每則記憶都會保持生效中,不會為了騰出空間而遺忘任何內容,且清單全滿時會拒絕新的儲存。文件搜尋仍會正常運作。衰退機制還需要 pgvector 資料庫擴充套件;請參閱手動設定。