RAG Pipeline 1/N: Qdrant – векторная база данных для AI

Параметр Значение Bloom L3–L4 (Применение → Анализ) SFIA Уровень 2–3 Dreyfus Advanced Beginner → Competent Артефакт docker-compose.yml + скрипт проверки Проверка curl localhost:6333/healthz → ok, семантический поиск работает TL;DR AI-модель забывает всё после каждой сессии. Векторная база данных решает эту проблему – хранит знания в виде чисел и находит похожее по смыслу, а не по ключевым словам. Проблема: AI без памяти Каждая сессия с LLM начинается с чистого листа: БЕЗ RAG: С RAG: ┌──────────┐ ┌──────────┐ │ LLM │──→ Ollama │ LLM │──→ Ollama │ │ │ + RAG │ └──────────┘ └────┬─────┘ │ │ закрыл закрыл сессию сессию │ │ ▼ ▼ ┌──────────┐ ┌──────────┐ │ LLM │ "Я ничего не │ LLM │ "Да, в прошлый │ │ помню" │ + RAG │ раз мы делали X" └──────────┘ └────┬─────┘ │ ┌────▼─────┐ │ Qdrant │ ← вектора └──────────┘ Вы потратили час, объясняя модели архитектуру проекта. Закрыли терминал. Открыли снова – всё с нуля. ...

7 мая 2026 · 8 минут · 1507 слов · DevOps Way

RAG Pipeline 2/N: Embeddings – как текст превращается в числа

Параметр Значение Bloom L3–L4 (Применение → Анализ) SFIA Уровень 2–3 Dreyfus Advanced Beginner → Competent Артефакт Скрипт сравнения моделей + benchmark Проверка Три модели, одна фраза – сравниваем score TL;DR all-MiniLM и nomic-embed-text плохо различают русский текст: борщ и nginx получают одинаковый score. mxbai-embed-large – единственная приемлемая из трёх протестированных, но требует правильной настройки порога. Проблема: мусор на входе – мусор на выходе В прошлом посте мы запустили Qdrant и сделали семантический поиск. Но использовали случайные вектора (random.uniform). В реальном pipeline вектора создаёт embedding-модель – и от неё зависит всё. ...

14 мая 2026 · 10 минут · 2024 слова · DevOps Way

RAG Pipeline 3/N: Чанки – как резать текст, чтобы модель не получала мусор

Параметр Значение Bloom L3–L4 (Применение → Анализ) SFIA Уровень 2–3 Dreyfus Advanced Beginner → Competent Артефакт Скрипт нарезки markdown + stats Проверка 180+ файлов → 3 010 чанков, 0 ошибок Ollama TL;DR Нарезка текста на фрагменты (chunking) – этап, который влияет на качество RAG не меньше, чем выбор модели. Режем по заголовкам H2/H3, дорезаем с перекрытием 150 символов, чистим мусор. 800 символов – потолок для русского текста при 512-токенном лимите модели. ...

20 мая 2026 · 11 минут · 2317 слов · DevOps Way

RAG Pipeline 4/N: Гибридный поиск – почему одних векторов мало

Параметр Значение Bloom L4 (Анализ) SFIA Уровень 3 Dreyfus Competent Артефакт BM25 encoder + RRF fusion скрипт Проверка Hybrid search находит результаты, которые dense и sparse пропускают по отдельности TL;DR Dense-векторы находят похожее по смыслу, но теряют точные совпадения команд. BM25 находит ключевые слова, но не понимает синонимы. Гибридный поиск запускает оба параллельно и сливает результаты через RRF (Reciprocal Rank Fusion). Веса: dense 0.7, sparse 0.3. Итого ~80ms на запрос. ...

27 мая 2026 · 19 минут · 4036 слов · DevOps Way

RAG Pipeline 5/N: Cross-encoder reranking – когда порядок важнее полноты

В предыдущих сериях: Qdrant (1/N), эмбеддинги (2/N), нарезка на чанки (3/N), гибридный поиск (4/N). Нужный чанк стабильно залетает в top-15. Но порядок внутри этих 15 результатов определяет, какой чанк окажется в top-1. А top-1 – это то, что видит пользователь (или LLM при генерации ответа). Этот пост о том, как заставить систему вчитываться в результаты. Переранжирование: дешёвый двухступенчатый каскад, который не меняет recall, но переставляет результаты так, чтобы лучший оказывался первым. Проблема: RRF не читает документы Гибридный поиск (пост 4/N) работает так: ...

2 июня 2026 · 8 минут · 1 слово · DevOps Way

RAG Pipeline 6/N: Бенчмарк – от 20% до 98%, а потом 52.7% на чужих данных

В предыдущих сериях: Qdrant (1/N), эмбеддинги (2/N), нарезка на чанки (3/N), гибридный поиск (4/N), переранжирование (5/N). Конвейер (pipeline) – вся цепочка от запроса до ответа – построен и работает. Но насколько хорошо? Пока нет цифры, оценка “хорошо” остаётся субъективной. Повод для замера: проект AgentMemory заявляет 95.2% recall@5 на бенчмарке LongMemEval-S. Recall@5 (полнота поиска) – это доля вопросов, для которых нужный фрагмент попал в первую пятёрку результатов. Решил проверить эту цифру у себя: прогнал тот же метод через свой конвейер, но на реальных данных. ...

11 июня 2026 · 13 минут · 2617 слов · DevOps Way