Загрузка 0
ПОДЕЛИТЬСЯ

Мой блог

Листай вниз

Обзор Vault Audit AI для Obsidian: от локального аудита заметок к семантическому поиску и RAG

Обзор Vault Audit AI для Obsidian: от локального аудита заметок к семантическому поиску и RAG

Как развивался плагин Vault Audit AI для Obsidian: от локального аудита к семантическому поиску и RAG

При небольшом объеме заметок в Obsidian — порядка пары десятков документов — стандартного поиска по ключевым словам, тегам и обратным ссылкам вполне достаточно. Однако, когда база разрастается до сотен и тысяч страниц, найти нужную идею становится непросто. Вы точно помните, что фиксировали концепцию, но не можете вспомнить точный заголовок или формулировки, использованные несколько месяцев назад. Обычный контекстный поиск в таких случаях оказывается бессилен.

Из попытки эффективно решить эту проблему вырос плагин Vault Audit AI для Obsidian. Первоначально инструмент задумывался как решение для проведение комплексного AI-аудита заметок с использованием алгоритма MapReduce. Он собирал общую структуру, находил изолированные файлы (orphan notes), формировал карты содержания (MOC) и генерировал учебные карточки (flashcards). Однако со временем стало очевидно: разового аудита постфактум недостаточно. Системе необходим постоянный семантический слой, способный мгновенно находить информацию по смыслу непосредственно в момент запроса.

В актуальной версии Vault Audit AI (1.7.0) плагин превратился в полноценную систему управления знаниями. Я детально изучил его архитектуру, внутреннее устройство семантического индекса и RAG-механику, чтобы разобраться, как локальный векторный поиск трансформирует ежедневную работу с личной базой заметок.

Реклама
Общий вид панели управления Vault Audit AI в интерфейсе Obsidian
Главная панель управления AI-инструментами и аудитом базы знаний.
Схема разбивки Markdown документа на отдельные чанки
Логическое деление текста заметки по заголовкам и структуре.
Индикация состояния локального векторного индекса
Отображение состояния индексации и количества сохраненных векторов.
Настройка параметров задержки и синхронизации SemanticAutoSync
Параметры объединения событий и задержки автосинхронизации.
Сравнение векторов документов при поиске связей
Вычисление косинусного сходства векторов для определения похожих документов.
Отображение проверенных источников в ответе Ask your Vault
Список проверенных файлов-источников, использованных при генерации ответа.
Проведение автоматических тестов плагина в окружении разработки
Результаты выполнения 698 автотестов для проверки надежности индекса.
Архитектурная схема взаимодействия с внешним сервисом Companion
Взаимодействие плагина Obsidian с внешним сервисом Companion по протоколу MCP.
Обзор Vault Audit AI для Obsidian: от локального аудита заметок к семантическому поиску и RAG
Обзор Vault Audit AI для Obsidian: от локального аудита заметок к семантическому поиску и RAG
Обзор Vault Audit AI для Obsidian: от локального аудита заметок к семантическому поиску и RAG
Обзор Vault Audit AI для Obsidian: от локального аудита заметок к семантическому поиску и RAG
Обзор Vault Audit AI для Obsidian: от локального аудита заметок к семантическому поиску и RAG

Парсинг и деление заметок на фрагменты: зачем нужен MarkdownChunker

Превращение всей заметки объемом в 10–15 тысяч символов в один единый вектор — крайне неэффективный подход. Если документ содержит сразу несколько тем (например, базовые настройки СУБД, векторные расширения и архитектуру RAG), итоговый вектор смыслово усредняется. В результате точечные идеи теряются в общем объеме текста.

Чтобы избежать этой проблемы, перед отправкой в модель эмбеддингов документ передается в специализированный модуль MarkdownChunker. Он бережно разбирает структуру Markdown, сохраняя иерархию заголовков и смысловую связность блоков. Для каждого полученного фрагмента (chunk) формируется расширенный набор метаданных:

Архитектура семантического слоя плагина Vault Audit AI
Архитектура семантического слоя: единый локальный индекс для поиска, похожих заметок и RAG.
  • относительный путь к файлу в хранилище;
  • иерархия заголовков (heading path);
  • смещения строк и символов в исходном документе;
  • хэш содержимого (content hash);
  • уникальный стабильный идентификатор фрагмента (chunk ID).

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

Локальное векторное хранилище LocalVectorStore без тяжелых СУБД

На этапе проектирования часто возникает соблазн подключить внешнюю векторную СУБД — Qdrant, расширение SQLite или алгоритмы HNSW. Однако для личной базы знаний в несколько тысяч заметок это создает лишнюю сложность. На стандартных объемах персонального Obsidian-хранилища линейное сканирование (linear scan) по локальным векторам выполняется практически мгновенно.

Именно поэтому в Vault Audit AI реализован собственный модуль LocalVectorStore. Индекс хранится непосредственно внутри рабочей директории плагина в Obsidian. Пользователю не требуется устанавливать Docker, разворачивать сторонние серверы или настраивать базы данных. Достаточно включить семантические функции в настройках плагина, выбрать провайдера эмбеддингов и запустить первичную индексацию.

Автоматическая синхронизация индекса: борьба с лишними запросами через SemanticAutoSync

Ручной перерасчет индекса после каждого редактирования быстро свел бы на нет всё удобство использования. Однако прямое реагирование на каждое событие файловой системы тоже недопустимо: во время активного набора текста Obsidian генерирует десятки событий модификации файла в секунду.

Для оптимизации этого процесса был создан сервис SemanticAutoSync. Он собирает события файловой системы и применяет алгоритм задержки (debounce) с последующим схлопыванием (coalescing) операций:

Реклама
  • серия подряд идущих модификаций одного файла объединяется в одну операцию чтения с диска по завершении ввода;
  • операции создания и последующего удаления файла взаимно аннулируют друг друга;
  • переименование файла превращается в атомарную пару из удаления старого пути и добавления нового без повторного вызова API эмбеддингов.

Параллельный доступ и гонки данных: создание барьера чтений и записей

При фоновой работе синхронизации неизбежно возникают состояния гонки данных (race conditions). Например, пользователь может запустить поиск или полную пересборку индекса в тот момент, когда автосинхронизация уже записывает новые векторы.

Чтобы исключить повреждение структуры данных, семантический подмодуль оснащен координатором чтений и записей с поддержкой приоритета записи (writer-preferred read/write barrier). Поисковые операции могут выполняться параллельно несколькими потоками чтений. Однако, как только в очередь поступает запрос на эксклюзивную перезапись или полную пересборку индекса, новые операции чтения блокируются до завершения процесса записи. Это гарантирует целостность хранилища при любых действиях пользователя.

Инкрементальная индексация на уровне отдельных чанков

Если заметка состоит из десяти блоков и пользователь изменил всего один абзац, повторная генерация эмбеддингов для всего документа приведет к бесполезной трате сетевых ресурсов и API-лимитов. В Vault Audit AI реализовывана инкрементальная проверка на уровне чанков.

Результаты работы семантического поиска по заметкам в Obsidian
Результаты семантического поиска с группировкой по релевантным документам.

Модуль индексации сравнивает метаданные и хэши содержимого новых блоков с уже сохраненными. В батч для отправки провайдеру попадают исключительно измененные или новые фрагменты. Если хэш чанка совпадает с индексированным ранее, его вектор переиспользуется. При перезапуске Obsidian также выполняется фоновая инкрементальная сверка, исключающая необходимость полной переиндексации хранилища.

Практическое применение семантического слоя

На базе сформированного локального векторного индекса в плагине построены три ключевых инструмента поиска и навигации.

Интерфейс поиска похожих заметок Similar Notes в Obsidian
Окно поиска похожих заметок на основе усредненного вектора текущего документа.

Смысловой поиск по заметкам (Semantic Search)

Поисковый запрос пользователя преобразуется в вектор с помощью той же модели эмбеддингов и сравнивается с локальным хранилищем. Найденные фрагменты автоматически группируются по исходным документам. В результате пользователь получает список заметок с наивысшим совпадением смыслового контекста и может в один клик перейти к нужному разделу.

Выявление потенциальных смысловых дубликатов заметок
Потенциальные дубликаты с высоким косинусным сходством векторов для ручного ревью.

Поиск похожих материалов через Similar Notes

Инструмент позволяет найти логически связанные заметки без необходимости формулировать поисковый запрос. Для текущего документа вычисляется усредненный вектор на основе нормализованных векторов его чанков. Затем этот вектор сравнивается с векторами остальных документов базы. Все вычисления происходят исключительно над уже имеющимися в локальном индексе данными и не требуют дополнительных внешних запросов.

Выявление потенциальных дубликатов

Сравнение векторов документов позволяет выявлять заметки с очень высоким косинусным сходством (например, от 0.98 и выше). Команда поиска потенциальных дубликатов выводит список кандидатов для ручного анализа. Важно отметить, что плагин принципиально ничего не удаляет и не объединяет в автоматическом режиме, оставляя окончательное решение за пользователем.

Процесс реконструкции свежих фрагментов Markdown перед генерацией RAG-ответа
Ask your Vault переиспользует индекс и заново реконструирует актуальные чанки из Markdown.

Интеграция RAG-системы: модуль Ask your Vault

В версии Vault Audit AI 1.7.0 появился модуль Ask your Vault, реализовавший архитектуру RAG (Retrieval-Augmented Generation) поверх уже построенного семантического индекса.

Реклама

Реконструкция свежего текста из Markdown

В векторном индексе хранятся только короткие превью фрагментов, которых недостаточно для формирования качественного ответа нейросетью. Чтобы гарантировать актуальность данных, перед отправкой контекста в LLM модуль RagContextBuilder заново читает исходные Markdown-файлы с диска. Фрагмент восстанавливается по стабильному идентификатору и хэшу содержимого. Если файл успел измениться и хэши не совпали, устаревший блок отбрасывается.

Разнообразие источников и жесткий лимит контекста

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

  • не более 2 фрагментов от одного документа;
  • максимум 6 различных документов в итоговом контексте;
  • суммарный объем контекста ограничен 12 000 символов Unicode.

Изоляция контекста в Frozen Context

Генерация ответа нейросетью с потоковой передачей (streaming) может занимать длительное время. Чтобы не удерживать блокировку векторного хранилища на весь период ответа, сформированный контекст «замораживается» в оперативной памяти (Frozen Context). В это время фоновая автосинхронизация или очистка индекса могут продолжать работу, не мешая текущей сесси общения с нейросетью.

Защита от фантомных ссылок и инъекций в промптах

Языковые модели склонны выдумывать несуществующие источники при формировании сносок. В Vault Audit AI сопоставление ссылок на документы полностью изолировано от нейросети: плагин сам генерирует идентификаторы источников и проверяет соответствие итоговых сносок реальным путям к файлам.

Обработка ситуаций, когда в базе заметок нет ответа на вопрос
Модель сообщает об отсутствии информации, если найденные векторы не содержат ответа.

Кроме того, текст извлекаемых заметок явным образом помечается в системном промпте как недоверенные данные (untrusted data). Это предотвращает атаки класса Prompt Injection, когда находящиеся внутри заметки текстовые инструкции пытаются перехватить управление языковой моделью.

Что происходит, если в базе нет нужного ответа

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

Рендеринг разметки Markdown

При потоковой генерации текста используется быстрый вывод plain-text, чтобы не перегружать интерфейс Obsidian частой перерисовкой DOM. По завершении ответа итоговый текст однократно проходит через стандартный MarkdownRenderer Obsidian, формируя аккуратное форматирование со списками и выделениями.

Две разные системы индексации: Audit Index и Semantic Index

В процессе анализа Vault Audit AI важно разделять два независимых индекса, выполняющих разные задачи:

Результат проведение структурного аудита хранилища Obsidian
Краткая сводка и рекомендации по организации структуры заметок.
Экспорт результатов аудита заметок на холст Canvas
Выгрузка результатов аудита и связей заметок на интерактивную карту Canvas.
Режимы работы глубокого аудита заметок Deep Audit
Переиспользование индекса предыдущего анализа в режимах Single, Full и Batch.
  1. Audit Index (файл `note-index.json`): хранит выводы прошлых LLM-анализов (резюме, ключевые тезисы, теги, оценки качества и тематические кластеры). Его главная задача — исключить повторную обработку неизменившихся файлов при проведении аудита базы.
  2. Semantic Index: содержит числовые векторы и метаданные чанков. Используется для семантического поиска, поиска похожих заметок, обнаружения дубликатов и работы RAG.

Такое разделение полностью оправдано: кеш выводов нейросети и поисковая векторная память имеют разный жизненный цикл, стоимость обновления и сценарии использования.

Генерация учебных карточек flashcards по тексту заметки
Автоматическая генерация учебных карточек прямо в активном документе.

Дополнительные возможности Vault Audit AI

Помимо семантического слоя, в плагине сохраняется весь ранее разработанный инструментарий для работы с заметочными массивами.

Структурная аналитика и Deep Audit

Плагин умеет строить наглядные дашборды со статистикой по папкам, тегам, связности документов и сиротским заметкам с возможностью экспорта результатов на холст Canvas. В режиме Deep Audit нейросеть формирует глубокие отчеты о структуре хранилища, выявляет смысловые проблемы и автоматически собирает карты содержания (MOC).

Инструменты работы с текстом

В плагине доступны функцииумного дополнения текста, генерации запросов Dataview, автоматического разделения монолитных документов на атомарные заметки, а также генерации учебных карточек (flashcards). Пакетный режим (batch processing) позволяет массово применять произвольные AI-преобразования к выбранным группам файлов.

Настройка провайдеров эмбеддингов и языковых моделей в плагине
Раздельный выбор провайдеров для генерации эмбеддингов и работы LLM.

Гибкая настройка провайдеров и защита данных

Пользователь может гибко комбинировать сервисы: использовать локальную модель через Ollama для генерации эмбеддингов, а ответы на вопросы получать через сторонние API (OpenRouter, OpenAI, Groq). Сами векторные индексы и текстовые базы всегда остаются строго на локальном устройстве.

Надежность системы: 698 автотестов и реальные ограничения

Стабильность работы всех компонентов обеспечивается тестовым покрытием из 698 автотестов. Автор активно использует подход мутационного тестирования, проверяя поведение системы при искусственном введении ошибок в логику сверки хэшей и очереди записей.

Среди текущих ограничений архитектуры стоит отметить:

  • режим диалога Ask your Vault пока является разовым (one-shot) и не хранит историю сообщений;
  • индексации подлежат только файлы разметки Markdown (PDF и медиафайлы не учитываются);
  • поиск использует линейное сканирование, ориентированное на базы малого и среднего объема.

Перспективы развития: экосистема Companion и протокол MCP

Следующим шагом в развитии проекта станет создание внешнего сервиса Vault Audit AI Companion, работающего на базе Node.js. Он будет выполнять роль сервера по протоколу Model Context Protocol (MCP), позволяя сторонним AI-клиентам (Claude Desktop, Cursor, Codex) безопасно обращаться к сформированному знаниевому слою Obsidian в режиме чтения.

Подводя итог, можно сказать, что Vault Audit AI эволюционировал из набора простых AI-команд в зрелую локальную инфраструктуру работы со знаниями. Семантический поиск и RAG-механики делают поиск информации в Obsidian максимально естественным и приближенным к работе человеческой памяти.

Источник: habr.com

Реклама
01.