Вчера вечером причёсывал проект небольшого RAG на базе llama-index для документации ManticoreSearch Engine, получился достаточно компактный скриптик.
Если кратко то в момент запуска происходит рекурсивное чтение из директории
./docs
содержащей документацию, далее происходит нарезка на чанки через
SentenceWindowNodeParser
, затем из полученных чанков через API-сервер ollama выполняется извлечение эмбеддингов, которые затем складываются в векторноу базу данных milvus (первая версия бота была на faiss. но в llama index нет реализации для полнотекстового поиска), после чего управление передаётся aiogram-боту.
Бот при получении запроса от юзера, выполняет гибридный поиск (полнотекстовый и векторный) по базе данных, полученные результаты передаёт на вход реранкера результатов, ну и после этого языковая модель принимает в контексте то что получилось и пытается дать ответ на вопрос пользователя.
EMBED_MODEL = "bge-m3:567m"
LLM_MODEL = "qwen2.5-coder:7b-instruct-q4_0"
LLM_RERANKER_MODEL = "llama3.1:8b-instruct-q4_0"
Всё что смог запустил через ollama, вот только эмбеддер гибридного поиска не смог побороть, так что он обитает в системной памяти, чтобы ресурсы GPU не тратить.
Исходники
выложил на гитхаб, пощупать бота можно тут:
@manticoresearch_ai_bot (отвечает обычно в течении минуты).
PS. Полученное решение могу оценить на 3 балла из 5, не фантастика, но благодаря реранкеру лучше чем многие другие, что мне довелось попробовать.