Разработчик создал Telegram-бота на Python 3.12 и aiogram 3, который отвечает на вопросы на основе личных материалов эксперта: курсов в PDF и расшифровок видео. Система работает в Docker на VPS, использует SQLite для логов и модель Claude-sonnet-5-5 через официальный SDK.

База знаний состоит из 53 документов, разбитых на 630 страниц общим объемом около 2,25 миллиона знаков. Модель использует инструменты search_materials и read_page. Для предотвращения галлюцинаций внедрен программный стопор: если модель пытается ответить без вызова поиска, запрос отправляется на повторную обработку.

Для оценки качества поиска был создан стенд из 24 тестовых кейсов (8 лексических, 12 семантических, 4 негативных). Метрики Recall@6 и MRR показали, что гибридный поиск, объединяющий ключевые слова и векторы через RRF, работает хуже чистого векторного поиска из-за шума в лексическом канале.

Векторный поиск реализован через numpy-массив размерностью 1050 страниц по 1024 числа (4 МБ). Эмбеддинги вычисляются через внешний API и кэшируются на диске с использованием SHA-256 хешей содержимого и названия модели, что позволяет сохранять результаты при перезапуске контейнера.

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