Мы извлекли систему памяти OpenClaw и выложили ее в открытый доступ (memsearch)
OpenClaw (ранее clawdbot и moltbot) становится вирусным - 189k+ звезд GitHub менее чем за две недели. Это безумие. Большая часть шумихи связана с его автономными, агентскими возможностями в повседневных чатах, включая iMessages, WhatsApp, Slack, Telegram и другие.
Но нас, инженеров, работающих над системой векторных баз данных, привлек подход OpenClaw к долгосрочной памяти. В отличие от большинства существующих систем памяти, OpenClaw заставляет свой ИИ автоматически записывать ежедневные журналы в виде файлов в формате Markdown. Эти файлы являются источником истины, и модель "запоминает" только то, что записывается на диск. Люди-разработчики могут открывать эти файлы, редактировать их, вычленять долгосрочные принципы и видеть, что именно помнит ИИ в любой момент. Никаких черных ящиков. Честно говоря, это одна из самых чистых и удобных для разработчиков архитектур памяти, которые мы видели.
Естественно, у нас возник вопрос: почему это должно работать только в OpenClaw? Что, если бы любой агент мог иметь такую память? Мы взяли точную архитектуру памяти из OpenClaw и создали memsearch - автономную, подключаемую и играющую библиотеку долговременной памяти, которая дает любому агенту постоянную, прозрачную, изменяемую человеком память. Никакой зависимости от остальной части OpenClaw. Просто подключите ее, и ваш агент получит долговременную память с поиском на базе Milvus/Zilliz Cloud, а также журналы Markdown в качестве канонического источника истины.
GitHub Repo: github.com/zilliztech/memsearch (с открытым исходным кодом, лицензия MIT)
Документация: https://zilliztech.github.io/memsearch/
Плагин для кода Клода: https://zilliztech.github.io/memsearch/claude-plugin/
Чем отличается память OpenClaw
Прежде чем погрузиться в архитектуру памяти OpenClaw, давайте разберемся с двумя понятиями: контекст и память. Они звучат похоже, но на практике работают совершенно по-разному.
Контекст - это все, что агент видит в одном запросе: системные подсказки, файлы указаний на уровне проекта, такие как
AGENTS.mdиSOUL.md, история разговоров (сообщения, вызовы инструментов, сжатые резюме) и текущее сообщение пользователя. Она ограничена одной сессией и относительно компактна.Память - это то, что сохраняется во всех сеансах. Она хранится на локальном диске - полная история прошлых разговоров, файлы, с которыми работал агент, и предпочтения пользователя. Не обобщенная. Не сжатая. Необработанный материал.
А вот дизайнерское решение, которое делает подход OpenClaw особенным: вся память хранится в виде обычных файлов Markdown в локальной файловой системе. После каждой сессии ИИ автоматически записывает обновления в эти журналы в формате Markdown. Вы - и любой разработчик - можете открыть их, отредактировать, реорганизовать, удалить или доработать. Тем временем векторная база данных работает рядом с этой системой, создавая и поддерживая индекс для поиска. Когда файл Markdown изменяется, система обнаруживает это изменение и автоматически переиндексирует его.
Если вы пользовались такими инструментами, как Mem0 или Zep, вы сразу заметите разницу. Эти системы хранят воспоминания в виде вкраплений - это единственная копия. Вы не можете прочитать то, что помнит ваш агент. Вы не можете исправить плохое воспоминание, отредактировав строку. Подход OpenClaw дает вам и то, и другое: прозрачность обычных файлов и поисковую мощь векторного поиска по векторной базе данных. Вы можете читать, git diff, grep - это просто файлы.
Единственный минус? Сейчас эта система памяти, ориентированная на Markdown, тесно переплетена со всей экосистемой OpenClaw - процессом шлюза, коннекторами платформы, конфигурацией рабочего пространства и инфраструктурой обмена сообщениями. Если вам нужна только модель памяти, то это очень много механизмов.
Именно поэтому мы создали memsearch: та же философия - маркдаун как источник истины, автоматическая векторная индексация, полностью редактируемая человеком - но в виде легкой отдельной библиотеки, которую можно внедрить в любую агентную архитектуру.
Как работает Memsearch
Как уже говорилось, memsearch - это полностью независимая библиотека долговременной памяти, реализующая ту же архитектуру памяти, что и в OpenClaw, без использования остального стека OpenClaw. Вы можете подключить ее к любому агентскому фреймворку (Claude, GPT, Llama, пользовательские агенты, движки рабочих процессов) и мгновенно предоставить вашей системе постоянную, прозрачную, доступную для человека память.
Вся память агентов в memsearch хранится в виде обычного текста в формате Markdown в локальной директории. Структура намеренно проста, чтобы разработчики могли понять ее с первого взгляда:
~/your-project/
└── memory/
├── MEMORY.md # Hand-written long-term memory
├── 2026-02-09.md # Today's work log
├── 2026-02-08.md
└── 2026-02-07.md
Memsearch использует Milvus в качестве векторной базы данных для индексации этих Markdown-файлов для быстрого семантического поиска. Но очень важно, что векторный индекс не является источником истины - им являются файлы. Если вы полностью удалите индекс Milvus, вы ничего не потеряете. Memsearch просто заново соберет и заново проиндексирует файлы Markdown, восстановив весь слой поиска за несколько минут. Это означает, что память вашего агента прозрачна, долговечна и полностью восстанавливаема.
Вот основные возможности memsearch:
Читаемый уцененный текст делает отладку такой же простой, как редактирование файла
Отладка памяти ИИ обычно очень болезненна. Когда агент выдает неправильный ответ, большинство систем памяти не дают вам четкого способа увидеть , что он на самом деле хранил. Типичный рабочий процесс - написание пользовательского кода для запроса API памяти, а затем просеивание непрозрачных вкраплений или многословных JSON-блобов - ни то, ни другое не скажет вам много о реальном внутреннем состоянии ИИ.
memsearch устраняет весь этот класс проблем. Вся память хранится в папке memory/ в виде обычного Markdown:
## Morning
- Fixed N+1 query issue — switched to selectinload()
- Query count dropped from 152 to 3
Если ИИ что-то напутает, исправить это будет просто - достаточно отредактировать файл. Обновите запись, сохраните, и memsearch автоматически переиндексирует изменения. Пять секунд. Никаких вызовов API. Никаких инструментов. Никаких загадок. Вы отлаживаете память ИИ так же, как отлаживаете документацию - редактируя файл.
Память с поддержкой Git позволяет командам отслеживать, просматривать и откатывать изменения.
Над памятью ИИ, хранящейся в базе данных, сложно работать совместно. Чтобы выяснить, кто и когда что изменил, приходится копаться в журналах аудита, а многие решения их даже не предоставляют. Изменения происходят молча, и разногласия по поводу того, что должен запомнить ИИ, не имеют четкого пути разрешения. В итоге команды полагаются на сообщения в Slack и предположения.
Memsearch решает эту проблему, делая память просто файлами в формате Markdown - а значит, Git автоматически обрабатывает версионность. Одна команда показывает всю историю:
git log memory/MEMORY.md
git diff HEAD~1 memory/2026-02-09.md
Теперь память ИИ участвует в том же рабочем процессе, что и код. Архитектурные решения, обновления конфигурации и изменения предпочтений - все это отображается в диффах, которые каждый может прокомментировать, одобрить или изменить:
+ ## Architecture Decision
+ - Use Kafka for event bus instead of RabbitMQ
+ - Reason: better horizontal scaling
Plaintext Memory делает миграцию почти без усилий
Миграция - одна из самых больших скрытых издержек фреймворков с памятью. Переход от одного инструмента к другому обычно означает экспорт данных, преобразование форматов, повторный импорт и надежду на совместимость полей. Такая работа может легко съесть полдня, а результат никогда не гарантирован.
memsearch полностью избавляет от этой проблемы, потому что память - это простой текст Markdown. Нет ни проприетарного формата, ни схемы для перевода, ничего для миграции:
Переключитесь на другую машину:
rsyncпапку памяти. Выполнено.Переключите модели встраивания: Повторно выполните команду index. Это займет пять минут, а файлы markdown останутся нетронутыми.
Переключите развертывание векторной базы данных: Измените одно значение конфигурации. Например, перейдите с Milvus Lite в разработке на Zilliz Cloud в производстве:
# Development
ms = MemSearch(milvus_uri="~/.memsearch/milvus.db")
# Production (change only this line)
ms = MemSearch(milvus_uri=“https://xxx.zillizcloud.com”)
Ваши файлы памяти останутся прежними. Инфраструктура вокруг них может свободно развиваться. В результате вы получаете долгосрочную переносимость - редкое свойство для систем ИИ.
Общие файлы Markdown позволяют людям и агентам совместно создавать память
В большинстве решений для работы с памятью редактирование того, что ИИ запоминает, требует написания кода для API. Это означает, что поддерживать память ИИ могут только разработчики, и даже для них это очень сложно.
Memsearch позволяет более естественно разделить ответственность:
ИИ обрабатывает: Автоматические ежедневные журналы (
YYYY-MM-DD.md) с деталями выполнения, например "развернута версия 2.3.1, производительность повышена на 12 %".Люди занимаются: Долгосрочные принципы в
MEMORY.md, например "стек команды: Python + FastAPI + PostgreSQL".
Обе стороны редактируют одни и те же файлы в формате Markdown с помощью инструментов, которые они уже используют. Никаких вызовов API, никаких специальных инструментов, никаких привратников. Когда память заперта в базе данных, такое совместное авторство невозможно. memsearch делает это по умолчанию.
Под капотом: memsearch работает на основе четырех рабочих процессов, которые обеспечивают быстрое, свежее и бережное использование памяти
В memsearch есть четыре основных рабочих процесса: Наблюдение (мониторинг) → Индексирование (разбивка на куски и встраивание) → Поиск (извлечение) → Компактность (обобщение). Вот что делает каждый из них.
1. Следить: Автоматическое повторное индексирование при каждом сохранении файла
Рабочий процесс Watch отслеживает все файлы Markdown в памяти/каталоге и запускает переиндексацию при каждом изменении и сохранении файла. Задержка в 1500 мс обеспечивает обнаружение обновлений без лишних вычислений: если несколько сохранений происходят быстро, таймер сбрасывается и срабатывает только тогда, когда правки стабилизируются.
Эта задержка настраивается эмпирически:
100 мс → слишком чувствительно; срабатывает при каждом нажатии клавиши, сжигая вызовы встраивания.
10 с → слишком медленно; разработчики замечают отставание
1500 мс → идеальный баланс отзывчивости и эффективности использования ресурсов.
На практике это означает, что разработчик может писать код в одном окне и редактировать MEMORY.md в другом, добавляя URL API-документации или исправляя устаревшую запись. Сохраните файл, и следующий запрос AI подхватит новую память. Никакого перезапуска, никакого ручного переиндексирования.
2. Индекс: Интеллектуальное разбиение на части, дедупликация и встраивание с учетом версий
Index - это критически важный рабочий процесс. Он обрабатывает три вещи: разбиение на части, дедупликацию и версионные идентификаторы фрагментов.
Чанкинг разделяет текст по семантическим границам - заголовкам и их частям, - чтобы связанный контент оставался вместе. Это позволяет избежать случаев, когда фраза вроде "конфигурация Redis" разбивается на куски.
Например, этот текст в формате Markdown:
## Redis Caching
We use Redis for L1 cache with 5min TTL.
The connection pool is configured with max 100 connections.
## Database
PostgreSQL 16 is the primary database.
Становится двумя кусками:
Чанк 1:
## Redis Caching\nWe use Redis for L1 cache...Чанк 2:
## Database\nPostgreSQL 16 is the primary database.
Дедупликация использует хэш SHA-256 каждого куска, чтобы избежать встраивания одного и того же текста дважды. Если в нескольких файлах упоминается "PostgreSQL 16", API встраивания вызывается один раз, а не по одному разу на файл. Для ~500 КБ текста это экономит около $0,15 в месяц. При масштабировании это выливается в сотни долларов.
Идентификатор чанка кодирует все, что необходимо для определения того, является ли чанк несвежим. Формат - hash(source_path:start_line:end_line:content_hash:model_version). Поле model_version - это важная часть: когда модель встраивания обновляется с text-embedding-3-small до text-embedding-3-large, старые встраивания становятся недействительными. Поскольку версия модели заложена в идентификатор, система автоматически определяет, какие фрагменты нуждаются в повторном встраивании. Ручная очистка не требуется.
3. Поиск: Гибридный векторный + BM25-поиск для максимальной точности
Для поиска используется гибридный подход: векторный поиск с весом 70 % и поиск по ключевым словам BM25 с весом 30 %. Это позволяет сбалансировать две различные потребности, которые часто возникают на практике.
Векторный поиск обеспечивает семантическое соответствие. Запрос "Redis cache config" возвращает чанк, содержащий "Redis L1 cache with 5min TTL", даже если формулировки отличаются. Это полезно, когда разработчик помнит концепцию, но не помнит точную формулировку.
BM25 обрабатывает точное соответствие. Запрос "PostgreSQL 16" не возвращает результатов о "PostgreSQL 15". Это важно для кодов ошибок, имен функций и поведения, специфичного для конкретной версии, где близкое соответствие недостаточно.
Разделение по умолчанию 70/30 хорошо подходит для большинства случаев использования. Для рабочих процессов, которые в значительной степени склоняются к точным совпадениям, увеличение веса BM25 до 50% - это однострочное изменение конфигурации.
Результаты возвращаются в виде фрагментов top-K (по умолчанию 3), каждый из которых усечен до 200 символов. Когда требуется полное содержимое, memsearch expand <chunk_hash> загружает его. Такое постепенное раскрытие позволяет сократить использование контекстного окна LLM, не жертвуя доступом к деталям.
4. Компактность: Суммирование исторической памяти для поддержания чистоты контекста
Накопленная память со временем становится проблемой. Старые записи заполняют контекстное окно, увеличивают стоимость маркера и добавляют шум, ухудшающий качество ответа. Compact решает эту проблему, вызывая LLM для обобщения исторической памяти в сжатом виде, а затем удаляя или архивируя оригиналы. Его можно запустить вручную или запланировать на регулярный интервал.
Как начать работу с memsearch
Memsearch предоставляет как Python API, так и CLI, поэтому вы можете использовать его внутри агентских фреймворков или как отдельный инструмент отладки. Настройка минимальна, а система спроектирована таким образом, что ваша локальная среда разработки и производственное развертывание выглядят практически идентично.
Memsearch поддерживает три Milvus-совместимых бэкенда, все они открываются через один и тот же API:
Milvus Lite (по умолчанию): Локальный файл
.db, нулевая конфигурация, подходит для индивидуального использования.Milvus Standalone / Cluster: Самостоятельное размещение, поддержка нескольких агентов, совместно использующих данные, подходит для командной работы.
Zilliz Cloud: Полностью управляемое, с автоматическим масштабированием, резервным копированием, высокой доступностью и изоляцией. Идеально подходит для производственных рабочих нагрузок.
Переход от локальной разработки к производству обычно сводится к изменению конфигурации в одну строку. Ваш код остается неизменным.
Установите
pip install memsearch
memsearch также поддерживает множество провайдеров встраивания, включая OpenAI, Google, Voyage, Ollama и локальные модели. Благодаря этому архитектура памяти остается переносимой и не зависит от производителя.
Вариант 1: Python API (интегрированный в ваш агентский фреймворк)
Здесь приведен минимальный пример полного цикла агента, использующего memsearch. Вы можете копировать/вставлять и изменять его по мере необходимости:
from openai import OpenAI
from memsearch import MemSearch
llm = OpenAI()
ms = MemSearch(paths=[“./memory/”])
async def agent_chat(user_input: str) -> str:
# 1. Recall — search relevant memories
memories = await ms.search(user_input, top_k=3)
context = “\n”.join(f"- {m[‘content’][:200]}" for m in memories)
<span class="hljs-comment"># 2. Think — call LLM</span>
resp = llm.chat.completions.create(
model=<span class="hljs-string">"gpt-4o-mini"</span>,
messages=[
{<span class="hljs-string">"role"</span>: <span class="hljs-string">"system"</span>, <span class="hljs-string">"content"</span>: <span class="hljs-string">f"Memories:\n<span class="hljs-subst">{context}</span>"</span>},
{<span class="hljs-string">"role"</span>: <span class="hljs-string">"user"</span>, <span class="hljs-string">"content"</span>: user_input},
],
)
<span class="hljs-comment"># 3. Remember — write to markdown, update index</span>
save_memory(<span class="hljs-string">f"## <span class="hljs-subst">{user_input}</span>\n<span class="hljs-subst">{resp.choices[<span class="hljs-number">0</span>].message.content}</span>"</span>)
<span class="hljs-keyword">await</span> ms.index()
<span class="hljs-keyword">return</span> resp.choices[<span class="hljs-number">0</span>].message.content
Здесь показан основной цикл:
Вспомните: memsearch выполняет гибридный векторный + BM25-поиск.
Думайте: ваш LLM обрабатывает пользовательский ввод + извлеченную память
Помните: агент записывает новую память в Markdown, а memsearch обновляет свой индекс.
Этот паттерн естественно вписывается в любую агентскую систему - LangChain, AutoGPT, семантические маршрутизаторы, LangGraph или пользовательские агентские циклы. По своему дизайну он не зависит от фреймворка.
Вариант 2: CLI (быстрые операции, хорошо подходит для отладки)
CLI идеально подходит для автономных рабочих процессов, быстрых проверок или проверки памяти во время разработки:
memsearch index ./docs/ # Index files
memsearch search "Redis caching" # Search
memsearch watch ./docs/ # Watch for file changes
memsearch compact # Compact old memory
CLI повторяет возможности Python API, но работает без написания кода - отлично подходит для отладки, проверок, миграций или проверки структуры папок памяти.
Сравнение memsearch с другими решениями для работы с памятью
Самый распространенный вопрос, который задают разработчики, - зачем использовать memsearch, если уже существуют готовые варианты. Короткий ответ: memsearch обменивает расширенные возможности, такие как временные графы знаний, на прозрачность, переносимость и простоту. Для большинства случаев использования памяти агента это правильный компромисс.
| Решение | Сильные стороны | Ограничения | Лучшее для |
|---|---|---|---|
| memsearch | Прозрачная память в виде открытого текста, соавторство человека и ИИ, нулевое трение при миграции, легкая отладка, Git-native | Нет встроенных временных графов или сложных мультиагентных структур памяти | Команды, которые ценят контроль, простоту и переносимость в долговременной памяти |
| Mem0 | Полностью управляемый, нет инфраструктуры для запуска или обслуживания | Непрозрачная - нельзя проверять или вручную редактировать память; единственным представлением являются вкрапления | Команды, которые хотят получить управляемый сервис без рук и не против меньшей видимости. |
| Zep | Богатый набор функций: временная память, моделирование нескольких персон, сложные графы знаний | Тяжелая архитектура; больше движущихся частей; сложнее в освоении и эксплуатации | Агенты, которым действительно нужны расширенные структуры памяти или рассуждения с учетом времени |
| LangMem / Letta | Глубокая, бесшовная интеграция в их собственные экосистемы | Замкнутость фреймворка; трудно перенести на другие стеки агентов | Команды уже привержены этим конкретным фреймворкам. |
Попробуйте memsearch и сообщите нам о своих отзывах.
Memsearch имеет полностью открытый исходный код под лицензией MIT, и репозиторий готов к производственным экспериментам уже сегодня.
Репозиторий: github.com/zilliztech/memsearch
Документация: zilliztech.github.io/memsearch
Если вы создаете агента, которому нужно запоминать что-то в течение нескольких сессий, и хотите получить полный контроль над тем, что он запоминает, memsearch стоит посмотреть. Библиотека устанавливается с помощью одного pip install, работает с любым фреймворком агента и хранит все в формате Markdown, который можно читать, редактировать и верстать с помощью Git.
Мы активно развиваем memsearch и будем рады участию сообщества.
Откройте проблему, если что-то сломалось.
Отправьте PR, если хотите расширить библиотеку.
Ставьте звезду в репо, если философия Markdown-as-source-of-truth находит в вас отклик.
Система памяти OpenClaw больше не заперта внутри OpenClaw. Теперь ее может использовать любой желающий.
Продолжить чтение
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word


