Мой блог
Как создать локальную память для ИИ-агентов программирования с помощью funes
Ранее уже поднимался вопрос о том, что современные инструменты оставляют после себя огромное количество полезных следов. В процессе работы с кодовой базой они ищут решения, пробуют различные подходы, сталкиваются с ошибками, изучают документацию и меняют вектор разработки, фиксируя не только конечный результат, но и логику принятых решений. Однако сами по себе сырые сессионные логи остаются лишь пассивным архивом. Невозможно эффективно искать ответы на сложные вопросы вроде причин отказа от потокового парсера, перебирая тысячи строк вручную с помощью базовых утилит. Чтобы ИИ-агент мог задействовать этот опыт в текущей работе, требуется правильная индексация, поиск, ранжирование и точное указание первоисточника. Именно для этого создана надежная и постоянная память для ИИ-агентов под названием funes.
Инструмент собирает данные из сессий, которые уже хранятся на вашем компьютере, работает локально и интегрируется в стандартный рабочий процесс буквально одной командой. При необходимости собранную информацию можно выгрузить в собственный репозиторий Hugging Face с настройками приватности по умолчанию. Программа поставляется в виде единого бинарного файла. Ее стандартный бэкенд вывода не требует тяжелых библиотек машинного обучения, а все операции по созданию векторов и переранжированию выполняются локально.
Для установки достаточно выполнить команду в терминале: curl -fsSL https://huggingface.co/buckets/huggingface/funes/resolve/install.sh | sh. После этого инструмент добавляется к нужному помощнику с помощью команды интеграции. Процесс создает первичный индекс, наделяет ИИ функциями поиска и извлечения данных, а также настраивает автоматическое индексирование каждого завершенного шага. Индексация происходит инкрементально: новые запуски дополняют базу свежими данными, а не пересчитывают всю историю заново. Более старые материалы могут подгружаться постепенно в фоновом режиме.
Далее вы просто продолжаете писать код. Если текущая задача затрагивает прошлые решения, аргументацию или найденные ранее баги, агент самостоятельно обращается к накопленному опыту. Больше не нужно вручную вспоминать старые сессии или копировать контекст из прошлых чатов. Обращение к базе происходит прямо во время диалога, причем система указывает на конкретную сессию, ставшую источником ответа. Функция поиска возвращает не сжатую выжимку, а оригинальный текст с детальной привязкой к автору запроса, времени, сессии и конкретному шагу. Каждый результат содержит команду для открытия полного контекста.
Архитектура построена таким образом, что единый детерминированный конвейер разбирает логи поддерживаемых форматов в универсальную структуру, разбивает их на фрагменты, векторизует с помощью встроенной локальной модели и записывает в локальный набор данных Lance. Поисковый запрос объединяет векторный поиск и текстовый поиск BM25, комбинирует их рейтинги, выполняет повторное ранжирование через кросс-энкодер, корректирует веса с учетом давности событий и подтягивает соседние фрагменты для полноты картины.
Такой подход обеспечивает три ключевых преимущества:
- Единая память для разных систем: Claude Code, Codex, pi и Hermes используют общую структуру данных, а результаты поиска всегда содержат информацию о том, какой именно помощник сгенерировал ответ.
- Сохранение первоисточника: данные не превращаются в обезличенные факты на этапе записи, поэтому всегда можно вернуться к исходному шагу.
- Локальная работа по умолчанию: для использования не требуются сторонние аккаунты или удаленные репозитории, а конфиденциальные сессии не обрабатываются на чужих серверах.
Организация совместной работы и удаленной синхронизации
Проблема изоляции ИИ в рамках одной рабочей станции успешно решена, но эффективность памяти возрастает, когда инструмент используется на разных устройствах. Чтобы переносить накопленный опыт между рабочими местами, достаточно привязать удаленный репозиторий в момент добавления инструмента. Система продолжит локальное индексирование каждого шага и будет автоматически синхронизировать данные при завершении сессий. Выполнив аналогичную настройку на другом компьютере, вы получите доступ к той же базе знаний.
Прежде чем данные попадают на Hub, учетные данные проходят обязательную процедуру маскировки еще на этапе индексации. При публикации система повторно сканирует каждый фрагмент информации и отсекает все, что хоть отдаленно напоминает конфиденциальные ключи или пароли. Подробное описание работы этого сканера, включая перечень защищаемых зон и возможные ограничения, приведено в файле SECURITY.md. Когда ИИ-агент обращается к удаленному хранилищу, утилита кэширует файлы на локальном диске, благодаря чему повторные запросы выполняются практически мгновенно. Сам Hub берет на себя привычные функции управления доступом, контроля версий, распределения прав и владения данными. Пользователю не требуется заводить отдельную учетную запись в стороннем облачном сервисе или арендовать память через платный API.
Инструмент recall спроектирован с учетом специфики работы ИИ-агентов. Если вам нужно самостоятельно обратиться к накопленной базе знаний, используется команда ask. По умолчанию она считывает локальное хранилище, например: funes ask claude "what did we decide about the streaming parser". Также можно перенаправить запрос на общее публичное хранилище. Разработчики опубликовали собственную историю разработки утилиты, поэтому любой желающий может узнать причины такого проектирования без предварительной подготовки личной базы: funes ask claude "why is funes append-only" --memory huggingface/funes-memory.
Команда funes ask представляет собой компактного родственника команды funes add, работающего исключительно в режиме чтения для ответа на один вопрос. Она извлекает нужные фрагменты, передает их агенту и выдает обоснованный ответ с обязательными ссылками на источники. Этот инструмент не устанавливает громоздких интеграций и не меняет постоянные настройки самого агента. Если релевантных данных в базе нет, система не пытается скрыть пробел с помощью выдумок — агент честно заявляет об отсутствии информации. В таком случае запрос можно переформулировать или подключить утилиту непосредственно к агенту, чтобы он мог самостоятельно и итеративно искать нужные сведения в рабочем процессе.
Сценарии применения и экономика контекста
Общее хранилище памяти не привязано к конкретному программному обеспечению или языковой модели, в которой оно было создано. Вы можете начать сложную задачу в Claude Code, продолжить ее на следующей неделе в Codex, и второй агент сможет легко восстановить логику первого. Допускается задействовать утилиту pi с локальной моделью или сервисом через маршрутизатор Hugging Face, а затем вернуться к Claude. Один инструмент принимает решение, специальный хук фиксирует его в индексе, а другой инструмент считывает контекст в совершенно другой сессии. Ранние записи в демонстрационных логах отражают прошлые этапы экспериментов: память, основанная на принципе добавления данных, сохраняет даже черновики и репетиции.
Подобный подход эффективен в нескольких сценариях:
- На разных устройствах: привяжите агента к единому хранилищу и получайте доступ к истории с любой рабочей машины.
- Внутри команды: новый участник подключает своего агента и с первого дня получает доступ к многомесячной истории принятых решений, включая тупиковые ветки и обоснования, которые обычно не попадают в pull request.
- Вместе с проектами с открытым исходным кодом: мейнтейнер может публиковать сессии, привязанные к конкретным релизам. Это работает как живой файл CLAUDE.md, где хранится аргументация выбора архитектуры, избавляя команду от необходимости постоянно переписывать документацию вручную.
Любой пользователь может прочитать общедоступную память с помощью флага --memory. Опубликованные базы сопровождаются специальной карточкой датасета и тегом funes, благодаря чему их легко найти на Hub. Платформа, изначально созданная для открытых весов и наборов данных, получает полноценную открытую оперативную память для ИИ. В ней фиксируются принятые решения, неудачные эксперименты и причины выбора конкретных путей, доступные для запросов других агентов с полной прослеживаемостью первоисточников.
Длительные исследования часто раздувают контекст сессии до такой степени, что каждый новый шаг начинает обходиться дороже выполнения самой работы. Обычно разработчики выбирают между двумя путями: разрешить агенту сжимать контекст и продолжать дальше либо зафиксировать результаты в виде текстовой сводки (handoff) и начать сессию с чистого листа. Разработчики добавили третий вариант и протестировали все три метода на специальном бенчмарке handoff-vs-recall, включающем задачи, решение которых невозможно восстановить без предварительного погружения в историю сессии.
Автоматическое сжатие контекста, используемое большинством агентов по умолчанию, показало неоднозначные результаты: на одной задаче оно сработало успешно, а на другой полностью провалилось. Причиной сбоя стало то, что алгоритм суммаризации сгладил ключевые детали, отбросив по-настоящему важные находки. Метод recall извлекает оригинальные фрагменты текста целиком, избавляя критически важные факты от необходимости выживать после грубого сокращения.
Если говорить об экономичности, то система Recall оказалась самой выгодной из всех трех протестированных вариантов на обеих задачах. Она обошлась в восемь раз дешевле текстовой передачи контекста в одном случае и в четыре раза — в другом. Светлая часть на каждом графике отображает разовые расходы на подготовку канала, передачу управления или компрессию данных. Эти затраты оплачиваются еще до того, как будет задан первый вопрос, и учитываются однократно. Специальный крестик отмечает канал, который так и не был сформирован, поэтому для него показатель стоимости успешного запроса отсутствует.
«Думать — значит забывать различия, обобщать, абстрагировать», — писал Хорхе Луис Борхес в новелле «Фунес памятливый». Ваши цифровые помощники уже зафиксировали всю необходимую историю. Проект funes доступен на GitHub в репозитории huggingface/funes. Всего одна команда позволяет превратить накопленные логи в полноценную базу данных, которую легко прочитает следующий агент на любом доступном у вас компьютере.
Техническая реализация и доступность проекта
Инструмент funes во многом опирается на проверенные технологии. Он использует качественные открытые модели эмбеддингов, способные эффективно работать локально, append-only датасеты от Lance с недорогими инкрементальными записями, а также механизмы кэширования и дедупликации контента, задействованные на Хабе. Главная заслуга разработчиков заключается в том, чтобы грамотно объединить эти компоненты в удобный инструмент, которым действительно смогут пользоваться автономные системы.
Проект распространяется с открытым исходным кодом. Вы можете смело создавать тикеты в репозитории, если столкнулись с трудностями при установке, заметили пропуск нужного воспоминания или хотите предложить интеграцию для нового агента.
Источник: huggingface.co
