Структурування пам'яті за типом скорочує кількість отриманих токенів приблизно на 40%.
Чому пласке сховище пам'яті не працює
Більшість туторіалів для початківців навчають LLM-агента «пам'ятати», додаючи кожну нову частину інформації до єдиного списку та передаючи цей список моделі на кожному кроці. Код буквально складається з трьох рядків, і він створює робоче демо. На практиці список неконтрольовано зростає. З'являються два симптоми:
- Агент сприймає застарілі дані як актуальні, наприклад, надає ETA, термін дії якого минув кілька годин тому.
- Контекстне вікно заповнюється другорядними фактами, які ніяк не впливають на відповідь, що збільшує витрати на API та сповільнює час відповіді.
Звичайне векторне сховище або простий кеш «ключ-значення» не може відрізнити посаду користувача від тимчасового статусу проєкту. Коли агент виконує семантичний пошук, алгоритм схожості може видати старий ETA просто тому, що запит містить ті самі слова, хоча ці дані вже не є актуальними.
Структурована пам'ять: чотири категорії, одна мета
Рішення полягає в тому, щоб перестати сприймати пам'ять як моноліт і почати класифікувати кожен запис за однією з чотирьох категорій:
- Факти про користувача — стабільні атрибути, такі як роль користувача, мова за замовчуванням або рівень доступу. Вони рідко змінюються і можуть кешуватися протягом усієї сесії.
- Зворотний зв'язок — чіткі правила, яких повинен дотримуватися агент, наприклад: «ніколи не розкривай паролі до бази даних» або «уникай гумору в запитах щодо відповідності нормам». Оскільки вони визначають поведінку, їм місце в системному промпті (system prompt), а не в пулі для пошуку.
- Стан проєкту — дані, що швидко змінюються, такі як поточні ETA, прогрес завдань або тимчасові токени. Ця категорія потребує перевірки терміну дії; як тільки мітка часу виходить за межі визначеного вікна, запис має бути видалений.
- Посилання — вказівники на зовнішні сервіси, ID документів або кінцеві точки API. Це не контент для відображення, а маршрути для отримання свіжих даних за потреби.
Mem0 дозволяє розробникам додавати довільні метадані до кожного запису пам'яті. Завдяки індексації за полем kind, запит може спочатку відфільтрувати потрібну категорію, перш ніж LLM вирішить, як використовувати результат.
Двокроковий пошук із Mem0
- Отримання спогадів за типом — короткий фільтрувальний запит просить Mem0 надати «весь зворотний зв'язок» або «записи стану проєкту, створені за останній короткий проміжок часу». Набір результатів уже відфільтровано за відповідною категорією.
- Дозвольте LLM вирішити — відфільтровані фрагменти вставляються в промпт разом із поточним запитанням користувача. Тепер модель може міркувати на їх основі, не перебираючи нерелевантні факти.
Конкретний приклад: замість того, щоб чекати, поки семантичний пошук знайде правило «не висміювати базу даних», розробник вставляє це правило безпосередньо в системний промпт на початку сесії та кешує його на весь час взаємодії. Навіть якщо запит користувача не містить прямої згадки про бази даних, модель уже знає про це обмеження.
Практичні хитрощі для зниження витрат
- Кешуйте правила зворотного зв'язку — зберігайте набір правил один раз за сесію та використовуйте його повторно, замість того щоб здійснювати пошук на кожному кроці. Це зменшує використання токенів у кожному раунді.
- Пропускайте пошук стану проєкту, коли він нерелевантний — якщо користувач ставить суто концептуальне запитання («Яка різниця між навчанням з учителем та навчання з підкріпленням?»), немає потреби витягувати дані про ETA або прогрес завдань.
Застосовуючи ці дві звички, можна скоротити використання токенів приблизно на 40% порівняно з наївним підходом із пласким сховищем пам'яті. Економія безпосередньо конвертується у менші рахунки за API та швидшу обробку запитів, особливо для агентів, які підтримують довгі діалоги.
Хто виграє, а хто хвилюється
Переможці — команди, які створюють ботів для підтримки клієнтів, внутрішніх помічників для робочих процесів або будь-які багатоходові LLM-інтерфейси. Вони отримують надійніші відповіді, уникають прикрих помилок через застарілі дані та ефективніше розпоряджаються своїм бюджетом.
Підсумок
Якщо ви хочете, щоб LLM-агент залишався ефективним протягом тривалих сесій, припиніть запхати кожен факт в одне контекстне вікно. Позначайте кожен запис пам'яті як факт про користувача, зворотний зв'язок, стан проєкту або посилання, встановлюйте термін дії там, де це необхідно, і дозвольте такому інструменту, як Mem0, взяти на себе основну роботу. Результатом будуть свіжіші відповіді, менше зайвих токенів і помітне зниження операційних витрат.