Skip to main content

Найкращі практики роботи з пам'яттю

Як структурувати спогади для ефективного відкликання — категорії, ключі, теги, пріоритети.


Найкращі практики роботи з пам'яттю

Те, як ви структуруєте спогади, визначає їхню корисність. Цей посібник охоплює шаблони категоризації, тегування та пріоритизації спогадів, щоб LLM міг відкликати правильну інформацію в потрібний момент.

Категорії: обирайте найбільш конкретну

Категорія Для чого Приклад
identity Ім'я, роль, контактна інформація "user_name": "Michael Schäfer"
preference Подобання, антипатії, стиль роботи "communication": "Prefers concise responses"
fact Перевірювані факти "office_location": "Berlin, Germany"
project Статус проєкту, рішення "project_synapse": "v1.5.0 deployed"
skill Навички користувача "skill_python": "Advanced, 10+ years"
mistake Минулі помилки для уникнення "mistake_npm_version": "Always bump version"
context Контекст, релевантний сесії "current_focus": "Working on docs system"
note Різні нотатки "note_idea": "Try Redis for caching"
У разі сумніву використовуйте `fact` для перевірюваної інформації та `note` для всього іншого. Не надмірно категоризуйте — краще мати чіткий `fact`, ніж заплутаний `context`.

Ключі: змістовні ідентифікатори

Поле key — це ідентифікатор спогаду. Використовуйте змістовні, стабільні ключі:

Хороші ключі:

  • user_name
  • project_synapse_status
  • preference_communication_style
  • mistake_npm_version_bump

Погані ключі:

  • mem_001 (не змістовний)
  • temp (не описовий)
  • 2026-06-27-note (дата не допомагає відкликанню)

Угоди іменування ключів

  • snake_case (нижній регістр із підкресленнями)
  • Префіксуйте категорією: preference_*, project_*, mistake_*
  • Використовуйте описові іменники, а не дієслова
  • До 50 символів

Теги: для пошуку та фільтрації

Теги забезпечують швидку фільтрацію та пошук. Додавайте 2-5 тегів на спогад:

{
  "category": "project",
  "key": "project_synapse_status",
  "content": "Synapse v1.5.0 deployed. Next: v1.6.0 with docs system.",
  "tags": ["synapse", "deployment", "status", "v1.5.0"]
}

Шаблони тегів

  • Назви проєктів: synapse, synapse-mcp, synapse-chat
  • Тем: deployment, ci, database, auth
  • Статусу: active, completed, blocked
  • Індикатори пріоритету: urgent, long-term
Теги нечутливі до регістру. Використовуйте нижній регістр для узгодженості.

Пріоритети: будьте реалістичними

Пріоритет Для чого % спогадів
critical Ідентичність користувача, юридична інформація, незворотні рішення ~5%
high Активні проєкти, важливі уподобання ~20%
normal Більшість фактів, нотаток, контексту ~65%
low Ефемерне, корисно знати ~10%
Не позначайте все `critical`. Якщо все критичне, то нічого не критичне. Залишайте `critical` для речей, що спричинять реальну шкоду при забуванні.

Коли зберігати, а коли ні

Завжди зберігайте

  • Ідентичність користувача (ім'я, email, роль)
  • Довготривалі уподобання
  • Рішення про проєкт та їх обґрунтування
  • Минулі помилки та отримані уроки
  • Зобов'язання перед користувачем

Не зберігайте

  • Перехідний стан (використовуйте змінні)
  • Історію розмов дослівно (це обробляє система чату)
  • Чутливі дані (паролі, API-ключі)
  • Факти, що легко вивести (поточна дата, вміст файлів)
  • Ефемерний контекст (використовуйте категорію context із низьким пріоритетом)

Оновлення спогадів

POST /memory з тією ж category + key оновлює наявний спогад:

# Початкове збереження
store("project", "project_synapse_status", "v1.4.0 deployed", priority="high")

# Пізніше: оновлення з тим самим ключем
store("project", "project_synapse_status", "v1.5.0 deployed. CI green.", priority="high")
Використовуйте стабільні ключі, щоб оновлювати без створення дублікатів. LLM має повторно POST-нути той самий ключ при зміні інформації, а не створювати нові спогади.

Життєвий цикл спогаду

Create → Active → Stale → Archive → Delete
  • Create: POST /memory з повним контекстом
  • Active: Часто відкликати, оновлювати за потреби
  • Stale: Ще релевантні, але не активно використовуються (знизити пріоритет?)
  • Archive: Встановити пріоритет low, зберігати для історичного довідника
  • Delete: DELETE /memory/:id, коли більше не релевантний

Періодичне очищення

# Знайти спогади, що не оновлювалися 90 днів
old_memories = requests.get(
    f"{URL}/memory/search?q=*",
    headers={"Authorization": f"Bearer {KEY}"}
)

for mem in old_memories["results"]:
    if is_stale(mem, days=90):
        # Або видалити, або знизити пріоритет
        if is_obsolete(mem):
            delete_memory(mem["id"])
        else:
            update_memory(mem["id"], priority="low")

Шаблон: успадкування спогадів

Для ієрархічного контексту (проєкт → підпроєкт → завдання):

# Батьківський проєкт
store("project", "project_synapse", "Main Synapse project", 
      tags=["synapse", "parent"], priority="high")

# Підпроєкт (теги пов'язують з батьком)
store("project", "project_synapse_docs", "Docs system for Synapse",
      tags=["synapse", "docs", "synapse-parent"], priority="high")

# Конкретне завдання (теги пов'язують з підпроєктом)
store("project", "task_docs_loader", "Implement docs-loader.ts",
      tags=["synapse", "docs", "task"], priority="normal")

Потім LLM може шукати q=synapse+docs, щоб знайти всі пов'язані спогади.

Шаблон: журнал рішень

Зберігайте рішення з обґрунтуванням, щоб LLM не переробляв їх:

store("fact", "decision_postgres_over_sqlite",
      "Chose PostgreSQL over SQLite for production. Reason: concurrent writes, "
      "FTS5 native support, better backup story. Date: 2026-06-15. Decided by: Michael.",
      tags=["decision", "database", "postgres", "sqlite"],
      priority="high")

Шаблон: уникнення помилок

Зберігайте помилки зі специфічними інструкціями уникнення:

store("mistake", "mistake_forget_version_bump",
      "Forgot to bump package.json version after changes. npm publish failed. "
      "FIX: Always run `npm version patch` before pushing. "
      "CI fails with 'version already exists' if you forget.",
      tags=["npm", "ci", "publish", "version"],
      priority="high")

Антишаблони для уникнення

Наступні кроки