Андрей Бирюков, независимый эксперт в области ИТ и ИБ, опубликовал на Habr туториал, посвященный подключению корпоративной документации и базы знаний к большим языковым моделям. Материал подготовлен курса «ИИ для Python-разработчиков» и адресован разработчикам, которые хотят, чтобы ChatGPT или другая LLM давала точные ответы о внутренних проектах, а не общие шаблоны.

Проблема, которую решает RAG, знакома многим: модель обучена на публичных данных и не знает деталей вашей системы — например, кастомной авторизации через Redis или настроек подключения к базе данных через переменные окружения с префиксом MY_APP_. RAG (Retrieval-Augmented Generation) — это архитектурный паттерн, который добавляет к LLM этап поиска: вместо того чтобы отвечать на основе заученных данных, модель сначала находит релевантные документы в вашей базе знаний, а затем использует их как контекст для генерации ответа. Автор сравнивает это с экзаменом, на который вы приносите учебник: не нужно помнить каждую формулу, достаточно знать, где её искать.

Ключевая технология, лежащая в основе RAG, — эмбеддинги, векторы чисел, представляющие смысл текста. Два предложения со схожим смыслом будут иметь похожие векторы, даже если в них нет общих слов. Например, фразы «A beginner's guide to engine troubleshooting» и «Motor diagnostics for intermittent power loss» описывают одно и то же, но ключевой поиск не свяжет их, так как ищет точные совпадения. Эмбеддинги же помещают оба текста близко в многомерном пространстве, что позволяет находить смысловые соответствия. На практике для генерации эмбеддингов используется модель all-MiniLM-L6-v2 от Hugging Face, а для векторного поиска — FAISS или ChromaDB.

В типичном RAG-пайплайне четыре шага: запрос, эмбеддинг, поиск в векторной базе, генерация ответа с контекстом.

Полный RAG-пайплайн на Python состоит из четырёх шагов. Первый — подготовка документов: их разбивают на чанки — смысловые куски по 500–1000 слов с небольшим перекрытием, чтобы не терять контекст на границах. Второй — создание векторного индекса: для каждого чанка генерируется эмбеддинг и сохраняется в векторную базу, например ChromaDB. Третий — поиск по вопросу: когда приходит запрос, система генерирует эмбеддинг вопроса и ищет в базе самые близкие чанки. Четвертый — генерация ответа с контекстом: найденные документы подставляются в промпт, и LLM (например, через OpenAI или Groq API) генерирует ответ, используя только эту информацию.

Туториал включает практические примеры кода на Python, которые можно адаптировать под свои задачи. RAG — это не единственный способ расширить знания LLM: существуют также fine-tuning и другие методы, но RAG привлекателен тем, что не требует переобучения модели и позволяет обновлять базу знаний без изменения весов. Для разработчиков, работающих с внутренней документацией, RAG становится практичным инструментом, позволяющим превратить LLM в эксперта по конкретному проекту.