Проектирование RAG-систем¶
~5 минут чтения
URL: Exuverse, RAGFlow, TensorBlue, arXiv Тип: System design guide + technical analysis Дата: 2025-2026 Сбор: Ralph Research ФАЗА 5
Предварительно: Стратегии чанкинга, RAG-техники и векторные БД
Зачем это нужно¶
RAG в 2026 -- не паттерн, а инфраструктура. Эволюция от naive chunk-embed-retrieve (RAG 1.0) к Context Engine, который собирает контекст из документов, памяти агента и описаний инструментов. Long context не заменяет RAG: стоимость в ~100x выше, а "Lost in the Middle" effect снижает attention quality пропорционально длине контекста. Hybrid search (BM25 + dense + RRF fusion) -- стандарт 2026 с 95%+ adoption. TreeRAG и GraphRAG решают проблему semantic breaks в fixed-size chunking. Production RAG: total latency < 3s (p95), retrieval < 100ms, hallucination rate < 5%.
Ключевые источники¶
- Exuverse RAG Architecture 2026 — System design patterns for production RAG
- RAGFlow 2025 Year-End Review — Evolution from RAG to Context Engine
- Medium Guides — Hybrid search (BM25 + dense), RAG explained
- Vector Database Comparisons — Benchmarks for Pinecone, Milvus, Qdrant
- ArXiv Papers — Hybrid retrieval evaluation, late interaction
Эволюция RAG (2025-2026)¶
Ключевой инсайт: RAG не умер, а эволюционировал¶
Частая ошибка на интервью
Миф: "Long context заменит RAG." Реальность: Long context и RAG дополняют друг друга.
"Lost in the Middle" эффект: $$ \text{Attention Quality} \propto \frac{1}{\text{Context Length}} $$
При brute-force запихивании всего в контекст: - Attention рассеивается - Качество ответов падает - Стоимость растёт нелинейно
От RAG к Context Engine (2025-2026)¶
| Этап | Описание | Focus |
|---|---|---|
| RAG 1.0 | Naive chunk-embed-retrieve | Базовый поиск |
| RAG 2.0 | Hybrid + Re-ranking | Точность |
| RAG 3.0 | GraphRAG, TreeRAG | Семантические связи |
| Context Engine | Unified context assembly | Для AI Agents |
Архитектура RAG системы¶
Core Components (2026 standard)¶
graph TD
DS["Data Sources<br/>Documents, DBs, APIs, KBs, Code"]
DS --> ING
subgraph ING["Ingestion Pipeline (PTI)"]
direction LR
P["Parse<br/>PDF/Word/HTML/OCR"] --> T["Transform<br/>LLM Enhancement"] --> I["Index<br/>Tree/Graph Build"]
end
ING --> IDX
subgraph IDX["Indexing Layer"]
direction LR
VEC["Vector Index<br/>(dense)"]
INV["Inverted Index<br/>(BM25/sparse)"]
TNS["Tensor Index<br/>(multimodal)"]
META["Metadata Index"]
end
IDX --> RET
subgraph RET["Retrieval Layer"]
direction LR
KW["Keyword<br/>(BM25)"]
SEM["Semantic<br/>(Vector)"]
HYB["Hybrid<br/>(Fusion)"]
GR["Graph<br/>(entities)"]
end
RET --> RANK["Ranking & Filtering<br/>Re-ranking, Dedup, Quality, ACL"]
RANK --> CTX["Context Assembly<br/>Ordering, Token Budget, Citations"]
CTX --> GEN["Generation<br/>LLM + Query + Context = Response"]
style DS fill:#e3f2fd,stroke:#1565c0
style RANK fill:#fff3e0,stroke:#ef6c00
style CTX fill:#e8f5e9,stroke:#2e7d32
style GEN fill:#fce4ec,stroke:#c62828
Hybrid Search (BM25 + Dense)¶
Формула ранжирования¶
BM25 (Sparse): $$ \text{BM25}(D, Q) = \sum_{i \in Q} \text{IDF}(q_i) \cdot \frac{f(q_i, D) \cdot (k_1 + 1)}{f(q_i, D) + k_1 \cdot (1 - b + b \cdot \frac{|D|}{\text{avgdl}})} $$
Dense (Vector): $$ \text{Similarity}(q, d) = \cos(\text{embed}(q), \text{embed}(d)) = \frac{q \cdot d}{|q| \cdot |d|} $$
Hybrid Fusion (RRF - Reciprocal Rank Fusion): $$ \text{RRF}(d) = \sum_{i=1}^{k} \frac{1}{\alpha + r_i(d)} $$
где \(r_i(d)\) — rank документа \(d\) в методе \(i\), \(\alpha\) — константа (обычно 60).
Когда использовать какой метод¶
| Сценарий | Рекомендуемый метод |
|---|---|
| Точные совпадения терминов | BM25 (sparse) |
| Семантический поиск | Dense (vector) |
| Enterprise search | Hybrid (BM25 + Dense) |
| Код/логи | BM25 + specialized embeddings |
Vector Database Benchmarks 2025¶
Сравнение производительности¶
| Database | QPS Leader | Latency | Best For |
|---|---|---|---|
| Milvus | ⭐⭐⭐⭐⭐ | <5ms | Enterprise scale |
| Qdrant | ⭐⭐⭐⭐ | <10ms | Self-hosting |
| Weaviate | ⭐⭐⭐⭐ | <15ms | Feature-rich |
| Pinecone | ⭐⭐⭐ | <20ms | Easiest to start |
| pgvector | ⭐⭐ | <50ms | Existing PostgreSQL |
Рекомендации по выбору (2025)¶
graph LR
START{"Need?"} -->|"Easy start"| PIN["Pinecone<br/>(managed)"]
START -->|"Self-hosted scale"| QW["Qdrant / Weaviate"]
START -->|"Enterprise"| MIL["Milvus<br/>(distributed)"]
START -->|"Already have PG"| PGV["pgvector"]
style PIN fill:#e8f5e9,stroke:#4caf50
style QW fill:#fff3e0,stroke:#ff9800
style MIL fill:#e8eaf6,stroke:#3f51b5
style PGV fill:#f3e5f5,stroke:#9c27b0
Стоимость (rough estimates)¶
| Database | Free Tier | Paid (starting) |
|---|---|---|
| Pinecone | 1 index | $70/month |
| Qdrant | Unlimited (self) | $25/month (cloud) |
| Weaviate | 1M objects | $50/month (cloud) |
| Milvus | Open source | Infrastructure only |
Advanced RAG Patterns (2025-2026)¶
1. TreeRAG (RAGFlow)¶
Проблема: Fixed-size chunks создают разрывы в контексте
Решение: Иерархическая структура документа
graph TD
DOC["Document"] --> CH["Chapter Summary"]
CH --> SEC["Section Summary"]
SEC --> SUB["Subsection Summary"]
SUB --> PAR["Key Paragraphs<br/>(original chunks)"]
style DOC fill:#e8eaf6,stroke:#3f51b5
style PAR fill:#e8f5e9,stroke:#4caf50
Pipeline: 1. Offline (Ingestion): LLM анализирует документ → строит дерево 2. Online (Retrieval): - Fine-grained search (листья) для точности - Tree traversal вверх для контекста - Dynamic assembly "coarse + fine"
Преимущества: - Митигирует "Lost in the Middle" - Сохраняет логическую связность - Точная локация + полное понимание
2. GraphRAG¶
Идея: Извлечь entities + relations → Knowledge Graph
Алгоритмы: - Personalized PageRank для community detection - Graph queries для косвенных связей
Проблемы 2025: - Token consumption (10-100x от оригинала) - Noise в извлечённых entities - Knowledge fragmentation
Решение: Hybrid TreeRAG + GraphRAG - TreeRAG: локальные семантические разрывы - GraphRAG: глобальные ассоциации между документами
3. Long-Context RAG (2026 trend)¶
Синергия: RAG + Long Context
RAG retrieves precise chunks -> Long Context holds them.
Context Engineering: - Systematic design of retrieval → context assembly → reasoning - Not just "more context" but "smarter context"
4. Multi-modal RAG¶
Два пути:
- Modality Conversion: OCR/VLM → Text → Standard RAG
- Плюс: совместимость с существующей архитектурой
-
Минус: потеря визуальной информации
-
Native Multimodal: Image + Text → Fused Encoder → Tensor
- Late interaction (ColPali-style)
- Проблема: storage cost (512KB per page!)
Optimizations: - Tensor quantization (1-bit → 32x compression) - Token pruning (1024 → 128 tokens) - Model-side adaptive pruning
Context Engine (The Future)¶
От RAG к Context Engine¶
| RAG (2024) | Context Engine (2026) |
|---|---|
| Documents retrieval | Unified context assembly |
| QA systems | Agent data foundation |
| Single data type | Multi-source (docs, memory, tools) |
Context Assembly для AI Agents¶
Три типа данных в контексте:
- Domain Knowledge (RAG)
- Enterprise documents
-
Retrieval quality → ответ success
-
Tool Data (Tool Retrieval)
- MCP tool descriptions
- Skills/Playbooks из исторического использования
-
BM25 strong baseline!
-
Conversation State (Memory)
- Working Memory (текущий контекст)
- Episodic Memory (история взаимодействий)
- Semantic Memory (LLM-generated summaries)
Formula: $$ \text{Context} = \text{RAG}(docs) + \text{Memory}(history) + \text{Tools}(retrieved) $$
Ingestion Pipeline (PTI = Parse-Transform-Index)¶
Аналогия с ETL/ELT¶
| ETL (Structured) | PTI (Unstructured) |
|---|---|
| Extract | Parse (PDF/Word/VLM) |
| Transform | Transform (LLM semantic enhancement) |
| Load | Index (Vector + Keyword + Metadata) |
Transform Stage (Key Value Creation)¶
Components: - Chunking (semantic, not fixed-size) - Tree structure generation (TreeRAG) - Knowledge graph extraction (GraphRAG) - Summary generation - Question generation - Keyword extraction - Metadata enrichment
Это ключевой этап — injects "intelligence" into data.
Production Considerations¶
Latency Budget¶
Targets: - Retrieval: <100ms - Re-ranking: <50ms - Generation: 500-2000ms - Total: <3s (p95)
Throughput Scaling¶
Strategies: - Horizontal sharding по document_id - Query caching (Redis) - Batch embedding - Async retrieval
Quality Metrics¶
RAG-specific: - Retrieval Precision@K - Context utilization rate - Citation accuracy - Hallucination rate
Formula: $$ \text{RAG Score} = w_1 \cdot \text{Precision} + w_2 \cdot \text{Citation} + w_3 \cdot \text{Answer Quality} $$
Interview Questions¶
Conceptual: 1. "Explain RAG architecture in 2026" 2. "How does hybrid search work?" 3. "What's the difference between RAG and fine-tuning?" 4. "Design a RAG system for enterprise docs"
System Design: 1. "Design scalable RAG for 10M documents" 2. "How to handle multi-modal documents?" 3. "RAG vs Long Context: when to use which?" 4. "Design context assembly for AI Agents"
Technical: 1. "Implement RRF fusion for BM25 + vector results" 2. "How to optimize storage for tensor indices?" 3. "Design a TreeRAG ingestion pipeline"
Практическое применение¶
Выбор архитектуры¶
graph TD
START{"Dataset size?"} -->|"< 10K docs"| NAIVE["Naive RAG<br/>chunk-embed-retrieve"]
START -->|"10K - 1M docs"| HYBRID["Hybrid RAG<br/>+ Re-ranking"]
START -->|"> 1M docs"| ADV["TreeRAG / GraphRAG<br/>+ distributed index"]
START -->|"AI Agents"| CTX["Context Engine<br/>RAG + Memory + Tools"]
style NAIVE fill:#e8f5e9,stroke:#4caf50
style HYBRID fill:#fff3e0,stroke:#ff9800
style ADV fill:#e8eaf6,stroke:#3f51b5
style CTX fill:#fce4ec,stroke:#e91e63
Quick Start Stack (2026)¶
| Component | Recommendation |
|---|---|
| Ingestion | LangChain / LlamaIndex |
| Vector DB | Qdrant (self-hosted) or Pinecone (managed) |
| Re-ranker | Cohere Rerank or Cross-Encoder |
| LLM | GPT-4o or Claude 3.5 |
| Framework | RAGFlow (open source) |
Interview Questions¶
Conceptual:
- "RAG vs Fine-tuning: когда что?" -- RAG для динамических данных (документы меняются), fine-tuning для стабильных паттернов (стиль, формат). RAG дешевле ($0 training), fine-tuning точнее для domain-specific задач. В 2026 часто комбинируют: fine-tuned model + RAG.
- "Почему hybrid search стал стандартом?" -- BM25 ловит exact matches (термины, ID, код), dense -- семантику. RRF fusion объединяет ранги. Чистый dense проигрывает на 10-15% в enterprise search с терминологией.
- "Context Engine vs RAG -- в чём разница?" -- RAG = retrieval документов. Context Engine = unified assembly из трёх источников: RAG (docs) + Memory (conversation history) + Tools (MCP descriptions). Это фундамент для AI Agents.
System Design:
- "Спроектируйте RAG для 10M документов с <3s latency (p95)." -- Бюджет: retrieval <100ms, re-ranking <50ms, generation 500-2000ms. Hybrid search (BM25 + dense). Horizontal sharding по document_id. Query caching (Redis). Re-ranker (Cohere/Cross-Encoder). Vector DB: Qdrant или Milvus.
- "Как обрабатывать multi-modal документы?" -- Два пути: (a) Modality Conversion (OCR/VLM -> text -> standard RAG, совместимо но теряет визуал), (b) Native Multimodal (ColPali-style late interaction, 512KB/page storage cost). В 2026 путь (a) доминирует.
Частые ошибки
"TreeRAG и GraphRAG -- взаимозаменяемы" -- TreeRAG решает локальные семантические разрывы внутри документа (иерархия глав/секций). GraphRAG решает глобальные связи между документами (entities + relations). Оптимально: TreeRAG + GraphRAG вместе.
"Ingestion pipeline -- просто chunk + embed" -- В 2026 Transform stage (PTI = Parse-Transform-Index) -- ключевой этап: semantic chunking, tree structure, KG extraction, summary generation, question generation, keyword extraction. Именно Transform "инжектирует интеллект" в данные.
Мои заметки¶
Key Trends 2025-2026:
- RAG → Context Engine — от паттерна к инфраструктуре
- Hybrid Search — standard — BM25 + Dense fusion
- TreeRAG/GraphRAG — преодоление ограничений naive chunking
- Tool Retrieval — retrieval для MCP tools, не только docs
- Multi-modal — ещё не production-ready, но direction clear
Cost optimization (2025 focus): - BM25 first, vector re-rank (cheaper) - Quantized embeddings (INT8 vs FP32) - Selective retrieval (не все запросы требуют RAG) - Caching strategies
Common pitfalls: - Over-chunking (disrupts semantics) - Ignoring metadata (powerful filtering) - Pure dense retrieval (BM25 still strong baseline) - Forgetting re-ranking (huge quality boost)
Gaps remaining: - [ ] Multi-modal RAG production patterns (tensor optimization) - [ ] GraphRAG quality improvements (noise reduction) - [ ] Adaptive retrieval (query complexity detection) - [ ] Tool retrieval standardization (MCP + Skills)
Connection to other sources: - LLM Agents — Context Engine for agents - System Design Patterns — Capacity planning formulas - AI Safety — Retrieval safety (poisoned documents)
Code skills: - Implement RRF fusion algorithm - Build TreeRAG ingestion pipeline - Design hybrid search API - Implement re-ranking layer