Модель памяти
Как структурированы воспоминания — категории, ключи, теги, приоритеты, источники, верификация.
Модель памяти
Модель памяти Synapse разработана для LLM-агентов — достаточно структурирована для надёжного отзыва, достаточно гибка для любой предметной области.
Анатомия воспоминания
{
"id": "mem_abc123",
"category": "project",
"key": "project_synapse_status",
"content": "Synapse v1.5.0 deployed on vps1. CI green.",
"tags": ["synapse", "deployment", "v1.5.0"],
"priority": "high",
"source": "agent",
"verified": false,
"confidence": 0.85,
"expires_at": null,
"mind_id": "m_xyz789",
"created_at": "2026-06-27T...",
"updated_at": "2026-06-27T..."
}Поля
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
id |
string | авто | Уникальный ID (mem_xxx) |
category |
enum | ✅ | Одна из 8 категорий |
key |
string | ✅ | Стабильный идентификатор (используется для обновлений) |
content |
string | ✅ | Содержимое памяти (любой текст) |
tags |
string[] | – | Для поиска и фильтрации |
priority |
enum | – | low, normal, high, critical (по умолчанию: normal) |
source |
enum | авто | user, agent (кто сохранил) |
verified |
bool | авто | Проверил ли человек? |
confidence |
float | – | 0.0 до 1.0 (по умолчанию: 1.0 для user, 0.7 для agent) |
expires_at |
timestamp | – | Когда забыть это воспоминание |
mind_id |
string | авто | Какому mind принадлежит |
created_at |
timestamp | авто | Первый раз сохранено |
updated_at |
timestamp | авто | Последнее изменение |
Категории
Восемь категорий покрывают типичные сценарии LLM-агентов:
| Категория | Назначение | Пример содержимого |
|---|---|---|
identity |
Кто пользователь | «User is Michael Schäfer, software engineer in Berlin» |
preference |
Предпочтения пользователя | «Prefers concise technical responses» |
fact |
Проверяемые факты | «Office is in Berlin, timezone Europe/Berlin» |
project |
Статус проекта | «Synapse v1.5.0 deployed, working on v1.6.0 docs» |
skill |
Навыки пользователя | «Advanced Python, 10+ years» |
mistake |
Прошлые ошибки | «Forgot to bump npm version — CI failed» |
context |
Контекст сессии | «Currently reviewing PR #42» |
note |
Прочие заметки | «Try Redis for caching next sprint» |
Ключи: стабильные идентификаторы
Поле key критически важно — с его помощью вы обновляете воспоминания,
не создавая дубликатов.
# First store
store("project", "project_synapse_status", "v1.4.0 deployed", priority="high")
# Update with same key (overwrites, doesn't duplicate)
store("project", "project_synapse_status", "v1.5.0 deployed", priority="high")Правила ключей:
- Должен быть уникален в рамках (category, mind)
- Используйте
snake_case - Добавляйте префикс категории для ясности:
preference_communication,mistake_npm_version - Сохраняйте стабильность — не меняйте ключи после создания
Теги: для поиска
Теги обеспечивают быструю фильтрацию и поиск:
# Find all memories with tag "docker"
GET /memory/by-tag?tag=docker
# FTS5 search within tagged subset
GET /memory/search?q=swarm&tag=dockerЛучшие практики тегов:
- 2–5 тегов на воспоминание (не перегружайте)
- Нижний регистр для единообразия
- Используйте названия проектов, темы, технологии
- Теги нечувствительны к регистру
Уровни приоритета
| Приоритет | Когда использовать | Поведение при отзыве |
|---|---|---|
critical |
Идентичность, юридическое, необратимое | Всегда наверху отзыва |
high |
Активные проекты, ключевые предпочтения | Заметно в отзыве |
normal |
Большинство воспоминаний (по умолчанию) | Стандартный порядок отзыва |
low |
Эфемерное, желательно знать | Может быть суммаризировано |
/memory/recall сортирует по приоритету (сначала critical), затем по свежести.
Источник: user против agent
У воспоминаний есть тег source:
user— сохранено человеком (через JWT или человеко-ориентированный UI)agent— сохранено LLM-агентом (через Mind Key)
Это влияет на:
- Верификацию: воспоминания
userавто-верифицируются,agent— нет - Уверенность: для
userпо умолчанию 1.0, дляagent— 0.7 - Отзыв:
/memory/recallпомечает неверифицированные воспоминания как «(unverified)»
Верификация
Флаг verified указывает, что человек подтвердил воспоминание:
- Воспоминания
user: авто-верифицированы (true) - Воспоминания
agent: по умолчанию неверифицированы (false)
Верификация через:
curl -X POST https://synapse.schaefer.zone/memory/mem_001/verify \
-H "Authorization: Bearer YOUR_JWT"Уверенность
Поле confidence (от 0.0 до 1.0) указывает, насколько надёжно воспоминание:
- 1.0 — прямо заявлено пользователем
- 0.7 — выведено агентом
- 0.5 — неопределённое, требует проверки
- 0.0 — явно сомнительное
Устанавливайте confidence при сохранении:
{
"category": "preference",
"key": "prefers_dark_mode",
"content": "User seems to prefer dark mode (based on their IDE screenshots)",
"confidence": 0.5,
"source": "agent"
}Истечение срока
Устанавливайте expires_at для чувствительных ко времени воспоминаний:
{
"category": "context",
"key": "current_meeting_topic",
"content": "Discussing Q3 roadmap",
"expires_at": "2026-06-28T00:00:00Z"
}Истёкшие воспоминания не возвращаются /memory/recall (но остаются в БД).
Используйте /memory/expiring?within=7d, чтобы увидеть воспоминания, истекающие скоро.
Жизненный цикл памяти
┌─────────────────┐
│ Create │
│ POST /memory │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Active │ ◀──── PUT /memory/:id (update)
│ (in recall) │
└────────┬────────┘
│
┌────────────┼────────────┐
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Expired │ │ Verified │ │ Deleted │
│ (in DB) │ │ (flag) │ │ (gone) │
└──────────┘ └──────────┘ └──────────┘Поведение отзыва
GET /memory/recall возвращает простое текстовое резюме, оптимизированное
для контекста LLM:
Mind: Michael's Mind
Memories: 12 total (10 verified, 2 unverified)
[001] identity (CRITICAL) [verified]
user_name
Michael Schäfer
Tags: person, identity
[002] preference (HIGH) [verified]
communication_style
Prefers concise technical responses
Tags: communication
[003] project (HIGH) [unverified]
synapse_status
v1.5.0 deployed, working on v1.6.0 docs
Tags: synapse, deployment
...- Сортировка по приоритету (critical → low), затем по свежести
- Неверифицированные воспоминания помечены
[unverified] - Теги включены для контекста
- Простой текст (разбор JSON не требуется)