HardТеория3 min

Интеграция LLM в системы

RAG, prompt engineering, fine-tuning, vector databases, embedding и оптимизация inference

Обзор 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 -- почти никогда.

Проверь себя

Что такое Quantization в контексте LLM-inference?

В чём ключевое отличие RAG от Fine-Tuning?

Какую метрику RAG измеряет Faithfulness?

Какой алгоритм ANN обеспечивает лучший баланс скорости и точности для vector search?

Какой порядок адаптации LLM по возрастанию стоимости и сложности?