Собеседование на англоязычном рынке · Interviewing for the English-speaking market · урок 4 · 13 мин
Портфолио-проект: AI-фича от идеи до production
Portfolio project: an AI feature from idea to production
ТемыСобеседование
Зачем
После урока у тебя будет бриф портфолио-проекта, который можно сделать за четыре недели и показать: RAG-приложение с одним agent tool, evals, README и демо. На собеседованиях в US и UK такой проект становится общей темой для system design и поведенческого раунда, а ссылка на репозиторий в резюме даёт hiring manager (нанимающему руководителю) доказательство, которое он может открыть сам.
Что ищет hiring manager
Сделать demo на LLM легко, сделать продукт трудно. Авторы «What We've Learned From A Year of Building with LLMs» пишут, что продукты часто застревают после demo, потому что команды недооценивают инженерную работу и оценку качества. Поэтому в портфолио смотрят не на красоту чата, а на признаки инженерного суждения:
- Evals с числами. Есть набор вопросов, метрики по слоям и таблица результатов, которую можно воспроизвести одной командой.
- Error analysis (разбор ошибок). Видно, как ты читал traces, какие провалы нашёл и что изменил.
- Решения и компромиссы. Почему hybrid search (поиск по словам и по смыслу вместе), почему этот размер chunk (фрагмента), почему workflow (путь, заданный в коде), а не свободный agent.
- Production-привычки. Docker, конфигурация через переменные окружения, logging и traces, eval в CI, секреты не в репозитории.
- Честные ограничения. Раздел «что не работает» вызывает больше доверия, чем обещание, что работает всё.
Красные флаги: обёртка над API без единой метрики; только notebook; нет README; ключ API в истории git; огромный замысел, сделанный на треть. Маленький проект, доведённый до конца, сильнее большого незаконченного.
Бриф проекта
Задача. Ассистент, который отвечает на вопросы по документации открытого проекта (например, большого open-source framework с публичной документацией и подходящей лицензией) и умеет подготовить черновик issue (сообщения о проблеме), если ответа в документации нет.
Корпус. Бери только публичные документы с понятной лицензией: открытая документация, открытые государственные данные. Никаких документов работодателя или клиентов и никаких персональных данных: репозиторий публичный, и одна такая ошибка перечёркивает весь проект. Хороший корпус — 300–2 000 страниц с таблицами, версиями и перекрёстными ссылками: на нём видны настоящие проблемы chunking и retrieval.
Пользователь. Разработчик, который застрял и хочет ответ со ссылкой на нужный раздел, а не пересказ.
Функции. Ответ с citations (ссылками на конкретные фрагменты); честный отказ, если ответа нет; tool draft_issue, который формирует черновик и показывает его пользователю на подтверждение, но ничего не публикует сам.
Non-goals (что сознательно не делаем): авторизация пользователей, свой fine-tuning, мобильное приложение. Список non-goals показывает, что ты управляешь объёмом.
Архитектура. Ingestion документации с metadata (раздел, версия, URL) → hybrid search → reranker (модель, которая переупорядочивает найденное) → top-5 → LLM с инструкцией отвечать только по фрагментам → проверка формата и наличия citations → ответ. Отдельная ветка: router решает, отвечать или предложить черновик issue.
Evals — сердце проекта
Набор из 60 вопросов, размеченных вручную: - 40 вопросов, на которые документация отвечает, с указанием нужных фрагментов; - 10 вопросов, ответа на которые нет: правильное поведение — отказ и предложение issue; - 10 adversarial (враждебных): prompt injection в тексте вопроса и в специально подложенном документе.
Метрики: recall@5 для retrieval (нашёлся ли нужный фрагмент в первых пяти); groundedness (подтверждён ли ответ фрагментами) через LLM-as-judge, которого ты проверил на 30 ответах, размеченных вручную, и записал согласие; доля правильных отказов; для tool — конечное состояние (черновик создан, ничего не опубликовано) и pass^3 (задача решена во всех трёх прогонах); latency p50 и p95; стоимость одного ответа.
Пример строки результата в README (числа условные): «Hybrid search plus reranker raised recall@5 from 0.72 to 0.86; groundedness stayed at 0.91; cost per answer rose by 20%». Одна такая строка с методикой стоит больше десяти скриншотов.
Evals дешевле, чем кажется. Один прогон: 60 вопросов × 3 повтора = 180 вызовов по 3 500 tokens — около 630 000 tokens. По условной цене $1 за 1 млн input tokens это меньше $1 за прогон, плюс вызовы judge. Значит, прогонять набор после каждого изменения можно без оглядки на бюджет, и в README это стоит сказать.
Eval запускается в CI на каждый pull request, и результат виден в отчёте. Это та же фраза, что и на собеседовании: «the eval job blocks the merge».
README и демо
README читают 2–3 минуты, поэтому порядок важен:
1. Одна фраза: что это и для кого.
2. Ссылка на демо-видео на 2 минуты.
3. Схема архитектуры.
4. Как запустить: docker compose up и файл .env.example без настоящих ключей.
5. Таблица eval-результатов и команда, которая их воспроизводит.
6. Решения и компромиссы: 3–5 пунктов «выбрал X, потому что Y, отказался от Z».
7. Ограничения и что дальше.
Демо-видео показывает три сцены: удачный ответ со ссылкой; честный отказ с черновиком issue; провал, который поймал eval, и как ты его исправил. Третья сцена — самая сильная: она показывает процесс, а не удачу. Живая ссылка на приложение — плюс, но с лимитом расходов у провайдера модели.
План на четыре недели
| Неделя | Результат |
|---|---|
| 1 | корпус, ingestion, базовый RAG, 60 размеченных вопросов |
| 2 | eval harness, CI, первый разбор ошибок по traces |
| 3 | одно улучшение, измеренное на eval; tool с подтверждением; тесты injection |
| 4 | README, демо, развёртывание, короткий текст о том, что узнал |
Каждую неделю кончай коммитом с работающим состоянием: если время кончится, у тебя всё равно будет законченный, хоть и меньший, проект.
Последнее — как рассказывать о проекте. На system design раунде он становится твоим примером: требования, архитектура, eval, компромиссы. На поведенческом — STAR-историей о провале, найденном через eval. Подготовь обе версии заранее и ещё одну, короткую, на 60 секунд для вопроса «tell me about a recent project»: задача, одна цифра из eval-таблицы, один найденный провал, одно решение, которое ты принял бы иначе.
Шесть навыков, шесть маленьких проектов
В коротких видео популярна подача «one skill = one project»: по проекту на каждый навык. Как список тренировок она полезна; как портфолио — нет: шесть недоделанных demo слабее одного законченного проекта. Бери их упражнениями на выходные и доводи каждое до одной цифры в README.
| Навык | Проект | Цифра, без которой он не засчитан | Уроки |
|---|---|---|---|
| RAG | hybrid search (BM25 + vectors, RRF) + reranker + citations | recall@5 до и после reranker | a3-2, a3-4 |
| Agents | граф plan → act → reflect, typed tools, подтверждение | pass^3 на 10 задачах, ноль действий без подтверждения | a2-3, a2-8 |
| LLMOps | semantic cache перед моделью | доля попаданий и доля ложных попаданий | a7-6 |
| Evals | regression set из production traces | сколько регрессий поймано до выпуска | a5-5 |
| Fine-tuning | QLoRA на своём dataset | метрика задачи против базы, на merged-модели | a6-2, a6-6 |
| Guardrails | text-to-SQL с проверкой SQL | ноль записей в базу на наборе атак, точность ответов | a4-2 |
Две поправки к исходной подаче. Обещание «semantic cache режет счёт вдвое» верно только при доле попаданий около 50 % и молчит о ложных попаданиях. А в text-to-SQL запрет опасных запросов парсером — первый слой: гарантию дают права базы и read-only replica.
Схема
Термины · Key terms
- hiring manager
- руководитель, который решает, кого нанять в команду
- error analysis
- разбор провалов по traces с группировкой по причинам
- citation
- ссылка на фрагмент источника, на котором основан ответ
- non-goals
- то, что проект сознательно не делает
- recall@5
- доля вопросов, где нужный фрагмент попал в первые пять
- groundedness
- подтверждён ли ответ найденными фрагментами
- pass^3
- задача решена во всех трёх прогонах
- eval harness
- код, который прогоняет набор задач и считает метрики
- README
- главная страница репозитория: что, зачем, как запустить, результаты
- p95 latency
- задержка, которую не превышают 95% запросов
Сделай сам
Напиши свой бриф на пять строк: задача, пользователь, корпус документов (с лицензией), один tool и три non-goals. Затем одна строка: какая метрика будет главной в таблице README и почему.
Обсуди с тьютором: покажи бриф и спроси, что в нём слишком велико для четырёх недель и что стоит вырезать.
Проверь себя · ответ под вопросом
1Почему eval-таблица в README важнее красивого интерфейса?
2Зачем в наборе вопросы без ответа и враждебные вопросы?
3Почему демо должно показывать провал?
Interview questions · US / UK
1Walk me through a project you built end to end.
2How did you know your RAG app was actually good?
3Follow-up: if you had another month, what would you change first?
Ключевые фразы · Say it aloud
- The demo is the easy part; the evals are the product.Demo — лёгкая часть, продукт — это evals.
- Here's the eval table and the command to reproduce it.Вот таблица eval и команда, которая её воспроизводит.
- I found this failure by reading traces.Этот провал я нашёл, читая traces.
- I chose X because of Y, and gave up Z.Выбрал X из-за Y и отказался от Z.
- These are the known limitations.Вот известные ограничения.
- Scope was cut on purpose; here are the non-goals.Объём урезан сознательно, вот non-goals.
- One finished project beats six half-done demos.Один законченный проект сильнее шести недоделанных demo.
Материалы
- What We've Learned From A Year of Building with LLMs — demo против продукта, evals, RAG (разделы Tactical и Operational, 30 минут)
- Hamel Husain — Your AI Product Needs Evals — уровни evals и инструменты для чтения traces (15 минут)
- Anthropic — Demystifying evals for AI agents — начинать с 20–50 задач из реальных провалов (15 минут)
- Anthropic — Building effective agents — почему начинать с workflow (20 минут)