RCLL — self-hosted хранилище фактов на вашем Postgres: пишут в него все агенты, а достать нужный факт может любой, даже если добыл его кто-то другой. Локальные эмбеддинги, лицензия MIT, никакого аккаунта и облачной панели. Пригодится тем, кто держит не одного бота, а несколько, и устал от ситуации, когда один агент заново выясняет то, что второй разобрал днём раньше.
Каждый факт получает три координаты — комнату (room), зал (hall) и слой (layer). Комната — это область: проект, домен. Зал — тип факта: решение, процедура, предупреждение, предпочтение. Слой — насколько факт долговечен: L0 всплывает в начале сессии, L1 достаётся по теме, L2 — сырые наблюдения, которые потом сжимаются. Смысл в том, чтобы запрос забирал ровно нужный срез, а не перебирал всю груду. Основной инструмент так и называется — memory_recall, само название RCLL это «recall» без гласных. Движок при этом распространяется под другим именем: репозиторий, контейнер и npm-пакет называются fleet-memory, чтобы то, что вы прописали в lockfile, никогда не пришлось менять.
Ключевое решение — на чтении вообще нет обращений к языковой модели. Один recall запускает четыре поиска параллельно (векторный, BM25, активация по графу и временной), сливает их через reciprocal rank fusion, переранжирует локальным кросс-энкодером и обрезает под бюджет токенов. Эмбеддер на 33М параметров и реранкер весом 80 МБ идут внутри образа, так что читать можно без ключа, без исходящих запросов и без лимитов.
Модель нужна только на записи — чтобы превратить документ в типизированные факты с датами. Это один HTTP-запрос на документ, и куда он пойдёт, решаете вы:
- LLM_PROVIDER=none — вообще ничего не уходит наружу, но получите только векторно-лексическое хранилище чанков: без извлечения фактов, сущностей и причинных связей;
- локальная модель — llama-server и GGUF примерно на 2B, движок сам подтянет веса. Извлечение полноценное, ключ не нужен нигде, но на CPU это примерно в 13 раз медленнее;
- любой OpenAI-совместимый эндпоинт — ваш ключ и base URL, самый быстрый вариант. Чтения всё равно не обращаются к модели, поисковые запросы наружу не уходят.
Ограничения авторы называют прямо. На multi-hop-вопросах дефолтный retrieval проигрывает более простой схеме, на single-hop лексический baseline местами обходит их плотный поиск. Запрос, адресованный не в ту комнату, вернёт не ухудшенный ответ, а ровно ноль результатов — фильтр работает как жёсткий шлюз. Комната задаётся один раз, и перенести факт в другую нельзя: ни эндпоинта, ни фоновой задачи. Авторство фактов начали записывать недавно и не задним числом. Экспорта памяти пока нет — команда с именем export отдаёт конфигурацию, а не факты, а листинг теряет комнату, зал, слой и все связи.
Так что смотреть на RCLL стоит как на инструмент для тех, кто готов разворачивать его сам, читать документацию и жить с перечисленными ограничениями. Взамен память целиком остаётся на вашей машине, а чтение не расходует токены и не делает исходящих запросов.