Собеседование на англоязычном рынке · Interviewing for the English-speaking market · урок 2 · 14 мин

System design для LLM-приложения

System design for an LLM application

ТемыСобеседованиеSystem design

Зачем

После урока ты проведёшь system design раунд для LLM-приложения по семи шагам: requirements → architecture → data → eval → safety → cost → rollout. Этот раунд — 45–60 минут у доски или в общем документе — есть почти в каждом цикле собеседований на AI engineer в US и UK; оценивают не «правильную» схему, а то, как ты собираешь требования и объясняешь компромиссы.

Задача и план на 45 минут

Возьмём типичное условие: «Design an AI support assistant for a software company: it answers customer questions from the documentation and can check order status and open a support ticket». Время делим так: 5 минут requirements, 10 минут общая архитектура, 15 минут углубление в одну-две части по выбору собеседующего, 10 минут eval, safety и cost, 5 минут rollout и вопросы. Вслух объяви план в начале — это показывает, что ты ведёшь разговор.

Requirements и architecture

1. Requirements: сначала цифры и границы. Functional requirements (что система делает): отвечать по базе из 20 000 документов, смотреть статус заказа, открывать ticket, передавать разговор человеку. Non-functional (с какими свойствами): нагрузка, задержка, языки, приватность, бюджет. Задай вопросы и запиши допущения:

Последний пункт важнее остальных: от него зависят eval и safety.

2. Architecture: простое, потом сложное. Начни с самого простого, что может работать, и добавляй части только с причиной. Anthropic в «Building effective agents» советует «finding the simplest solution possible»: workflow (заранее заданный путь в коде) там, где путь известен, и agent (модель сама выбирает шаги) только там, где шаги нельзя предсказать.

Путь запроса: клиент → API gateway (аутентификация, rate limits — ограничения частоты запросов) → router (классификатор намерения: вопрос по документации, действие, передача человеку) → для вопросов RAG: hybrid search (поиск по словам плюс по embeddings — векторам смысла) → reranker → top-5 фрагментов → LLM → output guardrails (проверки ответа) → клиент. Для действий — tools: get_order_status (только чтение, заказ берётся из сессии клиента) и create_ticket (запись, с подтверждением и idempotency key — ключом, который не даёт создать ticket дважды при повторе запроса). Рядом — LLM gateway (единая точка доступа к моделям с fallback — запасной моделью — и учётом расходов), cache и traces для каждого шага.

Data и eval

3. Data: откуда знания и как они обновляются. Ingestion pipeline (конвейер загрузки): документы режутся на chunks (фрагменты) по структуре, с metadata — источник, версия, дата действия, кому доступно. Обновление — по change feed (потоку изменений): новые, изменённые и удалённые документы; удаление так же важно, как добавление. Второй источник данных — история tickets: из неё берут реальные вопросы для eval, предварительно обезличив.

4. Eval: как поймёшь, что работает. Offline: golden set (размеченный набор) из 200 реальных вопросов по двум языкам и 50 задач с действиями. Метрики по слоям: retrieval — recall@5 (нашёлся ли нужный документ в первых пяти); generation — groundedness (подтверждён ли ответ источником), его оценивает LLM-as-judge, проверенный на 100 ответах, размеченных людьми; действия — конечное состояние (создан ли ticket нужному клиенту), детерминированно. Для действий считай pass^k (доля задач, решённых во всех k прогонах): клиенту нужна стабильность, а не удача. Online: доля разговоров без передачи человеку, повторные обращения, оценки клиентов и еженедельная выборка разговоров, которую читают люди.

Safety и cost

5. Safety: что может пойти не так.

6. Cost: арифметика на доске. Цены меняются; возьми условные для арифметики и скажи об этом: $1 за 1 млн input tokens и $5 за 1 млн output tokens. На вызов — 3 000 tokens входа (system prompt, история, 5 фрагментов) и 300 tokens ответа.

Рычаги: prompt caching (повторное использование общего начала prompt), маленькая модель для простых вопросов через router, меньше фрагментов в context, exact cache для частых одинаковых вопросов. Каждый рычаг проверяют на eval: дешевле, но не хуже.

Rollout и компромиссы

7. Rollout: как выпустить без вреда. Eval gate в CI блокирует merge → внутреннее тестирование сотрудниками → shadow (новая версия отвечает параллельно, клиент видит старую) → canary на 5% трафика с автоматическим rollback при падении метрик → полный выпуск за feature flag (переключателем). Мониторинг: TTFT и TPOT (time per output token), доля ошибок, стоимость разговора, доля передач человеку, по каждому языку отдельно.

Компромиссы, которые стоит назвать вслух. Собеседующий ждёт не одной правильной схемы, а осознанного выбора. Workflow или agent: workflow предсказуем и дешевле, agent гибче, но дороже и труднее в оценке. RAG или длинный context: длинный context проще, но дороже на каждый вызов и тонет в лишнем тексте, а RAG требует индекса и его обновления. Reranker повышает точность и добавляет задержку. Judge масштабируется, люди точнее, поэтому judge проверяют по человеческой разметке. Назови выбор, причину и что заставит его пересмотреть: «If retrieval recall stays below target, I'd revisit chunking before changing the model».

Схема

Термины · Key terms

functional requirements
что система должна делать
non-functional requirements
нагрузка, задержка, приватность, бюджет
TTFT
время до первого token ответа
p95
значение, которое не превышают 95% запросов
router
классификатор, который выбирает путь или модель для запроса
idempotency key
ключ, который не даёт выполнить действие дважды
golden set
размеченный набор вопросов с правильными ответами
groundedness
подтверждён ли ответ найденными источниками
excessive agency
у агента больше прав, чем нужно задаче
prompt caching
повторное использование общего начала prompt со скидкой
canary
выпуск на малую долю трафика с автоматическим откатом

Сделай сам

За 5 минут на бумаге: требования и cost для другой задачи — «internal assistant that answers HR policy questions for 3,000 employees». Запиши три вопроса, которые задашь собеседующему, одно допущение о нагрузке и расчёт стоимости в день по условным ценам урока.

Обсуди с тьютором: покажи расчёт и попроси тьютора сыграть собеседующего, который спрашивает: «Now traffic grows 10×. What breaks first?»

Проверь себя · ответ под вопросом

1Почему system design начинают с requirements, а не со схемы?
Схема зависит от нагрузки, задержки, языков, приватности и того, что считается провалом. Без цифр нельзя выбрать модель, cache и способ выпуска. Записанные допущения ещё и показывают собеседующему, как ты думаешь.
2Зачем в примере router перед RAG и tools?
Router отправляет вопрос по документации в RAG, действие — в tools, сложный случай — человеку. Это делает путь предсказуемым и дешевле: простые вопросы может обслуживать маленькая модель. Ошибки router видны в traces и измеряются отдельно.
3Как посчитать стоимость в день на доске?
Число вызовов умножить на tokens входа и выхода и на цены за миллион tokens, отдельно для input и output. В примере 60 млн input и 6 млн output дают около $90 в день. Цены назвать условными и проверить по прайсу в день решения.

Interview questions · US / UK

1Design an AI support assistant that answers questions from our docs and can open tickets. Where do you start?
Strong answer: clarifies requirements and failure definitions first (traffic, latency, languages, PII, what counts as harmful); simplest architecture that works (router, hybrid retrieval with reranking, scoped tools with confirmation and idempotency); layered evals; safety via permissions not prompts; cost math; shadow and canary rollout.
2How would you evaluate this system before and after launch?
Strong answer: offline golden set from real tickets per language; retrieval recall@k, groundedness with a judge validated against human labels, deterministic end-state checks for actions, pass^k for consistency; eval gate in CI; online containment, repeat contacts, ratings and weekly human review; failures go back into the set.
3Follow-up: the CFO says the bill is too high. What do you change first?
Strong answer: measure where tokens go per step from traces; prompt caching for the shared prefix; route simple intents to a smaller model; fewer or shorter chunks; exact cache for frequent questions; every change must pass the same eval so quality doesn't silently drop; report cost per resolved conversation.

Ключевые фразы · Say it aloud

Материалы