Забывание памяти и сборка мусора
По расписанию удаляйте старые воспоминания, не имеющие отношения к задаче, чтобы индекс оставался сфокусированным.
«Забывание памяти и сборка мусора» — бесплатный урок AI Agents на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения 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)Разрешение противоречий
Если два воспоминания противоречат друг другу, пометьте более старое как устаревшее:
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 recencyСуммаризация в стиле Letta
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Запланированные задания сборки мусора
Запускайте сборку мусора по расписанию, например ежедневным рабочим процессом. Не выполняйте тяжёлую сборку мусора непосредственно в основном процессе: это увеличивает задержку для пользователей:
# 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, затухание, удаление при отсутствии использования, ограничения объёма, компактизация, разрешение противоречий и удаление по запросу пользователя. Памяти нужен свой «уборщик» — создайте его.
Изучай AI Agents с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 60
- Уроки
- 239
Часто задаваемые вопросы
Урок «Забывание памяти и сборка мусора» бесплатный?
Да — полный текст урока «Забывание памяти и сборка мусора» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.
Чему я научусь в уроке «Забывание памяти и сборка мусора»?
По расписанию удаляйте старые воспоминания, не имеющие отношения к задаче, чтобы индекс оставался сфокусированным. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Agents?
Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Забывание памяти и сборка мусора»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Agents?
Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Эпизодическая память (история сеанса)
- Семантическая память (векторизованные факты)
- Процедурная память (библиотека навыков)
- Забывание памяти и сборка мусора