Стандартный RAG-пайплайн разбивает документы на фрагменты, строит векторные представления и ищет по косинусному сходству. Этого достаточно, чтобы найти похожий абзац, но недостаточно, чтобы ответить на вопросы вроде «покажи технические статьи с нейтральным тоном и высокой полнотой изложения» или «какие тексты затрагивают тему безопасности, но не содержат рекламы». Для таких запросов нужны структурированные метаданные — и именно их генерирует проект text-metadata-generator.

Инструмент работает так: каждый документ из коллекции отправляется в LLM с инструкцией вернуть JSON-объект с заданными полями. Схема проверяется автоматически, что исключает «галлюцинации» в структуре ответа. Среди генерируемых полей — заголовок, краткое резюме, основная идея, список тем, ключевые слова, жанр, тональность, признак NSFW, наличие рекламы, оценка полноты и анализ демагогических приёмов. После обработки документы хранятся с двумя типами данных: исходными метаданными (автор, дата, рейтинг) и синтетическими, созданными LLM. Поиск строится как комбинация SQL-предикатов по структурированным полям и векторного поиска по семантике.

Поле метаданныхТипПример значения
TitleстрокаАнализ песни «Воздух» группы Nautilus Pompilius
SummaryстрокаКраткое резюме содержания документа
ThemesсписокВнутренняя свобода, бессилие власти
Genreстрокаfiction / poetry / song lyrics
Sentiment polarityстрокаmixed
Completeness scoreчисло 0–11
Is NSFWбулевоfalse
Has Advertisingбулевоfalse
Demagoguery severityстрокаnone

Автор проекта протестировал подход на корпусе из 13 275 статей с Хабра. Это позволяет, например, связать рейтинг статьи с признаком NSFW или тональностью и искать закономерности, которые не видны при обычном полнотекстовом поиске. В качестве дополнительной демонстрации гибкости метода тот же пайплайн был запущен на текстах песен — в частности, на «Воздухе» Nautilus Pompilius и Still Alive из игры Portal. LLM корректно определила жанры, выделила темы и оценила тональность обоих текстов, хотя они принципиально различаются по природе.

text-metadata-generator отправляет каждый документ в LLM и сохраняет результат в виде JSON, проверенного по схеме.

Одна из заявленных возможностей — запуск нескольких разных LLM на одном тексте для получения «синтетического плюрализма» интерпретаций. Это актуально для задач, где важна многогранность анализа: например, при разметке новостного архива или исследовательского корпуса. Время обработки одного документа зависит от модели: в примере с песней Nautilus Pompilius зафиксировано время выполнения 75 408 мс при 2 923 входных и 867 выходных токенах.

Практические сценарии применения, которые называет автор: личная библиотека документов с поиском через SQL и семантику, разбор накопившихся заметок в Obsidian или Markdown-файлов в git-репозитории, аналитика по корпоративным документам. Подход не требует дообучения модели — достаточно правильно составить JSON-схему и настроить промпт. Проект распространяется как open-source.