Классический RAG индексирует исходный текст документа, предварительно разбивая на фрагменты. Потом рассчитывает векторное представление фрагментов и сохраняет их векторные представления в базу данных для поиска. Это дает возможность искать по сходству фрагментов текста и поискового запроса пользователя, но не дает возможность искать по более высокоуровневым резюме и смыслам, темам поднятым в тексте и прочему. Также не помогает с аналитикой по содержимому.
Бесплатный проект text-metadata-generator позволяет выполнять запросы к LLM по каждому документу из коллекции документов, результаты вывода LLM проверяются по JSON схеме.
Зачем может пригодиться эта программа и подход со структурированием текстовой информации:
Если нужна своя библиотека с каталогом - поиск по локальным документам с использованием комбинации SQL предикатов и семантического поиска
Аналитика по документам, возможность находить новое в текстах: комбинируя структурированные поля созданные LLM из исходного текста, и находя закономерности с уже существующими в документе метаданными. Например, связывая с рейтингом признак NSFW, тон повествования, полноту содержания итп.
Разгрести “авгиевы конюшни” личных заметок в Obsidian или git репозитарии с Markdown файлами.
Поиск по информации статей реализован в виде веб-приложения на llama.cpp в WebAssembly (wllama) для расчета эмбеддингов и Wasm сборке колоночной базы данных DuckDB. Получился статический веб сайт с JavaScript которому для работы не нужен бэкэнд для поиска данных и запуска embeddinggemma, полный serverless!
Рассмотрим как работает данный подход на 13275 статьях с Хабра, а также текстах трех песнен…