0Pricing
AI Agents · Lekcja

Wygasanie pamięci i garbage collection

Zgodnie z harmonogramem usuwaj stare wspomnienia o małym znaczeniu, aby indeks zachował koncentrację na istotnych informacjach.

Wygasanie pamięci i garbage collection to bezpłatna lekcja AI Agents na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Agents, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Agents zawiera 4 lekcji w sumie.

Pamięć rośnie bez ograniczeń

Bez aktywnego utrzymania magazyn pamięci stale rośnie. Stare, nieistotne wspomnienia zakłócają pobieranie i marnują miejsce.

Pamięć wymaga odśmiecania, tak jak każdy inny zasób.

Dlaczego usuwać wspomnienia?

  • Prywatność — zgodność z żądaniami usunięcia danych wynikającymi z GDPR/CCPA
  • Trafność — stare fakty mogą być już nieaktualne
  • Koszt — magazynowanie wektorów sumuje się przy dużej skali
  • Jakość — rozbudowane indeksy osłabiają trafność wyszukiwania

Strategia 1: TTL

Należy ustawić znacznik czasu wygaśnięcia dla każdego wspomnienia:

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();

Strategia 2: wygaszanie oparte na czasie

Należy zmniejszać poziom zaufania wraz z upływem czasu — starszym wspomnieniom nadawać niższy priorytet:

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}")

Strategia 3: wygaszanie oparte na użyciu

Wspomnienia, które nigdy nie są pobierane, nie są przydatne — należy je usunąć po okresie karencji:

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';

Strategia 4: limit pojemności na użytkownika

Należy ograniczyć liczbę wspomnień na użytkownika; po zapełnieniu usuwać to używane najrzadziej:

MAX_FACTS = 500

SELECT COUNT(*) FROM semantic_facts WHERE user_id = %s;
-- if > MAX_FACTS: delete oldest unused

Kompaktowanie: łączenie podobnych wspomnień

Wiele wspomnień może przekazywać tę samą informację w różny sposób. Należy okresowo grupować je i łączyć:

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)

Rozwiązywanie sprzeczności

Jeśli dwa wspomnienia są sprzeczne, starsze należy oznaczyć jako nieaktualne:

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)

Strategia 5: ważenie według ważności

Niektóre wspomnienia są ważniejsze od innych. Należy przypisać każdemu ocenę:

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 recency

Podsumowywanie w stylu Letta

Letta (MemGPT) kompresuje starą pamięć archiwalną, podsumowując bloki powiązanych faktów, gdy kończy się miejsce:

if archival_size > LIMIT:
    block = oldest_facts(50)
    summary = summarise(block)
    replace(block, summary)

Usuwanie na żądanie użytkownika

Należy udostępnić użytkownikom przycisk „zapomnij o mnie”. Po jego kliknięciu:

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})

Usuwanie miękkie a usuwanie trwałe

W przypadku audytów należy preferować usuwanie miękkie (oznaczyć jako usunięte, zachować w formie zaszyfrowanej) do upływu okresu przechowywania, a następnie usunąć trwale:

ALTER TABLE semantic_facts ADD COLUMN deleted_at TIMESTAMPTZ;
-- queries always: WHERE deleted_at IS NULL

Zaplanowane zadania GC

Należy uruchamiać GC zgodnie z harmonogramem (cron, codzienny worker). Nie należy wykonywać ciężkiego GC w ramach obsługi żądania — zwiększa to opóźnienie dla użytkowników:

# Daily cron at 03:00 UTC
for user_id in all_users():
    decay_confidence(user_id)
    delete_expired(user_id)
    compact_clusters(user_id)

Dlaczego stosować wygaszanie?

Dlaczego poziom zaufania do wspomnień powinien zmniejszać się z czasem?

Podsumowanie

TTL, wygaszanie, eksmisja oparta na użyciu, limity pojemności, kompaktowanie, rozwiązywanie sprzeczności, usuwanie na żądanie użytkownika. Pamięć potrzebuje mechanizmu sprzątającego — należy go zbudować.

Często zadawane pytania

Czy lekcja „Wygasanie pamięci i garbage collection” jest bezpłatna?

Tak — pełny tekst „Wygasanie pamięci i garbage collection” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Agents, przejdź na CoddyKit PRO. Kurs AI Agents zawiera 4 lekcji w sumie.

Co nauczysz się w „Wygasanie pamięci i garbage collection”?

Zgodnie z harmonogramem usuwaj stare wspomnienia o małym znaczeniu, aby indeks zachował koncentrację na istotnych informacjach. Ćwiczysz AI Agents z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć AI Agents?

Nie wymagamy żadnego doświadczenia. AI Agents w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Wygasanie pamięci i garbage collection”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji AI Agents?

Tak. Każda lekcja AI Agents zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Pamięć epizodyczna (historia sesji)
  2. Pamięć semantyczna (zwektoryzowane fakty)
  3. Pamięć proceduralna (biblioteka umiejętności)
  4. Wygasanie pamięci i garbage collection
← Powrót do AI Agents