Что такое RAG и зачем он нужен
RAG (Retrieval-Augmented Generation), это паттерн, где LLM перед ответом получает релевантные куски из вашей базы знаний. Решает две проблемы: галлюцинации (модель отвечает на основе фактов, а не фантазий) и устаревшие знания (база обновляется в реальном времени, в отличие от весов модели). Без RAG чат-бот по корпоративным документам работать не будет.
Векторные базы: сравнение по бенчмаркам
Бенчмарк на одном датасете: 1M документов, 768-мерные эмбеддинги, AWS m6i.xlarge. Результаты май 2026:
| База | QPS (top-10) | p95 latency | RAM на 1M векторов | Стоимость/мес |
|---|---|---|---|---|
| ChromaDB 0.5 | 180 | 45ms | 4.2 GB | $0 (self-host) |
| Qdrant 1.11 | 850 | 12ms | 2.8 GB | $0-200 |
| Weaviate 1.27 | 720 | 15ms | 3.1 GB | $25-400 |
| pgvector 0.8 (HNSW) | 410 | 22ms | 5.0 GB | цена Postgres |
Когда что брать
- ChromaDB, прототип, до 100k документов, важна простота запуска
- Qdrant, продакшен, нужна скорость, хотите Rust под капотом
- Weaviate, нужны модули (генерация, classification) из коробки
- pgvector, уже есть Postgres, до 10M векторов работает отлично
Минимальный RAG пайплайн
Полный пример на LlamaIndex плюс Qdrant. От файлов до ответа, 20 строк.
pip install llama-index qdrant-client llama-index-vector-stores-qdrant
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, StorageContext
from llama_index.vector_stores.qdrant import QdrantVectorStore
import qdrant_client
client = qdrant_client.QdrantClient(path="./qdrant_data")
vector_store = QdrantVectorStore(client=client, collection_name="docs")
storage_context = StorageContext.from_defaults(vector_store=vector_store)
docs = SimpleDirectoryReader("./knowledge_base").load_data()
index = VectorStoreIndex.from_documents(docs, storage_context=storage_context)
query_engine = index.as_query_engine(similarity_top_k=5)
response = query_engine.query("Какая процедура возврата товара?")
print(response)
Hybrid search: почему один вектор не работает
Чистый векторный поиск проигрывает на коротких запросах с редкими терминами. Запрос "ошибка ERR_2847" по семантике далеко от документации, но точное совпадение даёт идеальный результат. Решение, гибрид BM25 (лексический) плюс dense (векторный) с весами 0.3/0.7 и Reciprocal Rank Fusion. Qdrant и Weaviate поддерживают нативно.
Reranking: дешёвый способ поднять качество на 20%
После retrieval берёте топ-50 кандидатов, прогоняете через cross-encoder (Cohere Rerank 3, BGE-reranker, Voyage rerank), оставляете топ-5. Cohere Rerank 3 стоит $2 за 1000 запросов, добавляет 80ms latency, поднимает NDCG@5 на 15-25%. Без reranking ваш RAG проигрывает любому конкуренту с reranking.
Частые ошибки при внедрении
Чанкинг по 500 токенам без overlap
Контекст рвётся на границах. Берите 800-1200 токенов с overlap 100-200. Для кода и таблиц нужен structure-aware splitter.
Embeddings от 2023 года
text-embedding-ada-002 устарел. Берите text-embedding-3-large, voyage-3 или BGE-M3. Разница в MTEB на 8-12 пунктов, это реально заметно в продакшене.
Отсутствие evaluation
Без датасета вопрос-ответ вы не знаете, работает RAG или нет. Минимум 50 вручную размеченных пар, метрики Hit Rate и MRR.
Один индекс на всё
Документация, тикеты, код в одной коллекции. Релевантность падает. Делите по типу контента, маршрутизируйте запрос в нужный индекс.
Что меняется в 2026
Long-context модели (Gemini 2.0 с 2M токенов) не убили RAG, как предсказывали в 2024. Стоимость закидывания миллиона токенов в каждый запрос неподъёмная, RAG остаётся дешевле в 50-100 раз и быстрее в 5-10 раз. Зато появился новый паттерн, agentic RAG, где LLM сам решает, какие индексы дёргать.
Все свежие RAG инструменты на reddyx.xyz/feed/?category=RAG.
Частые вопросы
Какая векторная база самая быстрая в 2026?
Qdrant 1.11 даёт 850 QPS с p95 latency 12ms на 1M векторов 768d, лучший результат среди open-source.
Заменят ли long-context модели RAG?
Нет, RAG в 50-100 раз дешевле и в 5-10 раз быстрее на больших базах, плюс точность не падает с ростом данных.
Нужен ли reranking в RAG?
Да, Cohere Rerank 3 или BGE-reranker поднимают NDCG@5 на 15-25% за $2 на 1000 запросов.