Перейти к содержанию

Проектирование 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%.

Ключевые источники

  1. Exuverse RAG Architecture 2026 — System design patterns for production RAG
  2. RAGFlow 2025 Year-End Review — Evolution from RAG to Context Engine
  3. Medium Guides — Hybrid search (BM25 + dense), RAG explained
  4. Vector Database Comparisons — Benchmarks for Pinecone, Milvus, Qdrant
  5. ArXiv Papers — Hybrid retrieval evaluation, late interaction

Эволюция RAG (2025-2026)

Ключевой инсайт: RAG не умер, а эволюционировал

Частая ошибка на интервью

Миф: "Long context заменит RAG." Реальность: Long context и RAG дополняют друг друга.

\[ \text{Cost (Long Context)} : \text{Cost (RAG)} \approx 100 : 1 \]

"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

\[ \text{Retrieval} = \text{Vector Search} + \text{Graph Traversal} \]

Алгоритмы: - 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

Два пути:

  1. Modality Conversion: OCR/VLM → Text → Standard RAG
  2. Плюс: совместимость с существующей архитектурой
  3. Минус: потеря визуальной информации

  4. Native Multimodal: Image + Text → Fused Encoder → Tensor

  5. Late interaction (ColPali-style)
  6. Проблема: 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

Три типа данных в контексте:

  1. Domain Knowledge (RAG)
  2. Enterprise documents
  3. Retrieval quality → ответ success

  4. Tool Data (Tool Retrieval)

  5. MCP tool descriptions
  6. Skills/Playbooks из исторического использования
  7. BM25 strong baseline!

  8. Conversation State (Memory)

  9. Working Memory (текущий контекст)
  10. Episodic Memory (история взаимодействий)
  11. 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

\[ \text{Total Latency} = \text{Retrieval} + \text{Re-ranking} + \text{Generation} \]

Targets: - Retrieval: <100ms - Re-ranking: <50ms - Generation: 500-2000ms - Total: <3s (p95)

Throughput Scaling

\[ \text{Required QPS} = \text{Users} \times \text{Queries per User} / 3600 \]

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:

  1. "RAG vs Fine-tuning: когда что?" -- RAG для динамических данных (документы меняются), fine-tuning для стабильных паттернов (стиль, формат). RAG дешевле ($0 training), fine-tuning точнее для domain-specific задач. В 2026 часто комбинируют: fine-tuned model + RAG.
  2. "Почему hybrid search стал стандартом?" -- BM25 ловит exact matches (термины, ID, код), dense -- семантику. RRF fusion объединяет ранги. Чистый dense проигрывает на 10-15% в enterprise search с терминологией.
  3. "Context Engine vs RAG -- в чём разница?" -- RAG = retrieval документов. Context Engine = unified assembly из трёх источников: RAG (docs) + Memory (conversation history) + Tools (MCP descriptions). Это фундамент для AI Agents.

System Design:

  1. "Спроектируйте 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.
  2. "Как обрабатывать 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:

  1. RAG → Context Engine — от паттерна к инфраструктуре
  2. Hybrid Search — standard — BM25 + Dense fusion
  3. TreeRAG/GraphRAG — преодоление ограничений naive chunking
  4. Tool Retrieval — retrieval для MCP tools, не только docs
  5. 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