Appearance
Работа с ИИ моделями.
RAG модели
RAG (Retrieval-Augmented Generation) — это архитектурный подход, при котором генеративная модель (LLM) дополняется механизмом поиска релевантных данных из внешнего корпуса. Это позволяет повысить точность, актуальность и контролируемость ответов без дообучения модели.
Принцип работы
RAG состоит из двух ключевых этапов:
Retrieval (поиск) Из базы знаний извлекаются релевантные фрагменты (документы, чанки текста).
Generation (генерация) LLM получает:
- пользовательский запрос
- найденный контекст и формирует ответ с учётом внешних данных.
Векторизация (Embedding)
В основе RAG лежит преобразование текста в числовые векторы (embeddings).
- Используются модели, обученные в рамках Transformer architecture
- Текст → вектор фиксированной размерности (например, 384 / 768 / 1024)
- Семантически близкие тексты → близкие вектора (по расстоянию)
Свойство: Вектор кодирует смысл, а не точное совпадение слов.
Векторизация данных (индексация)
Перед использованием RAG выполняется подготовка корпуса:
Чанкинг (разбиение) Документы делятся на небольшие фрагменты (например, 200–500 токенов)
Embedding Каждый чанк преобразуется в вектор
Сохранение Хранятся:
- вектор
- исходный текст
- метаданные (источник, id, теги)
Хранение данных
Возможные варианты:
- In-memory структуры (для небольших объёмов)
- Специализированные векторные БД
- Встроенные индексы в приложении
Типовые структуры:
- dense vector index
- approximate nearest neighbor (ANN)
Векторизация запроса
При поступлении запроса:
- Запрос пользователя преобразуется в embedding
- Используется та же модель, что и для документов
- Полученный вектор используется для поиска
Векторный поиск
Цель: найти наиболее релевантные фрагменты.
Основные методы:
- Cosine similarity
- Euclidean distance
- Dot product
Для ускорения применяются алгоритмы:
- HNSW (Hierarchical Navigable Small World)
- IVF (Inverted File Index)
Формирование ответа
Найденные чанки:
- агрегируются (top-k результатов)
- передаются в LLM как контекст
Формируется prompt:
[инструкция]
[контекст из базы]
[вопрос пользователя]Ключевые преимущества
- Актуальные данные без переобучения модели
- Контролируемый источник знаний
- Возможность работы с приватными данными
Ограничения
- Зависимость от качества embedding
- Потеря контекста при неправильном чанкинге
- Лимиты контекста LLM
- Необходимость настройки retrieval (k, threshold)
Способы использования
Можно выделить 3 способа работы с ИИ моделями:
- Использование ИИ моделей в виде библиотек.
Примеры: https://github.com/tjake/Jlama - полноценный LLM inference engine внутри JVM
Плюсы:
- быстрое начало
Минусы:
- более тяжелый инстанс с долгим запуском
- слабые модели
В целом, не рекомендую к применению.
- Локальное развертывание ИИ моделей.
Примеры:
- Ollama - для развертывания больших языковых моделей (LLM)
- https://github.com/rag-wtf/open-text-embeddings - для развертывания embedding моделей
Плюсы:
- быстрое начало
- возможность работать с дообученными моделями
- работа с чувствительными данными
Минусы:
- потребление большого количества ресурсов даже во время простоя
- Использование облачных решений.
Плюсы:
- возможность работать с мощными моделями
- существенная экономия в случае малого количества запросов к моделям
Минусы:
- повышенная осторожность в работе из-за наличия секретов
- требуется производить оплату за использование токенов
Итог
RAG — это композиция:
- embedding модели
- векторного индекса
- генеративной модели
Качество системы определяется не только LLM, но и:
- стратегией чанкинга
- качеством embeddings
- эффективностью поиска