Материалы / 13 минут
Спроектировать долговременную память как управляемый жизненный цикл фактов, событий и предпочтений.
Не каждый диалог становится памятью
Сырая история полезна для аудита, но не является готовой памятью. Сначала выделяется кандидат: факт, предпочтение, решение или незавершённая задача.
Для каждого типа определите владельца, срок жизни и допустимый источник. Временная просьба не должна превращаться в постоянное предпочтение.
Запись требует проверки
Кандидат проходит дедупликацию, проверку противоречий и policy приватности. Важные факты могут требовать подтверждения пользователя.
Сохраняйте не только значение, но и provenance, confidence, valid_from, valid_until и supersedes. Новая запись может заменить старую, не удаляя историю.
Забывание является функцией
Память должна поддерживать истечение, исправление, экспорт и удаление. Пользователь понимает, что сохранено, и может изменить это.
Retrieval учитывает задачу и актуальность. Популярность факта в прошлых диалогах не делает его релевантным текущему действию.
CREATE TABLE memories (
id uuid PRIMARY KEY,
owner_id uuid NOT NULL,
kind text NOT NULL,
value jsonb NOT NULL,
source_id text NOT NULL,
valid_until timestamptz,
supersedes uuid REFERENCES memories(id)
);