В работе
Context
Личная память для AI-агентов
Свой сервис памяти для AI-агентов с доступом по MCP.
Сервис работает на своём хостинге. Агенты вызывают его по MCP: search, remember, read и timeline. На 60 синтетических заметках 10 из 12 вопросов получили полные ответы.
Задача
Я работаю с несколькими AI-агентами: ChatGPT, Codex, свои боты. У каждого своя память, и при смене клиента или провайдера она теряется. Решения по проектам приходилось пересказывать заново. Нужна была одна память, которая принадлежит мне, живёт на моём сервере и доступна любому агенту.
Что сделано
Context: сервис с открытым кодом под MIT для одного владельца. Один контейнер, одна база SQLite, стандартный MCP. Агенту видны четыре инструмента: search, remember, read и timeline. Заметка, сохранённая одним агентом, находится другим. Архивы можно загрузить из GitHub и сессий Codex. Каждую ночь сервис проверяет копию базы, склеивает почти одинаковые записи и разбирает inbox через Codex.
Ключевые решения
Хранить оригиналы, а понимание строить отдельно
Источник сохраняется неизменным, с датой и контрольной суммой, после удаления секретов. В синтетическом эксперименте на 60 заметках 10 из 12 вопросов получили полные ответы, а фоновое извлечение знаний ответы не улучшило. Семантического поиска тогда ещё не было. Поэтому агент отвечает по оригиналам, а выжимки остаются вспомогательными.
Заменять факты только явно
Сначала ночная уборка сама решала, какая заметка устарела. Автозамену я убрал. Теперь агент сам передаёт supersedes, когда точно знает, что факт изменился.
Поиск без платных сервисов
Полнотекстовый поиск SQLite с морфологией русского и английского плюс маленькая модель эмбеддингов на том же сервере. Если модель недоступна, работает обычный поиск.
Свой вход вместо отдельного сервиса
Сначала авторизацию держал Keycloak со своей базой. Я заменил его встроенным OAuth 2.1 с паролем и passkey. Агентам без браузера выдаю токены с правами на конкретные области.
Стек
- TypeScript
- Node.js
- SQLite
- MCP SDK
- OAuth 2.1 и WebAuthn
- Transformers.js с моделью multilingual-e5-small
- Docker
- Шаги с моделью идут через OpenAI-совместимый API или Codex.
Статус и что дальше
Работает на моём сервере как общая память моих агентов. Дальше: веб-интерфейс владельца для поиска, inbox и удаления, импорт из ChatGPT и Telegram, окончательное удаление записей.