記憶の減衰とガベージコレクション
関連性の低い古い記憶を定期的に忘れ、インデックスを重要な情報に集中させます。
「記憶の減衰とガベージコレクション」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Agents学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Agentsコースには全4レッスンが含まれています。
メモリは際限なく増加する
積極的にメンテナンスしなければ、メモリストアは増え続けます。古くて関係のないメモリは検索結果にノイズを混ぜ、ストレージを無駄に消費します。
メモリには、他のリソースと同じようにガベージコレクションが必要です。
メモリを削除する理由
- プライバシー — GDPR/CCPAの削除リクエストに対応するため
- 関連性 — 古い事実は、現在では正しくない可能性が高いため
- コスト — ベクトルストレージのコストは規模に応じて積み上がるため
- 品質 — 肥大化したインデックスによって、検索結果の関連性が薄まるため
戦略1:TTL
各メモリに有効期限のタイムスタンプを設定します。
ALTER TABLE semantic_facts ADD COLUMN expires_at TIMESTAMPTZ;
-- short-lived
INSERT INTO semantic_facts (..., expires_at) VALUES (..., NOW() + INTERVAL '7 days');
-- garbage collect
DELETE FROM semantic_facts WHERE expires_at < NOW();戦略2:時間ベースの減衰
時間の経過に伴って信頼度を下げ、古いメモリの優先順位を下げます。
import math
def decayed_confidence(original, age_days, half_life_days=30):
return original * math.exp(-age_days * math.log(2) / half_life_days)
# Then retrieval filters: WHERE decayed_confidence > 0.3
for age in [0, 30, 60, 90]:
print(f"Age {age} days -> confidence {decayed_confidence(1.0, age):.3f}")
戦略3:使用状況ベースの減衰
一度も取得されないメモリは役に立たないため、猶予期間の経過後に削除します。
ALTER TABLE semantic_facts ADD COLUMN last_used_at TIMESTAMPTZ DEFAULT NOW();
-- update on retrieval
UPDATE semantic_facts SET last_used_at = NOW() WHERE id = ANY(:retrieved_ids);
-- gc
DELETE FROM semantic_facts WHERE last_used_at < NOW() - INTERVAL '90 days';戦略4:ユーザーごとの容量上限
ユーザーごとのメモリ数を制限し、上限に達したら最も使用されていないものを追い出します。
MAX_FACTS = 500
SELECT COUNT(*) FROM semantic_facts WHERE user_id = %s;
-- if > MAX_FACTS: delete oldest unused圧縮:類似するメモリの統合
複数のメモリが、異なる表現で同じ内容を述べている場合があります。定期的にクラスタリングして統合します。
def compact(user_id):
facts = all_facts(user_id)
clusters = cluster_by_embedding(facts, threshold=0.85)
for cluster in clusters:
merged = llm.invoke(f'Merge these into one canonical statement: {cluster}')
replace_with_merged(cluster, merged)矛盾の解決
2つのメモリが矛盾する場合は、古いほうを無効としてマークします。
def resolve(user_id, new_fact):
similar = retrieve(user_id, new_fact, k=5)
for s in similar:
if llm_says_contradicts(s, new_fact):
mark_obsolete(s.id)
save(new_fact)戦略5:重要度による重み付け
すべてのメモリが同じように重要とは限りません。それぞれをスコアリングします。
importance_prompt = 'Rate the importance of this fact for future interactions (0-1):\n{fact}'
for fact in facts:
score = float(llm.invoke(importance_prompt.format(fact=fact)).content)
update_importance(fact.id, score)
# Retrieval: weight by importance and recencyLetta方式の要約
Letta(MemGPT)は、ストレージがいっぱいになると、関連する事実のブロックを要約して古いアーカイブメモリを圧縮します。
if archival_size > LIMIT:
block = oldest_facts(50)
summary = summarise(block)
replace(block, summary)ユーザーによる削除
ユーザーが「自分に関する情報を忘れる」ボタンを使えるようにします。クリックされたら、次の処理を行います。
def forget_user(user_id):
conn.execute('DELETE FROM semantic_facts WHERE user_id = %s', (user_id,))
conn.execute('DELETE FROM episodes WHERE user_id = %s', (user_id,))
vector_db.delete(filter={'user_id': user_id})論理削除と物理削除
監査のため、保持期間が過ぎるまでは論理削除(削除済みとしてマークし、暗号化した状態で保持)を優先し、その後に物理削除します。
ALTER TABLE semantic_facts ADD COLUMN deleted_at TIMESTAMPTZ;
-- queries always: WHERE deleted_at IS NULLスケジュール実行するGCジョブ
GCはスケジュール(cronや日次ワーカー)に従って実行します。重いGCをインラインで実行しないでください。ユーザーへの遅延が増加します。
# Daily cron at 03:00 UTC
for user_id in all_users():
decay_confidence(user_id)
delete_expired(user_id)
compact_clusters(user_id)減衰させる理由
時間の経過に伴ってメモリの信頼度を減衰させるのはなぜでしょうか。
まとめ
TTL、減衰、使用状況に基づく追い出し、容量上限、圧縮、矛盾の解決、ユーザーによる削除です。メモリには掃除役が必要なので、構築しましょう。
よくある質問
「記憶の減衰とガベージコレクション」レッスンは無料ですか?
はい。「記憶の減衰とガベージコレクション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。
「記憶の減衰とガベージコレクション」で何を学びますか?
関連性の低い古い記憶を定期的に忘れ、インデックスを重要な情報に集中させます。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Agentsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「記憶の減衰とガベージコレクション」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Agentsレッスンでコードを書いて実行できますか?
はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- エピソード記憶(セッションごとの履歴)
- 意味記憶(ベクトル化された事実)
- 手続き記憶(スキルライブラリ)
- 記憶の減衰とガベージコレクション