# Лабораторная 03: ПРОТОТИПИРОВАНИЕ MVP

> Спринт 3 · Недели 5–6 · 14 дней · 10 баллов

**Вопрос спринта:** Работает ли концепция?

Первый рабочий прототип: API отвечает, база хранит, baseline-модель генерирует, интерфейс показывает — и evals уже меряют, насколько это хорошо.

## Формат сдачи

- Pull Request от каждой роли
- Ветка: `lab3-[role]-prototype`
- Заголовок PR: `Lab3: [Role] — Prototype Deliverables`

## Роли и шаги

### PRODUCT / VO — Момент истины: прототип против use cases

Отвечает за то, что прототип решает боли из PRD, а не просто работает. Спека сверяется с реальностью — и обновляется.

#### Шаг 1. Валидация UC на прототипе (3–4 часа)

_Прототип — момент истины для use cases из лабы 2._

- Каждый UC прогнан на живом прототипе
- Отклонения от спеки зафиксированы
- Что удивило — записано

**Сдаёшь:** Протокол валидации UC [документ] → `docs/uc-validation.md`

#### Шаг 2. Требования v2 (2–3 часа)

_Требования, пережившие встречу с кодом, стоят вдвое дороже._

- Обновление PRD и UC по итогам валидации
- Изменения — явными правками, не молча

**Сдаёшь:** Требования v2 [документ] → `docs/requirements-v2.md`

#### Шаг 3. Контроль интеграции (2–3 часа)

_Компоненты по отдельности — ещё не продукт._

- End-to-end прогон: запрос → модель → БД → интерфейс
- Найденные разрывы — задачи с владельцами

**Сдаёшь:** Отчёт интеграции [документ] → `docs/integration-report.md`

#### Шаг 4. План спринта 4 (2–3 часа)

_Следующий спринт планируется, пока этот ещё горячий._

- Приоритеты инфраструктурного спринта
- Технический долг — списком с ценами

**Сдаёшь:** План спринта 4 [документ] → `docs/sprint4-plan.md`

**Советы:** Прототип врёт меньше, чем презентация · Отклонение от спеки — находка, не провал · Долг записанный — управляемый · Синхрон команды — каждый день, 10 минут

### AI ENGINEER — Baseline, который реально отвечает

Отвечает за работающую AI-часть: baseline по ADR из лабы 2, каждый вызов в трейсах, модель доступна команде через API.

#### Шаг 1. Baseline-модель (6–8 часов)

_Простейшая модель, которая реально отвечает, лучше идеальной в планах._

- Модель по ADR-002, промпты по use cases
- Error handling и retry-логика
- Структурированные выходы по контракту

**Сдаёшь:** Baseline-модель [код] → `ml/models/baseline.py`

#### Шаг 2. Трассировка Langfuse (3–4 часа)

_Не видя трейсы, не поймёшь, почему модель ответила именно так._

- SDK на все LLM-вызовы
- Промпты и ответы в дашборде

**Сдаёшь:** Трассировка вызовов [конфиг] → `ml/tracing/`

#### Шаг 3. Эндпоинты модели (3–4 часа)

_Модель без API не существует для остальной команды._

- Эндпоинты по контракту из лабы 2
- Async-обработка и валидация входа

**Сдаёшь:** AI-эндпоинты [код] → `backend/routers/ai.py`

#### Шаг 4. Ноутбук экспериментов (3–4 часа)

_Цифры до оптимизаций — точка отсчёта для всего курса._

- Прогоны на примерах из golden dataset
- Latency и токены на запрос — честно

**Сдаёшь:** Эксперименты baseline [ноутбук] → `notebooks/baseline_experiments.ipynb`

**Советы:** Начни с простейшей модели · Логируй каждый вызов · Ключи в .env, не в код · Плохой ответ модели — материал для evals

### DELIVERY — Скелет становится системой

Отвечает за то, что прототип — это система: UI и API сгенерированы и отревьюены, всё поднимается одной командой и живёт на проде.

#### Шаг 1. API и UI агентной разработкой (6–8 часов)

_Агент генерирует каркас быстрее, чем ты набираешь, — твоя работа: ревью._

- Бэкенд и ключевые экраны по прототипу лабы 2
- Генерация агентом (Vibe), ревью сгенерированного
- Обработка ошибок и loading states

**Сдаёшь:** Каркас приложения [код] → `frontend/ + backend/`

#### Шаг 2. БД и миграции (3–4 часа)

_Прототип без сохранения данных — слайд, а не продукт._

- Схема из лабы 2 — в миграции
- Результаты модели сохраняются

**Сдаёшь:** БД с миграциями [код] → `backend/models/ + migrations/`

#### Шаг 3. Compose всей системы (3–4 часа)

_Вся система одной командой — или это ещё не система._

- Все сервисы + Langfuse в контуре
- Health checks, .env.example актуален

**Сдаёшь:** Compose всех сервисов [конфиг] → `compose.yml`

#### Шаг 4. Прототип на проде (2–3 часа)

_Прод живёт с лабы 1 — теперь на нём настоящий прототип._

- Деплой прототипа на публичный URL
- Отчёт агентной разработки: что генерил, что чинил

**Сдаёшь:** Прототип на прод-URL + отчёт [прод-URL] → `docs/agent-workflow.md`

**Советы:** Генерируй агентом, ревьюй как человек · Каждый PR проходит CI из лабы 1 · Секреты не попадают в git · Прод обновляется, а не создаётся заново

### QUALITY & SAFETY — Первые цифры качества — на живой модели

Отвечает за то, что качество прототипа — измеренный факт: DeepEval прогнан на baseline, известно, где модель врёт.

#### Шаг 1. DeepEval на baseline (5–6 часов)

_Evals из лабы 2 встречаются с живой моделью — впервые._

- Прогон golden dataset через DeepEval
- Метрики из карты качества посчитаны
- Результаты воспроизводимы: команда одна

**Сдаёшь:** Первый eval-прогон [код] → `tests/evals/`

#### Шаг 2. Отчёт «где врём» (3–4 часа)

_Честная карта слабых мест ценнее красивой средней цифры._

- Типы ошибок модели с примерами
- Приоритеты улучшений для AI Engineer

**Сдаёшь:** Отчёт «где врём» [документ] → `docs/quality/eval-report-1.md`

#### Шаг 3. Evals в CI — заготовка (3–4 часа)

_Регрессия ловится машиной, а не памятью._

- Мини-набор evals запускается в CI
- Порог: ниже — PR красный

**Сдаёшь:** Eval-джоб в CI [конфиг] → `.github/workflows/evals.yml`

#### Шаг 4. Golden dataset v2 (2–3 часа)

_Реальные ответы модели — лучший источник новых эталонов._

- Пополнение из живых прогонов
- Краевые случаи из отчёта «где врём»

**Сдаёшь:** Golden dataset v2 [документ] → `docs/quality/golden-dataset/`

**Советы:** Средняя цифра прячет провалы — смотри распределение · Каждый фейл — кандидат в датасет · Порог в CI ставится по факту, не по мечте · Отчёт для команды, не для отчётности

## Definition of Done

Те же критерии видит автопроверка. Лаба сдана, когда выполнены все группы.

### Система

- [ ] docker compose up поднимает всю систему одной командой
- [ ] Прототип доступен на публичном прод-URL
- [ ] UI вызывает API, API вызывает модель, результаты в БД
- [ ] Каждый LLM-вызов виден в Langfuse

### Качество

- [ ] DeepEval прогнан на baseline по golden dataset
- [ ] Отчёт «где врём» содержит типы ошибок с примерами
- [ ] Мини-набор evals гоняется в CI с порогом
- [ ] Метрики из карты качества посчитаны фактически

### Продукт

- [ ] Каждый UC прогнан на прототипе, отклонения записаны
- [ ] Требования v2 обновлены явными правками
- [ ] E2E-прогон пройден, разрывы — задачи с владельцами
- [ ] План спринта 4 с ценами техдолга

## Чек-лист перед PR

### Система работает

- [ ] compose up — вся система одной командой
- [ ] Прототип открывается по прод-URL
- [ ] Запрос проходит путь UI → API → модель → БД
- [ ] Трейсы видны в Langfuse
- [ ] CI зелёный, evals-джоб гоняется
- [ ] README поднимает проект без подсказок

### Качество измерено

- [ ] DeepEval прогнан, цифры записаны
- [ ] Отчёт «где врём» готов
- [ ] UC провалидированы на прототипе
- [ ] Требования v2 закоммичены
- [ ] Golden dataset пополнен
- [ ] План спринта 4 согласован

## Материалы к лабе

- [COMPOSE](/materials/docker/compose) — Вся система одной командой
- [LANGFUSE](/materials/observability/langfuse) — Трейсы LLM-вызовов
- [ОЦЕНИВАНИЕ](/materials/labs/grading-system) — Как считаются баллы
- [ВСЕ МАТЕРИАЛЫ](/materials) — База материалов курса

---

_К концу спринта концепция доказана кодом: пользователь вводит запрос, модель отвечает, evals показывают, насколько хорошо. Дальше — сделать это production-ready._

Человеческая версия: /labs/lab3
