Как работает поиск в RAG
Понимание логики кодирования снимает с LLM и RAG ореол магии, превращая их в инженерию. Знание эволюции методов — ключ к осознанной настройке RAG.
💡 Первые идеи
1. Прямое кодирование меток / Label Encoding
Присвоить порядковые номера (конфета → 1, котлета → 2). Порядок есть, смысла нет.
2. Прорыв многомерных точек
Объект решили представлять точкой в N‑мерном пространстве с координатами (кортеж).
В дискретном пространстве количество ближайших соседей растёт линейно с размерностью:
1D → 2 соседа
2D → 4 соседа
ND → 2N соседей
Больше измерений = больше возможностей выразить сложные отношения между объектами.
3. Вектор вместо точки
Но к точке не применима математика, очередной тупик. Решили представлять точку как вектор (из начала координат), дав возможность производить алгебраические операции:
- сложение и вычитание — комбинирование смыслов
- косинусное подобие — сравнение направлений
- векторные аналогии:
король – мужчина + женщина ≈ королева.Способ вложения скрытого смысла объекта в числовой вектор, где геометрическая близость отражает семантическую, называется эмбеддингом (от англ. embedding — вложение).
🦾 Эволюция кодирования в NLP
Именно в обработке текста прогресс методов кодирования наиболее нагляден:
• One‑Hot Encoding (1950–1960‑е): векторы размером со словарь, разреженные, семантически слепы.
• Мешок слов (BoW) / TF‑IDF (1954–1970‑е): учёт частотности слов, но не порядка и контекста. «Собака виляет хвостом» = «Хвост виляет собакой».
• Word2Vec / GloVe (2013–2014): прорыв после долгой стагнации — статические эмбеддинги по контексту. Слова близки по смыслу — близки в пространстве. Но вектор не меняется от окружения → проблема омонимов (девушка с косой = смерть с косой).
• Transformer (2017): архитектура от Google на механизме внимания (Attention). Обрабатывает все токены параллельно, учитывает весь контекст (контекстно-зависимые эмбеддинги). Именно на нём построены все современные LLM.
🤩 Эволюция размерности
Размерность = количество координат у вектора. Чем она выше, тем тоньше смыслы, но дороже хранение и поиск:
• 300: статика (Word2Vec, GloVe, FastText от FB* (*Meta признана в РФ экстремистской организацией)), 2013–2018
• 768: контекстные модели (BERT, RoBERTa), 2018–2022
• 1536: современные RAG (OpenAI ada-002, Cohere, GTE), 2023–н.в.
🔣 Пайплайн индексации RAG (общая архитектура)
• Векторизация: модель эмбеддингов превращает неструктурированные данные (текст, изображения) в векторы
• Индексирование: векторы загружаются в векторную БД (например, ChromaDB). БД не просто хранит их, а строит по ним индекс (Vector Index) для быстрого поиска по косинусной близости
👨🎓 Эмбеддинги в RAG на примере Open WebUI
Контекст:
Как за 30 минут собрать локального RAG-помощника
• Индексация — чанки документа → векторы (например, all‑MiniLM‑L6‑v2)
• Хранение — векторы + текст в ChromaDB
• Запрос — вопрос → его вектор
• Поиск — находим чанки с максимальным косинусным сходством
• Передача — топ‑K (top‑K) чанков в промпт LLM
👨💻 Управление эмбеддингами в Open WebUI
В настройках администратора (раздел «Документы») выбирается модель:
- по умолчанию — all‑MiniLM‑L6‑v2 (384‑мерная, лёгкая, но менее точная);
- альтернативы — all‑mpnet‑base‑v2 (768D, точнее, но медленнее в обработке);
- для русского языка — многоязыковые модели (например, distiluse‑base‑multilingual‑cased‑v2), которые Open WebUI загружает автоматически или вручную через Hugging Face.
Количество возвращаемых чанков (top‑K) регулируется отдельно в настройках RAG — обычно 3–5 фрагментов для баланса между полнотой и релевантностью.
📌 Главное при настройке RAG
• Выбор модели эмбеддингов (задаёт размерность вектора): выше размерность и мощнее модель → точнее, но медленнее и дороже
• Настройка параметра top‑K (сколько фрагментов передать в LLM): больше top‑K → выше полнота, но больше токенов → дороже и медленнее, риск выйти за лимит контекста
💬 Далее:
Контекстное окно — как работает, чем опасно и как управлять токенами