
RAG без фреймворков: как собрать систему под капотом
Автор делится опытом построения Retrieval‑Augmented Generation вручную, раскрывая детали от разбиения текста до генерации ответа без сторонних библиотек.
В статье «Строим RAG вручную: как это работает под капотом» (Habr AI, 14 авг. 2026) автор, имея опыт в классических ML и CV‑проектах, решает разобраться в NLP, собрав собственную Retrieval‑Augmented Generation (RAG) систему без использования готовых фреймворков типа LangChain или LlamaIndex.
Что такое RAG и зачем его писать вручную?
RAG соединяет два компонента: retriever – ищет релевантные фрагменты в внешних источниках, и generator – формирует ответ, опираясь на найденный контекст. Готовые решения ускоряют прототипирование, но скрывают детали, такие как токенизация, индексация, ранжирование и управление контекстом. Автор хочет понять, как каждый из этих шагов реализуется «из коробки».
Ключевые этапы реализации
- Разбиение текста – статья описывает несколько стратегий chunk‑splitting (по предложениям, фиксированным токенам, скользящим окнам) и сравнивает их влияние на покрытие информации.
- Создание векторного индекса – используется
FAISSсOpenAI‑эмбеддингами (text‑embedding‑ada‑002) и альтернативныйHNSWизnmslib. - Поиск релевантных фрагментов – реализован простой
cosine similarity‑рейтинг, а также эксперимент сBM25для гибридного подхода. - Пост‑обработка – фильтрация дубликатов, ограничение длины контекста (max tokens = 1500) и добавление «system prompt» для LLM.
- Генерация ответа – запрос отправляется в
ChatGPT‑4oчерез OpenAI API, но автор также тестирует локальную модельMistral‑7B‑InstructчерезvLLM.
Результаты и выводы
- Ручная система достигает точности 78 % на наборе вопросов по Википедии, сравнимой с готовыми решениями, но требует в 2‑3 раза больше кода.
- Основные «подводные камни» – правильный размер чанков и баланс между скоростью поиска и качеством эмбеддингов.
- Автор выкладывает репозиторий с полностью открытым кодом и инструкциями по запуску.
Для разработчиков и студентов такой «DIY‑подход» к RAG – отличная возможность глубже понять внутреннюю работу систем Retrieval‑Augmented Generation, от токенизации до ранжирования. Это помогает отлаживать собственные пайплайны, оптимизировать затраты и избежать зависимости от чужих библиотек, но требует больше времени и навыков в работе с векторными индексами и LLM‑API.


