pimenov.ai

Как построить самообновляющуюся базу знаний на основе LLM

Перевод статьи Бена Холмса (Ben Holmes) о системе, в которой ИИ-агенты сами превращают ваши сырые заметки в организованную, взаимосвязанную базу знаний — с тегами, источниками, вики и визуализациями.

ИИПрактика
ℹ️
Перевод статьи Бена Холмса (Ben Holmes, @BHolmesDev) — создателя приложения для Markdown-заметок Hubble.md, на основе которого и строится предлагаемое в статье решение. Оригинал: https://x.com/bholmesdev/status/2074499909785461170
Как построить самообновляющуюся базу знаний на основе LLM
Как построить самообновляющуюся базу знаний на основе LLM

Возможно, вы слышали, как Андрей Карпатый рассказывает про «LLM-вики». Они превращают ваши разрозненные мысли в удобные для навигации заметки, вики и визуализации. Это невероятно мощный инструмент для исследователей, разработчиков, любителей делать хаотичные записи — по сути, для всех.

Вот система, которая заставит агентов организовывать ваш «второй мозг» автоматически:

  • Начните вести заметки в формате Markdown
  • Добавьте навык /enrich-note, который поручает агентам проставлять теги, источники и обратные ссылки
  • Добавьте навык для вики, который собирает заметки в постоянную базу знаний
  • Настройте автоматизации, которые запускают эти навыки по расписанию
  • Добавьте визуализации, которые строятся из ваших заметок в реальном времени

Я также выложил видеоразбор всей настройки на YouTube.

Шаг 1. Одна папка с сырым Markdown

Мы будем вести заметки в Markdown, чтобы они были легко доступны агентам. Для этого можно использовать Obsidian или, если хочется более дружелюбного приложения в духе Apple Notes, — приложение Hubble.md, которое я сделал сам.

Следуя совету Андрея Карпатого, все написанные вручную (или надиктованные голосом) заметки мы складываем в папку raw/. Это сырые, неотфильтрованные мысли, с которыми будут работать наши агенты.

Вот пример, который я наговорил через инструмент голосовой расшифровки после прослушивания выпуска подкаста Acquired про Ferrari.

Notion image

Обратите внимание: здесь нет ни метаданных, ни обратных ссылок. Честно говоря, вам не нужен даже заголовок — все эти детали агент проставит за вас.

Шаг 2. Навык /enrich-note

Теперь давайте поручим агентам обогащать эти заметки деталями для удобного поиска. Для этого я написал навык /enrich-note. Его (как и все остальные навыки из этой статьи) можно получить одной командой из репозитория с навыками.

Навык делает три вещи:

  1. Теги. Навык ведёт общий реестр тегов в виде файла tags.md, где каждый тег снабжён однострочным описанием. Я советую заводить теги, связанные с типом источника (blog, podcast, video), и отдельно — теги по темам и областям интересов (ai-hardware, business, rust). Агенту также велено переиспользовать существующие теги и неохотно придумывать новые. Иначе, как я заметил, агенты плодят теги слишком щедро.
  2. Источники. Если заметка откуда-то взялась (подкаст, книга, видео), агент делает небольшой веб-поиск, находит URL источника и записывает его во frontmatter.
  3. Связанные заметки. Агент прочёсывает остальной архив в поисках действительно близких по смыслу заметок и добавляет их как вики-ссылки в раздел ## Related. Операция может быть затратной, но не дороже, чем поручить агенту задачу по коду в небольшом или среднем репозитории. Лично у меня сотни заметок. Если протестируете это на более крупном массиве — напишите, что узнали и какие оптимизации нашли.

После обработки та самая заметка про Ferrari из подкаста Acquired выглядит уже иначе.

Notion image

Обратите внимание на отметку enrichedAt. По ней автоматизация понимает, какие заметки уже были обогащены раньше. Идемпотентность важна, когда мы начинаем запускать навык по расписанию.

Шаг 3. Навык для вики

Обогащённые заметки уже можно искать, но это по-прежнему фрагменты. Следующий уровень — вики: постоянная, связанная между собой база знаний, которую агент строит из ваших заметок.

Это напрямую из гиста Карпатого про llm-wiki, который я рекомендую прочитать целиком. Основная идея: попросить агента сгенерировать удобную для навигации главную страницу вокруг какой-то области интересов (в моём случае — приёмы работы с кодинг-агентами или религиоведение).

Это полезно и вам, потому что создаёт легко просматриваемый указатель людей, мест и вещей. Но это полезно и самим агентам для навигации, когда вы задаёте вопросы по своим заметкам. Вместо извлечения в стиле RAG, где модель каждый раз заново «переоткрывает» ваши знания под каждый вопрос, агент поддерживает накопительный артефакт: страницы сущностей, тематические сводки, указатель, журнал. Как говорит Андрей: «LLM — это программист, а вики — это кодовая база».

Чтобы начать, вставьте гист в своего агента и добавьте одно предложение о том, чего вы хотите. Что-то вроде:

Прочитай вот это: https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f. Настрой вики в wikis/latest-ai/, которая отслеживает приёмы работы с кодинг-агентами из моих заметок — промптинг моделей, паттерны оркестрации, полезные навыки агентов и т. д. Возьми за основу всё релевантное из raw/.

Агент разворачивает структуру папок, пишет собственную схему AGENTS.md с инструкциями по поддержке вики и загружает ваши существующие заметки.

Далее я написал навык, чтобы «освежать» эту вики со временем, — /refresh-wiki. Он ищет новые или изменённые заметки в raw/, подгружает релевантные в каждую вики, обновляет страницы сущностей и понятий и делает проверку на противоречия, страницы-сироты и устаревшие утверждения.

Вот урезанный вид index.md для моей вики «Последнее в ИИ». Она построена из заметок по подкастам и видео за последние несколько месяцев, и каждая запись ведёт на полноценную страницу, которую агент пишет и поддерживает.

Notion image

Ещё я веду вики для изучения Библии по книге Ли Стробела «Христос под следствием». Книга — это длинная серия интервью с экспертами, поэтому агент построил указатель «люди» со страницей на каждого собеседника: кто это и что он утверждал. Мне это очень помогает возвращаться к аргументам спустя недели, ведь без глоссария имена у меня сливаются в одно.

Notion image

Шаг 4. Автоматизации

Навыки полезны, но мне не хочется перезапускать их каждый раз, когда я иду просматривать заметки или задавать вопрос агенту. У обоих навыков есть циклические варианты, рассчитанные на запуск по расписанию:

  • /enrich-notes-loop оборачивает /enrich-note и проходит по всем недавно созданным заметкам, используя enrichedAt, чтобы пропускать уже обработанные.
  • /refresh-wiki проходит по вашей папке wikis/ и обновляет каждую найденную вики. (Держите вики в папке wikis/. Всё это можно настроить под себя.)

Есть два варианта, которые я советую попробовать: локальные автоматизации для старта и облачные — чтобы сделать процесс устойчивым.

Локальные автоматизации через Codex

Запланировать запуск можно по-разному. Один способ — локальная автоматизация, которая работает на вашем компьютере и по расписанию (cron) «просыпается», чтобы навести порядок в папке с заметками. Приложение Codex предлагает это во вкладке Scheduled.

Дальше нажмите «Create with chat», выберите папку, где лежат ваши заметки, и укажите навык для запуска. Я советую ставить ежедневный ночной запуск. Для /enrich-notes-loop можно выбрать уровень рассуждений пониже, поскольку навык менее неоднозначный. Для генерации вики уровень повыше позволит модели быть вдумчивее и креативнее. Настраивайте под себя.

Облачные автоматизации

Локальные автоматизации проще всего запустить, но у них есть очевидный минус: чтобы задача выполнилась, компьютер должен быть включён и работать. Codex, правда, следит за тем, чтобы запланированные задания выполнялись даже при закрытой крышке ноутбука. И всё же, когда я на несколько дней уехал из города, мои автоматизации перестали работать — я забыл подключить ноутбук к сети. 🤦‍♂️

Поэтому я советую попробовать облачные исполнители. Вот набор инструментов, которым я пользуюсь:

  • oz.dev — чтобы создать облачную песочницу, подключённую к моделям с открытыми весами
  • Obsidian Sync — чтобы синхронизировать Markdown-заметки с облаком
  • Headless-CLI Obsidian — чтобы обращаться к этим заметкам программно из облачной песочницы

Oz — это облачная платформа Warp для хостинга агентов. Да, оплата в основном идёт по стоимости токенов. Но модели с открытыми весами вроде Kimi k2.6 очень экономны по токенам (в 3–4 раза экономнее моделей Claude) и при этом качественны.

Вот как выглядит каждый запланированный запуск:

  • Агент через CLI Obsidian вытягивает архив в облачную песочницу
  • Запускает /enrich-notes-loop или /refresh-wiki
  • Заливает результаты обратно, и они синхронизируются на вашу машину

Я написал ещё два навыка, чтобы запускать это с необходимой настройкой облачной песочницы: /enrich-notes-loop-cloud и /refresh-wiki-cloud. Это тонкие обёртки, которые синхронизируют архив вниз, запускают базовый навык и синхронизируют обратно.

Настройка окружения и расписания — это горстка команд oz CLI, поэтому я оформил и её в виде навыка: /setup-oz-automations. Сначала заведите аккаунт: зайдите на oz.dev и нажмите «start an agent». Так вы попадёте на вход, где сможете создать аккаунт. Затем установите навыки (если ещё не сделали этого) и передайте остальное агенту.

Запустите навык /setup-oz-automations. Навык проверяет наличие навыка платформы Oz от Warp (при отсутствии ставит его командой npx skills add warpdotdev/oz-agent-skill), спрашивает имя вашего архива и токен авторизации Obsidian, а затем создаёт окружение и оба расписания: ночное обогащение заметок и еженедельное обновление вики. Любое расписание можно поставить на паузу командой oz schedule pause, а после каждого запуска остаётся транскрипт сессии, который можно посмотреть в панели Oz.

Шаг 5. Визуализации

Итак, теперь у нас есть красивые сети Markdown-файлов с тегами, обратными ссылками, страницами-указателями и глубокими вики. Но что, если пойти дальше текста?

Поскольку всё это — Markdown-файлы в одной папке, агент может строить поверх них интерактивные визуализации на HTML. Я сделал несколько примеров, которые можно подключить к своей системе, если ваши заметки лежат в папке raw/:

  • Notes burndown — график активности в стиле GitHub, показывающий, как вы ведёте заметки со временем. Я использую его, чтобы выработать привычку регулярно вести дневник.
  • Thought constellation — показывает заметки как граф, сгруппированный по вашим самым частым тегам (плоды работы /enrich-note). Он помог мне найти самые упоминаемые заметки для повторного прочтения и увидеть пробелы, где стоит сосредоточиться (очевидно, мне надо больше читать...).

Их можно строить как разовые визуализации, обновляемые по расписанию, — по аналогии с примерами /enrich-note и вики. Но если вы хотите, чтобы они обновлялись «вживую», читая файлы с диска, — их можно смотреть внутри Hubble.md. Это то самое приложение для Markdown-заметок, о котором я упоминал выше. Оно позволяет просматривать HTML-приложения рядом с заметками и подмешивает runtime-API для чтения файлов в текущей папке, чтобы строить визуализации, которые обновляются программно.

Просто начните записывать

Все навыки и визуализации лежат в этом GitHub-репозитории. Для начала просто попросите своего агента конвертировать имеющиеся заметки в Markdown (Apple Notes, Notion, Granola и другие это поддерживают). Затем попробуйте какие-то из навыков, которыми я поделился, — посмотрите, будут ли они вам полезны. Постройте вики вокруг следующего исследовательского проекта, хобби или сессии кодинга с агентом. Придумайте новую визуализацию и поделитесь ею. Мне интересно, что у вас получится.

И да, попробуйте oz.dev и Hubble.md :)


Ресурсы из статьи

Оригинал и автор

Навыки (GitHub)

Инструменты и материалы

  • Гист Андрея Карпатого про llm-wiki
  • oz.dev — облачная платформа Warp для хостинга агентов
  • Навык Oz от Warp — установка командой npx skills add warpdotdev/oz-agent-skill
  • Obsidian и Obsidian Sync — хранение и синхронизация Markdown-заметок

По теме

Статья: Мои Codex skills: как мы собираем дисциплину для ИИ-агента

Блог: book-to-skill: превращаем книгу в навык, который агент читает по требованию

База знаний: Obsidian — локальная база знаний на markdown

Когда база знаний обновляется сама, вы просто пишете заметки, а разбор и связывание остаются за агентом.

Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov