Обзор LLM-архитектуры
Large Language Models (LLM) -- модели с миллиардами параметров, обученные на огромных текстовых корпусах. Интеграция LLM в production-системы требует специфических архитектурных решений.
Спектр адаптации LLM
Сложность и стоимость растут →
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ Prompt │ │ Few-Shot │ │ RAG │ │ Fine- │ │ Pre- │
│Engineering│ │ Learning │ │ │ │ Tuning │ │ Training│
│ │ │ │ │ │ │ │ │ │
│Часы │ │Часы │ │Дни │ │Недели │ │Месяцы │
│$0 │ │$0 │ │$100-1K │ │$1K-100K │ │$1M+ │
└──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘
| Метод |
Когда использовать |
Данные |
| Prompt Engineering |
Стандартные задачи, быстрый старт |
Не нужны |
| Few-Shot Learning |
Нужно показать формат ответа |
3-10 примеров |
| RAG |
Нужны актуальные/специфичные знания |
Корпус документов |
| Fine-Tuning |
Нужно изменить стиль или специализацию |
1K-100K примеров |
| Pre-Training |
Новый домен с уникальным языком |
Миллиарды токенов |
RAG (Retrieval-Augmented Generation)
RAG -- паттерн, в котором LLM дополняется актуальной информацией из внешних источников.
Архитектура RAG
INDEXING PIPELINE (offline)
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│Documents │───▶│ Chunk │───▶│ Embed │───▶│ Vector │
│(PDF,HTML,│ │ Split │ │ (model) │ │ Database │
│ DB, API) │ │ │ │ │ │ │
└──────────┘ └──────────┘ └──────────┘ └──────────┘
QUERY PIPELINE (online)
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ User │───▶│ Embed │───▶│ Retrieve │───▶│ LLM │
│ Query │ │ Query │ │ Top-K │ │ Generate │
└──────────┘ └──────────┘ │ chunks │ │ Answer │
└──────────┘ └──────────┘
Chunking стратегии
| Стратегия |
Описание |
Когда использовать |
| Fixed-size |
Фиксированный размер (512 токенов) |
Простой старт |
| Recursive |
Рекурсивное разбиение по разделителям |
Структурированный текст |
| Semantic |
По смысловым границам |
Когда важна связность |
| Document-based |
По структуре документа (заголовки, секции) |
Техническая документация |
| Sliding window |
Перекрывающиеся окна |
Когда контекст на границах |
Advanced RAG паттерны
NAIVE RAG:
Query → Retrieve → Generate
ADVANCED RAG:
Query → Query Rewriting → Hybrid Retrieval → Reranking → Generate
│ │ │
├── HyDE ├── Dense (ANN) ├── Cross-encoder
├── Multi-query ├── Sparse (BM25) └── Cohere Rerank
└── Step-back └── Fusion
MODULAR RAG:
Query → Router → [RAG | Direct LLM | Tool Use | Structured Query]
│
├── Iterative retrieval
├── Self-reflection
└── Adaptive retrieval
Метрики качества RAG
| Метрика |
Что измеряет |
Как считать |
| Retrieval Precision |
Доля релевантных чанков в Top-K |
Ручная разметка или LLM-judge |
| Retrieval Recall |
Доля найденных релевантных чанков |
Покрытие всех нужных фактов |
| Faithfulness |
Ответ основан на контексте, нет галлюцинаций |
LLM-judge или RAGAS |
| Answer Relevancy |
Ответ отвечает на вопрос |
LLM-judge |
| Context Relevancy |
Извлечённый контекст релевантен запросу |
LLM-judge |
Prompt Engineering
Prompt Engineering -- искусство составления промптов для получения качественных ответов от LLM.
Основные техники
| Техника |
Описание |
Пример |
| System Prompt |
Задаёт роль и ограничения |
"You are a senior architect..." |
| Chain-of-Thought |
Пошаговое рассуждение |
"Think step by step..." |
| Few-Shot |
Примеры ввода-вывода |
Показать 3-5 примеров |
| Output Format |
Явный формат ответа |
"Respond in JSON with fields..." |
| Constraints |
Ограничения на ответ |
"Answer in max 3 sentences..." |
Structured Prompt Template
┌─────────────────────────────────────┐
│ SYSTEM PROMPT │
│ - Role definition │
│ - Constraints & rules │
│ - Output format specification │
├─────────────────────────────────────┤
│ CONTEXT │
│ - Retrieved documents (RAG) │
│ - Conversation history │
│ - User profile/preferences │
├─────────────────────────────────────┤
│ EXAMPLES (Few-Shot) │
│ - Input → Expected Output │
│ - Edge cases │
├─────────────────────────────────────┤
│ USER QUERY │
│ - Actual user question │
└─────────────────────────────────────┘
Fine-Tuning
Fine-tuning -- дообучение предобученной LLM на специфичных данных.
Когда Fine-Tuning vs RAG
| Критерий |
RAG |
Fine-Tuning |
| Актуальность данных |
Данные часто меняются |
Данные стабильны |
| Тип знаний |
Фактические, конкретные |
Стиль, формат, поведение |
| Стоимость |
Низкая (нет обучения) |
Высокая ($1K-100K) |
| Latency |
Выше (retrieval + generation) |
Ниже (только generation) |
| Галлюцинации |
Меньше (есть контекст) |
Возможны |
| Обновление |
Обновить индекс |
Переобучить модель |
Методы Fine-Tuning
Full Fine-Tuning: LoRA (Low-Rank Adaptation): QLoRA:
Все параметры Только адаптеры LoRA + квантизация
Params: 7B+ Params: 0.1-1% от модели Params: как LoRA
VRAM: 80+ GB VRAM: 16-24 GB VRAM: 8-16 GB
Cost: $$$ Cost: $ Cost: $
Time: дни Time: часы Time: часы
Vector Databases
Vector Database -- специализированная БД для хранения и поиска по векторным представлениям (embeddings).
Архитектура Vector Database
┌─────────────────────────────────────────────────┐
│ VECTOR DATABASE │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────────┐│
│ │Embedding │ │ Index │ │ Metadata ││
│ │Storage │ │ (ANN) │ │ Storage ││
│ │ │ │ │ │ ││
│ │[0.1,0.3, │ │ HNSW │ │ {source: ...,││
│ │ 0.7,...] │ │ IVF │ │ date: ...} ││
│ │ │ │ PQ │ │ ││
│ └──────────┘ └──────────┘ └──────────────┘│
│ │
│ Query: embed(query) → ANN search → Top-K │
│ Filter: metadata conditions + vector similarity │
└─────────────────────────────────────────────────┘
Сравнение Vector Databases
| База |
Тип |
Масштаб |
Особенности |
| Pinecone |
Managed SaaS |
Миллиарды |
Serverless, простой API |
| Weaviate |
Open-source |
Миллиарды |
Hybrid search, GraphQL |
| Milvus |
Open-source |
Миллиарды |
GPU-ускорение, высокая производительность |
| Qdrant |
Open-source |
Миллиарды |
Rust, payload filtering |
| pgvector |
Extension |
Миллионы |
PostgreSQL, простая интеграция |
| ChromaDB |
Open-source |
Миллионы |
Лёгкий, для прототипов |
Алгоритмы ANN (Approximate Nearest Neighbor)
| Алгоритм |
Принцип |
Скорость |
Точность |
Память |
| HNSW |
Граф с иерархическими уровнями |
Высокая |
Высокая |
Высокая |
| IVF |
Кластеризация + инвертированный индекс |
Средняя |
Средняя |
Средняя |
| PQ |
Квантизация векторов |
Высокая |
Ниже |
Низкая |
| ScaNN |
Google: AH + anisotropic loss |
Высокая |
Высокая |
Средняя |
Embeddings
Embeddings -- векторные представления данных, в которых семантически похожие объекты расположены близко друг к другу.
Типы Embeddings
Text Embeddings:
"кот сидит на коврике" → [0.12, -0.34, 0.56, ..., 0.78] (768-3072 dim)
Image Embeddings:
[image of cat] → [0.45, 0.23, -0.67, ..., 0.11] (512-2048 dim)
Multi-modal Embeddings (CLIP):
"a photo of a cat" → [0.33, ...] ≈ [photo of cat] → [0.31, ...]
| Модель |
Размерность |
Назначение |
| text-embedding-3-large |
3072 |
OpenAI, общего назначения |
| E5-large-v2 |
1024 |
Open-source, multilingual |
| BGE-large |
1024 |
Open-source, высокое качество |
| CLIP |
512-768 |
Мультимодальные (текст + изображения) |
| Cohere embed-v3 |
1024 |
Multilingual, сжатие |
Inference Optimization
Оптимизация inference -- ключевой аспект production LLM-систем.
Техники оптимизации
┌─────────────────────────────────────────────────┐
│ INFERENCE OPTIMIZATION │
│ │
│ Model Level: Serving Level: │
│ ┌──────────────┐ ┌──────────────────┐ │
│ │Quantization │ │Batching │ │
│ │(INT8, INT4) │ │(continuous batch) │ │
│ ├──────────────┤ ├──────────────────┤ │
│ │Distillation │ │KV-Cache │ │
│ │(smaller model)│ │(PagedAttention) │ │
│ ├──────────────┤ ├──────────────────┤ │
│ │Pruning │ │Speculative │ │
│ │(remove weights)│ │Decoding │ │
│ └──────────────┘ └──────────────────┘ │
│ │
│ Infrastructure: Architecture: │
│ ┌──────────────┐ ┌──────────────────┐ │
│ │GPU clusters │ │Model parallelism │ │
│ │(A100, H100) │ │(tensor, pipeline)│ │
│ ├──────────────┤ ├──────────────────┤ │
│ │Caching layer │ │MoE (Mixture of │ │
│ │(semantic) │ │Experts) │ │
│ └──────────────┘ └──────────────────┘ │
└─────────────────────────────────────────────────┘
Quantization
| Тип |
Размер модели |
Качество |
VRAM (7B) |
| FP32 |
100% |
Baseline |
~28 GB |
| FP16/BF16 |
50% |
~Baseline |
~14 GB |
| INT8 |
25% |
-1-2% |
~7 GB |
| INT4 (GPTQ/AWQ) |
12.5% |
-2-5% |
~4 GB |
Serving Frameworks
| Framework |
Описание |
Ключевые фичи |
| vLLM |
Высокопроизводительный inference |
PagedAttention, continuous batching |
| TGI |
Hugging Face inference server |
Production-ready, OpenAI-compatible API |
| TensorRT-LLM |
NVIDIA optimized inference |
Максимальная производительность на NVIDIA GPU |
| Ollama |
Локальный запуск LLM |
Простота, поддержка GGUF-моделей |
LLM Gateway Architecture
┌──────────┐ ┌──────────────────────────────────────────┐
│ Client │────▶│ LLM GATEWAY │
└──────────┘ │ │
│ ┌────────────┐ ┌──────────────────┐ │
│ │Rate Limiter│ │ Prompt Validation │ │
│ └────────────┘ └──────────────────┘ │
│ ┌────────────┐ ┌──────────────────┐ │
│ │ Caching │ │ Token Counting │ │
│ │ (semantic) │ │ & Cost Tracking │ │
│ └────────────┘ └──────────────────┘ │
│ ┌────────────┐ ┌──────────────────┐ │
│ │ Routing │ │ Fallback / │ │
│ │ (model) │ │ Retry Logic │ │
│ └────────────┘ └──────────────────┘ │
│ │
│ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │OpenAI│ │Claude│ │ Local│ │
│ │ API │ │ API │ │ LLM │ │
│ └──────┘ └──────┘ └──────┘ │
└──────────────────────────────────────────┘
Итоги
| Концепция |
Суть |
| RAG |
Дополнение LLM актуальным контекстом из внешних источников |
| Prompt Engineering |
Управление поведением LLM через текстовые инструкции |
| Fine-Tuning |
Дообучение модели для изменения стиля и специализации |
| Vector DB |
Поиск по семантическому сходству для RAG |
| Embeddings |
Векторные представления для семантического поиска |
| Inference Optimization |
Quantization, batching, caching для production |
Главное правило: Начинай с Prompt Engineering + RAG. Fine-tuning -- только когда промпты и RAG недостаточны. Pre-training -- почти никогда.