Генеративный AI
GenAI System Design
Компания запустила LLM чат-бот: один Python скрипт, OpenAI API, без архитектуры. 100 пользователей - работает. 10 000 пользователей - timeout, $80K счёт за месяц, данные пользователей в промптах других пользователей (баг в session management). Система design существует не для теории - для того чтобы не оказаться в этой ситуации.
- **Perplexity AI**: multi-step RAG с custom re-ranker, агентный поиск (несколько запросов поисковику), source attribution с прямыми цитатами. Каждый ответ - 3-10 LLM вызовов за 2-3 секунды. Архитектура оптимизирована под latency.
- **Notion AI**: Copilot встроенный в документы. Контекст - весь документ и связанные страницы. Специальная обработка long documents через hierarchical summarization. Model routing: быстрые модели для autocompletion, мощные для 'Improve writing'.
- **Klarna AI**: заменил 700 FTE customer support агентов одним LLM-ботом. Architecture: RAG по документации продуктов + CRM интеграция + sentiment-based escalation + мультиязычность (35+ языков). $40M экономии в год по заявлению компании.
Предварительные знания
- Function calling и tool use как способ модели обращаться к внешним данным и API
- Основы inference optimization: latency, throughput, KV cache, quantization
- Как работает RAG retrieval и почему качество поиска ограничивает качество системы
LLM application stack: как 2023 год превратил модель в продуктовый слой
Когда в конце 2022 вышел ChatGPT, большинство компаний умели вызвать модель, но не имели паттерна для построения вокруг неё продукта. Следующий год дал узнаваемый стек. Harrison Chase выпустил LangChain в октябре 2022, дав словарь для сцепления промптов, инструментов, памяти и retrieval; рядом рос LlamaIndex для приёма данных. Векторные базы перешли из ниши в базовую инфраструктуру: Pinecone, Weaviate, Qdrant и Chroma стали стандартом для хранения эмбеддингов и семантического поиска в масштабе, а pgvector принёс то же в Postgres. Retrieval-augmented generation стал архитектурой по умолчанию для привязки ответов к приватным данным, а agent-паттерны обернули tool use в циклы планирования. К середине 2023 production GenAI система это уже не один вызов API, а пайплайн: приём и chunking, эмбеддинг и индексация, retrieval и reranking, сборка промпта, генерация, guardrails, кэширование и observability. Сдвиг в том, что сложная инженерия ушла из модели в систему вокруг неё, а cost и latency стали первоклассными ограничениями дизайна, а не запоздалой мыслью.
Проектирование чат-бота
Чат-бот на LLM выглядит просто: user message -> LLM -> response. Но production система включает: управление историей диалога, персонализацию, escalation к человеку, аналитику, multi-turn context management, rate limiting, fallback при ошибках LLM. Каждый компонент - архитектурное решение.
**Context window management**: при длинном диалоге история не помещается в context window. Стратегии: sliding window (последние N сообщений), summarization (LLM суммаризирует старые сообщения), hierarchical memory (краткосрочная + долгосрочная). HuggingFace `transformers` + LangChain `ConversationSummaryMemory` реализуют готовые решения.
**Intercom, Zendesk, Salesforce** добавили LLM-ботов поверх существующих CRM. Общий паттерн: LLM-бот обрабатывает 60-80% обращений, остальные эскалируются к человеку. Sentiment analysis определяет когда эскалировать - сердитый клиент не должен разговаривать с ботом.
Пользователь ведёт 50-сообщенный диалог. Context window модели 8K токенов, вся история не помещается. Какая стратегия наиболее эффективна?
AI-поиск: RAG архитектура
AI-поиск - RAG система: retrieve релевантные документы -> augment промпт -> generate ответ. Но production RAG имеет 10+ компонентов с нетривиальными trade-offs. Качество поиска определяет потолок качества всей системы: garbage in, garbage out.
**Chunking strategy** критична: слишком маленькие чанки - теряется контекст. Слишком большие - embedding усредняет разные темы, поиск менее точен. Semantic chunking (разбивать по смысловым границам, не по токенам) лучше fixed-size. **Proposition indexing**: каждый чанк -> отдельные утверждения (propositions) -> индексировать их. Улучшает precision retrieval.
RAG система отвечает правдоподобно, но содержит факты которых нет в документах. Какой компонент решает эту проблему?
Copilot-системы: AI в рабочем процессе
**Copilot** - AI ассистент встроенный в рабочий процесс с доступом к контексту пользователя: открытые файлы, история изменений, текущая задача. GitHub Copilot, Cursor, Notion AI, Google Duet - все используют эту парадигму. Отличие от чат-бота: Copilot имеет rich context и действует в рамках конкретного инструмента.
**Fill-in-the-Middle (FIM)**: специальный режим генерации для code completion. Модель видит код до и после курсора, генерирует то что должно быть в середине. Requires специальную обучающую цель - стандартные decoder-only модели не умеют FIM без дообучения. StarCoder 2 и DeepSeek Coder обучены с FIM.
**Cursor vs GitHub Copilot**: Cursor использует полный файловый контекст проекта через @codebase, Copilot - более ограниченный контекст. Cursor применяет Claude 3.5 Sonnet для complex edits (Composer mode), быстрые модели для autocompletion. Multi-model approach: разные модели для разных задач в одном UX.
Code Copilot должен отвечать за <500ms для хорошего UX. Какая архитектура это обеспечивает?
Масштабирование GenAI систем
MVP GenAI системы запустить просто. Масштабировать до миллионов пользователей - нет. Стоимость LLM API растёт линейно с запросами, latency деградирует под нагрузкой, reliability требует redundancy. Каждое архитектурное решение имеет cost/latency/reliability trade-off.
**Fallback chains**: LLM API могут быть недоступны. Литий fallback: если основная модель недоступна или медленная - переключиться на альтернативу. **LiteLLM** - единый интерфейс к 100+ LLM API с автоматическим fallback и retry. `completion(model='gpt-4o', fallbacks=['claude-3-5-sonnet-20241022', 'gemini/gemini-1.5-pro'])` - одна строчка для resilient production системы.
**Observability**: Langfuse, Phoenix (Arize), LangSmith - платформы для трассировки LLM приложений. Каждый запрос -> trace с: model, tokens, latency, cost, user_id, feedback. Без observability невозможно дебаггинг проблем качества и оптимизация стоимости.
GenAI система = LLM API вызов. Архитектура не важна - главное выбрать правильную модель
Модель определяет потолок качества. Архитектура определяет: стоимость ($10K vs $50K/мес на одинаковом трафике), latency (200ms vs 5s), reliability (99.9% vs 95%), масштабируемость
OpenAI ChatGPT при миллиардах запросов требует: load balancing, prompt caching, model routing, observability, fallback chains, semantic caching. Каждый компонент уменьшает TCO на 20-80%.
GenAI стартап тратит $50K/месяц на OpenAI API, 70% - на простые FAQ-запросы. Какой первый шаг оптимизации?
Связанные темы
System design объединяет все компоненты LLM стека:
- Function Calling и Tool Use — Copilot и чат-боты используют tool calling для доступа к данным и API - основной механизм расширения возможностей
- Serving LLM: vLLM, TGI — Self-hosted LLM serving - часть cost optimization при большом трафике. vLLM + GPU vs managed API
- RAG: Retrieval-Augmented Generation — RAG архитектура - детальное рассмотрение retrieval компонента AI-поиска систем
Ключевые идеи
- **Чат-бот**: sliding window / summarization для context management, intent classification для routing, sentiment-based escalation к человеку, guardrails на входе и выходе.
- **RAG-поиск**: chunking strategy (semantic > fixed-size), hybrid search (semantic + BM25), reranking (cross-encoder), faithfulness verification, HyDE для сложных запросов.
- **Copilot**: rich context из IDE/инструмента, FIM для code completion, специализированные быстрые модели для latency, implicit feedback для улучшения.
- **Масштабирование**: model routing (-70% cost), semantic caching (-20-40%), prompt caching Anthropic (-90% на повторяющихся контекстах), LiteLLM для fallback chains.
- **Observability**: Langfuse / LangSmith для трассировки каждого запроса. Без метрик нет оптимизации.
Вопросы для размышления
- Model routing направляет простые запросы на дешёвые модели. Как классифицировать сложность запроса без вызова дорогой модели для классификации?
- Semantic cache хранит пары (запрос, ответ). Устаревшие ответы могут быть неактуальны. Как управлять TTL семантического кэша для динамического контента?
- GenAI система обрабатывает персональные данные пользователей через LLM API. Какие архитектурные паттерны обеспечивают GDPR compliance?
Связанные уроки
- gai-19 — Системный дизайн предполагает знание оптимизации инференса
- gai-24 — Системный дизайн - ядро senior-собеседований
- aie-42-ai-system-design — Продакшен-паттерны системного дизайна GenAI
- ml-55-ml-system-design — Дизайн GenAI расширяет классический ML system design
- gai-16 — Дизайн семантического поиска опирается на RAG