# Plata — AI System Design: неделя + что точно надо знать

Вакансия: AI Engineer Middle / Middle+ [AI Team], Banco Plata.[29][30]
Инсайд раунда: **качественно строить eval-ы и выбирать метрики** — один из главных факторов. Это совпадает с JD: «quality metrics + A/B», «output evaluation», в стеке явно Ragas.[30]

Формат раунда публично **не подтверждён**. Ниже — generic AI system design + Plata-сценарии (каре-бот, документы, HR). Не выдумывать «у них всегда 60 минут на Miro».

Связанные файлы:
- `AI-SD-CARD.md` — один экран, говорить вслух
- `TECH-QA.md` — уже есть лёгкий тех
- `ANSWERS-FROM-CV.md` — твои STAR

---

## Как учить за неделю

Цель не «посмотреть 20 часов туториалов». Цель: **на доске провести 45 минут** по сценарию Plata и в каждом слое сказать метрику.

Бюджет: **~12 часов видео/курсов + 4 часа устных моков**. Если день выпал — режь «если останется», не режь evals.

| День | Тема | Обязательно | Если останется |
|---|---|---|---|
| 1 | Evals как процесс | Hamel 50 мин + 2 поста | FAQ |
| 2 | RAG-метрики руками | DL.AI RAG triad (~2 ч) | Evidently guide |
| 3 | Каркас ответа на доске | Chip 75 мин + Gaurav RAG 40 мин (до Q&A) | Think Software 20 мин |
| 4 | Agents vs workflow | Anthropic пост + 27 мин | DL.AI Evaluating Agents |
| 5 | Метрики наизусть + Plata | Карточка + 30 RAG Q (только секции 7–8) | Anthropic agent evals |
| 6 | Мок 1: customer-care | 45 мин вслух, запись | — |
| 7 | Мок 2: документы/OCR + повтор card | 45 мин вслух | — |

Правило: после каждого видео **закрой вкладку и расскажи вслух 3 минуты**. Если не можешь — смотрел зря.

---

## Плейлист (только то, что успеешь)

### Ядро недели — не пропускать

1. **Hamel Husain — AI Evaluations Clearly Explained, 52 мин**  
   https://www.youtube.com/watch?v=uiza7wp1KrE  
   Живой разбор 100 трейсов, spreadsheet, binary pass/fail, почему accuracy судьи врёт, TPR/TNR.[14]

2. **Hamel — Your AI Product Needs Evals** (читать, ~25 мин)  
   https://hamel.dev/blog/posts/evals/  
   Три уровня: unit-assert → human/LLM eval → A/B. Смотреть в данные. Не покупать «generic helpfulness».[1]

3. **Hamel — Field Guide** (читать разделы про error analysis + trust)  
   https://hamel.dev/blog/posts/field-guide/  
   Error analysis = highest ROI. Binary > Likert 1–5. Судью мерить против человека. Criteria drift.[2]

4. **DeepLearning.AI — Building and Evaluating Advanced RAG, ~2 ч, бесплатно**  
   https://www.deeplearning.ai/short-courses/building-evaluating-advanced-rag/  
   RAG triad: context relevance / groundedness / answer relevance. Это то, что в JD названо Ragas-слоем.[6]

5. **Chip Huyen × Pragmatic Engineer, 75 мин**  
   https://www.youtube.com/watch?v=98o_L3jlixw  
   AI Eng vs ML Eng, start simple, RAG vs fine-tune, почему eval — самая тяжёлая часть.[19]

6. **Gaurav Sen — Mastering RAG-based systems, смотреть 0:00–34:44**  
   https://www.youtube.com/watch?v=r37RoPQBXNU  
   Indexing, rerank, query rewrite — ровно то, что рисуешь на доске.[16]

7. **Anthropic — Building Effective Agents** (читать, не смотреть 4 часа воркшопов)  
   https://www.anthropic.com/engineering/building-effective-agents  
   Workflow ≠ agent. Сначала простой RAG. Паттерны: routing, chaining, parallel/vote, orchestrator, evaluator-optimizer.[12]

8. **Aishwarya Srinivasan — Agent AI System Design, 27 мин**  
   https://www.youtube.com/watch?v=mwN75EiGfCE  
   Production blocks: model routing, tool contracts, memory vs state, trace-level evals, approval gates.[15]

### Второй ряд — если день 4–5 свободен

9. **DeepLearning.AI — Evaluating AI Agents, ~2.5 ч**  
   https://www.deeplearning.ai/short-courses/evaluating-ai-agents/  
   Router / skill / trajectory evals, code-based vs LLM-as-judge. Бери, если после дня 2 ещё пусто в «как резать агента на компоненты».[5]

10. **Shaw Talebi / How to Evaluate LLM Apps, ~1 ч**  
    https://www.youtube.com/watch?v=-sL7QzDFW-4  
    Golden set, retrieval metrics, «прочитай 30 ответов». Хорошо стыкуется с Hamel.[17]

11. **Think Software — What is RAG, 20 мин**  
    https://www.youtube.com/watch?v=8Qxvv3yHC24  
    Ingestion vs query path, hybrid, 6 failure points. Быстрый каркас, если Gaurav не зашёл.[23]

12. **Anthropic — Demystifying evals for AI agents**  
    https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents  
    Task / trial / grader / transcript / outcome. Code-based vs model vs human graders. Pass@k vs pass^k.[13]

13. **AmanAI Lab — 30 RAG Interview Q, только 1:09:58–1:22:55** (RAGAS + production)  
    https://www.youtube.com/watch?v=ID85S5ZjgTs  
    Не смотри все 100 минут — это Q-банк, не курс.[22]

14. **Бесплатная 17-письма серия Hamel/Shreya**  
    https://ai.hamel.dev/eval-course  
    Подпишись в день 1, читай по одному письму утром. Не замена видео.[18]

### Платное / не на эту неделю

- Maven **AI Evals for Engineers & PMs** (Hamel + Shreya) — лучший курс рынка, 4 недели, не бесплатный. На эту неделю не влезает.[24]
- Open course **Mastering LLMs** (40+ часов записей) — оставь как справочник, не как план.[25]
- 4-часовые «Generative AI Full Course 2026» и плейлисты «Crack Any AI Interview» на 42 серии — шум.

### Что не смотреть

- «Design YouTube / Uber / WhatsApp» — другой раунд.
- GraphRAG как дефолт для FAQ банка. На Middle+ это scope creep, пока не доказал, что naive+hybrid ломается на multi-hop.
- Transformer internals / scaling laws — не этот раунд.
- Голосовые 3-часовые обзоры Chip Huyen целиком — хватит 75 мин интервью.

---

## Что точно надо знать

Ниже — не энциклопедия. Это то, без чего на доске просядешь. После каждого блока — **фраза, которую говоришь ты**.

### 0. Как вести 45 минут

Самый частый фейл — рисовать боксы до требований.[11][28]

1. **Clarify (4 мин).** Кто юзер? Какие источники? PII / резидентность? Latency p95? Можно ли vendor API? Что хуже: отказ или выдуманный лимит?
2. **Success (3 мин).** Offline + online метрики. Без этого ты строишь «чат», не систему.
3. **Estimate (3 мин).** QPS, токены/запрос, стоимость, объём корпуса, свежесть.
4. **Sketch (8 мин).** Два пайплайна: ingestion и query. Гарды до и после LLM.
5. **Deep dive (15 мин).** Один слой глубоко — у тебя это **eval + retrieval**. Не 12 квадратиков.
6. **Failures (7 мин).** Пустой retrieval, отравленный чанк, stampede, провайдер 500, утечка PII, регрессия промпта.
7. **Evolve (3 мин).** Что v0, что v1, что сознательно не берёшь.

Говори: *«Сначала зафиксирую, что считается хорошим ответом, потом нарисую пайплайн, который это можно измерить.»*

### 1. Evals — главный сигнал раунда

#### Три уровня (Hamel)[1]

| Уровень | Что это | Когда |
|---|---|---|
| L1 Unit / code-based | Assert: JSON-схема, regex суммы, «не вернул чужой account_id», SQL исполняется | Детерминированные инварианты |
| L2 Human + LLM-judge | Читаешь трейсы, потом узкий судья на один failure mode | Открытый текст, тон, «опирается на политику» |
| L3 Online A/B | Resolution, эскалация, CSAT, $/диалог | После того как офлайн не врёт |

Говори: *«Сначала assertion’ы как тесты. Потом смотрю трейсы и только на повторных ошибках пишу судью. A/B — когда офлайн уже не отличает варианты.»*

#### Error analysis раньше метрик[2][14][26]

1. Сэмпл 50–100 реальных (или реалистичных) трейсов.
2. На каждый — свободная заметка, **первый важный фейл**, не корневая причина.
3. Сгруппировать (axial coding), посчитать частоты.
4. Eval пишешь **на топ-3 повторных фейла**, не на «helpfulness».

Говори: *«Я не начинаю с RAGAS dashboard. Я сначала читаю диалоги и считаю, какая поломка самая частая. Потом на неё — бинарный тест.»*

Почему generic метрики бесполезны: off-the-shelf «helpfulness / coherence / hallucination score» — чужой промпт под пятью слоями абстракции, он не ловит твой продукт.[1][14]

#### Как строить LLM-as-judge, чтобы не стыдно

- Один судья = **один** вопрос, binary pass/fail, не «поставь 1–5».[2][10]
- Разметить 30–80 примеров человеком (domain expert / ты как «benevolent dictator»).
- Судью мерить как классификатор: **TPR и TNR**, не accuracy. Судья, который всегда говорит «ок», имеет 95% accuracy на 5% ошибках и ловит ноль фейлов.[10][14]
- Few-shot только из train, holdout не трогать.[10]
- Сильную модель на судью, дешёвую — в прод, если задача это позволяет.[1]
- Регулярно перекалибровывать: criteria drift — критерии рождаются, когда смотришь новые выходы.[2]

Говори: *«Судья — это модель. Я не доверяю ему, пока не сниму TPR/TNR против человеческой разметки на holdout. Likert не использую: разница 3 vs 4 — шум.»*

#### Три типа грейдеров (Anthropic)[13]

| Грейдер | Примеры | Сила | Слабость |
|---|---|---|---|
| Code | schema, regex, SQL exec, tool-call match, «поле суммы = OCR-поле» | дёшево, воспроизводимо | ломается на валидных вариациях |
| Model | rubric, groundedness, tone | ловит нюанс | nondeterministic, нужна калибровка |
| Human | spot-check, калибровка, новые фейлы | ground truth | дорого, drift |

Для агента отдельно: **transcript** (что сказал) ≠ **outcome** (создался ли тикет / списалось ли).[13]

Мультипопытки: `pass@k` — достаточно одного успеха (генерация SQL). `pass^k` — нужна стабильность (банковский ответ про лимит).[13]

### 2. Метрики — таблица, которую надо уметь выбрать

Не заучи все RAGAS. Заучи **какой рычаг чинит какую цифру**.

#### Retrieval (есть ли нужный чанк)

| Метрика | Вопрос | Нужен gold? | Что крутить, если плохо |
|---|---|---|---|
| Recall@k / Context Recall | Нужный факт вообще попал в top-k? | Да (референс или id чанка) | chunking, hybrid, k, query rewrite |
| Precision@k / Context Precision | Много ли мусора в top-k? | Да | rerank, metadata filter, меньший k |
| MRR / nDCG | Нужный чанк высоко? | Да | rerank |
| ID-based recall | Золотой doc_id в retrieved_ids? | Да, и это лучший дешёвый тест | ingestion / ACL / версия документа |

Ragas Context Recall: доля утверждений из reference, которые можно вывести из retrieved context.[32]
В банке на FAQ я бы логировал **chunk_id** и мерил ID-recall, а не только LLM-judge.

#### Generation

| Метрика | Вопрос | Формула / суть |
|---|---|---|
| Faithfulness / Groundedness | Все ли claims ответа сидят в контексте? | supported_claims / all_claims[31] |
| Answer / Response Relevancy | Ответ вообще про вопрос? | reverse-questions → cosine к исходному[33] |
| Citation accuracy | Ссылка ведёт на тот чанк, откуда факт? | code + человек |
| Task success | Решил тикет / SQL exec / поле извлечено | бизнес-метрика, не RAGAS |

RAG triad в курсе Jerry Liu / TruEra: **context relevance, groundedness, answer relevance** — тот же треугольник «контекст / правда / попадание в вопрос».[6]

Говори: *«Faithfulness высокий + recall низкий = модель честно молчит или отвечает по мусору. Recall высокий + faithfulness низкий = чанк был, модель додумала. Я сначала смотрю, в каком квадранте дыра.»*

#### Продукт / онлайн (Plata-каре)

Не «бот ответил».

- **Resolution rate** без эскалации
- **Escalation quality** (вовремя? с контекстом?)[3]
- Повторное обращение за 24–72 ч
- CSAT / CSAT после эскалации
- Containment ≠ качество: бот может «закрыть» диалог враньём
- **Cost / диалог**, p95 latency, token
- Safety: PII leak rate, запрещённые темы (инвест-совет, чужой баланс)
- Для OCR: field-level F1, доля авто без человека, false-accept на сумме

#### Чего не выбирать первым

- BLEU / ROUGE на чатботе — n-gram к референсу, для открытого ответа почти мусор.[10]
- Cosine(answer, question) как «качество» — ловит лексику, не правду.
- LMSYS / MMLU — чужой бенчмарк, не ваш каре.
- Один средний «quality score 4.2».

### 3. RAG, который рисуешь за 8 минут

Два пайплайна, не один ящик «vector DB».[16][23]

**Ingestion (offline):** source of truth → ACL/тенант → чистка → chunk (+overlap / structure-aware) → embed + BM25 → version/doc_id → index. Политика банка: версия документа в метаданных.

**Query (online):** гарды на входе (PII, injection, язык) → query rewrite / hyde только если доказал на eval → hybrid retrieve → metadata filter (продукт, язык, права) → rerank → сборка промпта с цитатами → generate (temperature 0 на фактах) → выходные гарды (схема, «не знаю», сверка цифр) → лог: request_id, prompt_version, chunk_ids, model, tokens, latency.

Разделение вины:[1][7]

- Нет нужного chunk_id в top-k → retrieval.
- Chunk был, ответ врёт → generation / prompt / отсутствие отказа.
- Ответ верный, юзер недоволен → продукт / тон / не тот скилл.

**Hybrid** — дефолт продакшена: BM25 ловит номера договоров, лимиты, «NIP», имена полей; dense ловит перефразы.[16][23]

**Когда RAG не нужен:** классификация интента, извлечение 4 полей, перефраз. Ретривер там — лишняя латентность.

**RAG vs fine-tune vs agent** (Chip: RAG = факты, fine-tune = форма/поведение):[19][21]

- Политика / тариф / схема меняются → RAG.
- Стабильный тон/JSON/язык домена и много меток → fine-tune (у тебя Карты так жили).
- Надо сходить в инструмент (тикет, блокировка карты) → workflow/agent с гардами.

Говори: *«Для банка я сначала выжимаю hybrid RAG + отказ. Fine-tune — если формат поля стабильно не садится. Свободный ReAct на все API карты — нет, это workflow с approval.»*

**Кэш:** exact cache на (prompt, system, model) — как в turing-test-drive. Semantic cache в банке опасен: «дней отпуска» ≈ «дней больничного». Provider prefix-cache ортогонален.

### 4. Агенты — когда да, когда нет

Anthropic: **workflow** = заранее прошитый граф; **agent** = модель сама выбирает шаги.[12] Успешные команды начинают с простого и усложняют, когда eval показывает потолок.

Паттерны, которые надо уметь назвать за 20 секунд каждый:[12]

| Паттерн | Когда | Plata-пример |
|---|---|---|
| Prompt chaining | Шаги фиксированы | OCR → extract → verify → write |
| Routing | Разные классы запросов | FAQ / транзакция / человек |
| Parallel + vote | Нужна уверенность | 2 модели на сумму в документе |
| Orchestrator-workers | Подзадачи не известны заранее | «разбери тред из 40 писем HR» |
| Evaluator-optimizer | Есть чёткий критерий и итерация помогает | починить SQL / переписать отказ |
| Agent loop | Открытый тул-юз, длинный горизонт | редко в v0 каре |

CompleteTravel — нормальный агентный кейс. Customer-care банка — **сначала граф** «интент → RAG / tool / human». Approval gate на деньги и PII.[15]

Eval агента режет по компонентам:[5][13][15]

- router accuracy
- tool selection / tool F1
- trajectory (ожидаемый путь vs фактический)
- final answer / outcome
- cost, turns, latency

Говори: *«Агент — это когда я не могу заранее нарисовать ветки и готов платить латентностью. В каре 80% — FAQ и статус карты, это router + RAG, не ReAct.»*

### 5. Выбор модели и стоимость

Не «возьму GPT-5». Протокол:

1. Golden set 50–200 **ваших** примеров.
2. 2–4 модели одним промптом.
3. Смотреть не средний балл, а **где ломается** (поле, отказ, формат, язык ES).
4. Cost × quality. Дешёвая на роутинг/классификацию, дорогая на сложный ответ и на судью.
5. Потом узкий онлайн A/B.

Latency: streaming для UX, но факт/сумма — дождаться полной проверки. Semantic cache — только если измерил false-hit.

### 6. A/B для промптов (твой козырь Magnit)

JD прямо просит experiments / A/B на промпты и конфиги.[30]

Говори так:

*«В Magnit честный A/B цены — это ад: надо выровнять порядка тысячи магазинов, отсечь праздники и полку. Поэтому я не буду гонять каждый промпт в онлайн. 80% гипотез закрываю офлайн-eval за день. В прод — 5–10% трафика, первичная метрика (ticket resolved / field correct), гарды (эскалация, жалобы, $/диалог), kill switch. Единица рандомизации — диалог, не токен.»*

Это ровно то, зачем они нанимают DS, который умеет тяжёлый A/B и **не** применяет его везде.

### 7. Наблюдаемость, без которой eval мёртв

В лог: request_id, user_segment (не PII), prompt_version, chunk_ids, model, tokens_in/out, latency, tool_calls, guard_decision, human_handoff, cost.[9][15]

PII маскировать **до** провайдера и до лога. Vendor: contract no-train + регион; иначе контур / OSS.

Jason Liu Level 3: логируй rewrite, citations (показали vs процитировали), mean cosine / rerank score — дешёвый детектор «этот запрос мы не умеем».[9]

### 8. Три сценария Plata — каркас на доске

Это **не** подтверждённые вопросы. Это то, что следует из JD: chatbot, voice/STT, HR automation, OCR документов.[30]

#### A. Customer-care chatbot (вести этот)

Clarify: внутренние политики + статус карты/платежа? ES/EN? Можно ли говорить баланс?

Архитектура: ingest политик с версией → router (FAQ / account-tool / human) → hybrid RAG с ACL → generate + cite → post-guard (цифры только из tool, не из памяти модели) → handoff с саммари.

Eval v0:
- ID-recall политик
- faithfulness на FAQ
- «цифры только из tool» — code check
- handoff precision/recall
- online: resolution, recontact, escalation, $/dialog

Отказ: «не знаю, перевожу». Выдуманный лимит хуже эскалации.

Связка с тобой: Kontur = retrieval + generate + fix + vote. Карты = few-shot бриф. Magnit = одна жёсткая метрика.

#### B. Документы / OCR (честный пробел + дизайн)

Честно: промышленный OCR не деплоил. Дальше пайплайн.

файл → тип дока → quality (blur/rotate) → OCR → layout → entities → cross-page + vs заявка → confidence → HITL если ниже порога → structured store. RAG уже по полям, не по картинке.

Eval: field-level F1 (сумма, дата, имя), exact match на деньгах, false-accept rate, % straight-through. Две модели / vote на сумме.

Связка: после OCR это тот же entity-linking, что schema linking в Text-to-SQL.

#### C. Voice / STT (ещё честнее)

Аудио → STT → **тот же текстовый пайплайн** → TTS. Текстовый бот и голос делят RAG и политики. Eval STT = WER на *их* звонках MX-ES, не LibriSpeech. Добавляется шум, кодек, пунктуация, диарлизация, streaming latency.

Не строить отдельную «голосовую магию».

#### D. HR automation

Как FAQ + документы. Semantic cache опасен. Топик-инвалидация, как в turing-test-drive: сменили «28 дней» на «30» — старый ответ нельзя отдать.

### 9. Как отладить «качество плохое» за 60 секунд

1. Открыть 20 трейсов, не дашборд.
2. По каждому: retrieval miss / generation lie / wrong skill / policy / UX.
3. Частоты.
4. Если retrieval — смотреть chunk_id, не «средний faithfulness».
5. Фикс одного рычага, прогон golden set, смотреть что не регрессировало.
6. Только потом онлайн.

Это и есть eval-driven development.[1][2]

### 10. Честные пробелы — не прятать

| Тема | Говори |
|---|---|
| Ragas в проде | «Инструмент знаю, контуры оценки строил своими метриками (execution accuracy, WAPE, ручной разбор). Ragas/MLflow повесил бы как стандарт команды.» |
| OCR | «Не деплоил. Спроектирую пайплайн и eval по полям.» |
| Voice | «Нет. Переиспользую текстовый стек, WER на ваших звонках.» |
| Go | «Не основной. Прочитаю сервис, напишу простой хендлер.» |
| Fine-tune OSS в контуре | Бонус JD, не мой основной трек. |

---

## Устные моки (дни 6–7)

Ставь таймер 45 минут. Рисуй на бумаге. Потом сам себе задай:

1. Какая **одна** первичная метрика и почему не CSAT?
2. Как поймёшь, что виноват retrieval, а не LLM?
3. Что в v0 сознательно не берёшь?
4. Что логируешь, что маскируешь?
5. Как остановишь плохой промпт в проде?
6. Где человек в контуре и какая у него метрика?

День 6 — сценарий A. День 7 — B, потом прогон `AI-SD-CARD.md` вслух целиком.

Если хочешь — в этом чате гоняем мок: я — интервьюер, ты отвечаешь голосом/текстом, я режу слабые места.

---

## Карта «файл → что меняется в голове»

| Источник | После него ты умеешь сказать |
|---|---|
| Hamel 50 мин + evals post | Как строить eval с нуля без RAGAS |
| Field guide | Почему binary и зачем TPR/TNR |
| DL.AI Advanced RAG | RAG triad и чем крутить retrieval |
| Chip 75 мин | RAG vs FT vs agents, start simple |
| Gaurav 35 мин | Нарисовать ingest + query + rerank |
| Anthropic agents | Когда не делать агента |
| Aishwarya 27 мин | Trace eval + approval gates |
| Эта дока + CARD | Связка с Kontur / Magnit / Карты |

## Sources

[1] https://hamel.dev/blog/posts/evals
[2] https://hamel.dev/blog/posts/field-guide
[3] https://hamel.dev/blog/posts/evals-faq
[5] https://www.deeplearning.ai/short-courses/evaluating-ai-agents
[6] https://www.deeplearning.ai/short-courses/building-evaluating-advanced-rag
[7] https://www.evidentlyai.com/llm-guide/rag-evaluation
[9] https://jxnl.github.io/blog/writing/2024/02/28/levels-of-complexity-rag-applications
[10] https://eugeneyan.com/writing/llm-evaluators
[11] https://www.kdnuggets.com/how-to-answer-ai-system-design-interview-questions
[12] https://www.anthropic.com/engineering/building-effective-agents
[13] https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents
[14] https://www.youtube.com/watch?v=uiza7wp1KrE
[15] https://www.youtube.com/watch?v=mwN75EiGfCE
[16] https://www.youtube.com/watch?v=r37RoPQBXNU
[17] https://www.youtube.com/watch?v=-sL7QzDFW-4
[18] https://ai.hamel.dev/eval-course
[19] https://www.youtube.com/watch?v=98o_L3jlixw
[21] https://www.youtube.com/watch?v=xc2B5Oi08Og
[22] https://www.youtube.com/watch?v=ID85S5ZjgTs
[23] https://www.youtube.com/watch?v=8Qxvv3yHC24
[24] https://maven.com/parlance-labs/evals
[25] https://hamel.dev/blog/posts/course
[26] https://www.lennysnewsletter.com/p/evals-error-analysis-and-better-prompts
[28] https://github.com/alexeygrigorev/ai-engineering-field-guide/blob/main/interview/questions/04-ai-system-design.md
[29] https://plata.careers/vacancy/details?id=4822359008
[30] https://www.remocate.app/jobs/middle-ai-engineer
[31] https://docs.ragas.io/en/stable/concepts/metrics/available_metrics/faithfulness
[32] https://docs.ragas.io/en/stable/concepts/metrics/available_metrics/context_recall
[33] https://docs.ragas.io/en/stable/concepts/metrics/available_metrics/answer_relevance
