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

Мой блог

Листай вниз

Как я создал ИИ-инструмент для автоматического заполнения Obsidian

Как я создал ИИ-инструмент для автоматического заполнения Obsidian

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

Попытки найти готовые автоматические решения среди существующих ИИ-помощников не увенчались успехом: они умели искать по заметкам, но не воплощали мою главную задумку. Поразмыслив над задачей, я решил разработать собственный софт, который превращает звуковой или текстовый поток в готовые структурированные знания без моего участия.

Встроенный визуальный граф знаний в приложении memplua
Собственное визуальное представление базы данных внутри программы дополняет экспорт в Obsidian.
Как я создал ИИ-инструмент для автоматического заполнения Obsidian
Как я создал ИИ-инструмент для автоматического заполнения Obsidian
Как я создал ИИ-инструмент для автоматического заполнения Obsidian
Как я создал ИИ-инструмент для автоматического заполнения Obsidian
Как я создал ИИ-инструмент для автоматического заполнения Obsidian
Как я создал ИИ-инструмент для автоматического заполнения Obsidian
Как я создал ИИ-инструмент для автоматического заполнения Obsidian

Мой идеальный Obsidian

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

Реклама
Схема работы алгоритма FloatingWindow для обработки чанков
Принцип пересекающихся окон помогает передавать часть контекста между соседними текстовыми блоками.

Основными источниками информации выступают звук и текст. Чтобы не зависеть от конкретных платформ, я решил перехватывать системный аудиопоток операционной системы, а текстовые данные забирать, например, из буфера обмена. Обрабатывать этот массив должна локальная языковая модель: отправлять личные данные в сторонние облака мне не хотелось, к тому же проект задумывался полностью бесплатным. На выходе нейросеть формирует структурированные файлы формата .md, которые автоматически попадают в локальное хранилище Obsidian.

Создание прототипа

Реализацию я решил начать со звуковой составляющей, так как работа с системным аудиопотоком в среде ОС представляет наибольший интерес. Поскольку я использую Windows и эта платформа остается самой популярной, я сосредоточился именно на ней. Перехватив звук и получив его в виде потока байт, я столкнулся с тем, что LLM не умеет напрямую расшифровывать аудио. Для решения этой проблемы я интегрировал в пайплайн модель Whisper, созданную специально для качественной транскрибации.

Структурная схема понятий терминов и мыслей в конспекте
Классификация сущностей, которые языковая модель выделяет из информационного потока.

Полученный текст нарезается на отдельные чанки, которые отправляются в языковую модель. Здесь возник ключевой вопрос о контексте: если разорвать фразу посередине между двумя чанками, нейросеть потеряет смысл сказанного. Самым наивным методом стало применение техники FloatingWindow, когда фрагменты частично перекрывают друг друга, передавая часть контекста в следующий блок.

Для запуска самой логики я выбрал связку из легковесного инференса llama.cpp и компактной, но умной языковой модели Qwen3-4B-Q4. Подготовив детальный промпт, я заставил ИИ выдавать результаты строго в формате JSON для дальнейшего автоматического парсинга. Система заработала: звук оцифровывается, Whisper расшифровывает речь, а нейросеть выделяет ключевые тезисы.

Схема нового Focus алгоритма обработки контекста
Разделение текста на фокусную группу и вспомогательный контекст предотвращает появление дубликатов.

Делаем лучше

Чтобы развивать проект дальше, я четко разделил базовые понятия, используемые в архитектуре приложения:

  • Термин — самодостаточная сущность, обладающая собственным именем и четким определением.
  • Мысль — логическая связь, объединяющая несколько терминов между собой.
  • Конспект — итоговый набор терминов и мыслей, сгенерированный LLM из группы чанков.

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

Введение этапа верификации вскрыло новую проблему: прежний метод FloatingWindow генерировал слишком много дублирующейся информации. Из-за перекрывающихся фрагментов текста модель постоянно обрабатывала одинаковые куски контекста. Чтобы избавиться от этого, я перешел на новый алгоритм Focus. Теперь входящий текст разделяется на фокусную группу, из которой LLM извлекает сущности, и дополнительный контекст, используемый исключительно для уточнения смысла без создания новых записей.

Доведение до production

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

Компактная рабочая панель виджета memplua
Интерфейс управления записью и основными функциями приложения выполнен в виде компактного виджета.

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

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

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

01.