Перейти к основному содержимому

Applied ML path

Результат главы

После главы вы сможете:

  • решить, где достаточно prompt/tool/eval, а где уже нужна обучаемая модель;
  • записать experiment contract до обучения;
  • разделить train, calibration и test без entity leakage;
  • выбрать короткий T-shaped маршрут для backend-разработчика;
  • связать offline metric с runtime decision и production outcome.

Зачем agent engineer нужен Applied ML

Agentic-система создаёт данные: intents, tool trajectories, retrieval judgments, approval outcomes, escalation reasons, latency и ошибки. Но данные сами по себе не улучшают систему. Нужен контролируемый цикл:

Applied ML здесь — не обязанность обучать foundation model. Чаще первый полезный шаг намного меньше:

  • intent classifier перед дорогим LLM route;
  • retrieval reranker;
  • anomaly/escalation score;
  • keyword spotter или VAD для voice channel;
  • calibration layer и abstention policy.

Когда не нужна новая модель

Сначала проверьте более дешёвые причины ошибки:

  1. неверный task contract;
  2. отсутствующий или слишком широкий tool;
  3. stale/неполный context;
  4. плохой retrieval corpus;
  5. policy блокирует корректное действие;
  6. eval измеряет текст вместо outcome.

Обучение модели не исправит невалидный API, cross-tenant retrieval или crash между эффектом и checkpoint. Оно имеет смысл, когда повторяемая ошибка локализована в статистическом decision boundary и есть данные для её проверки.

T-shaped маршрут

Для вашего профиля практичный порядок такой:

  1. Горизонталь: dataset schema, leakage, metrics, calibration, experiment tracking, serving.
  2. Вертикаль: TF-IDF/logistic-regression classifier до сложной NLP-модели.
  3. Вторая вертикаль при необходимости: VAD/KWS/endpointing для telehealth или support voice.
  4. Только затем: fine-tuning, neural retrieval или тяжёлый inference stack, если baseline доказуемо упёрся в потолок.

Минимум Python, который действительно нужен

НавыкДля чего в лабораториях
dataclass/type hintsЯвный dataset и report contract
NumPy arraysFeatures, probabilities, audio windows
pandasАнализ табличных public datasets
scikit-learn pipelineВоспроизводимый baseline
pytestHand-computable contracts и regression tests
uv lockfileОдинаковая среда локально и в CI

Нужны также основы вероятности: conditional probability, class prior, precision/recall, threshold и calibration. Градиенты полезны позже; начинать с реализации transformer не требуется.

Experiment contract

До запуска обучения зафиксируйте:

ПолеПример Helios
Product decisionroute to delivery/wallet/rental или fallback
Unit of predictionодно новое user message
Label ownersupport taxonomy v3
Positive/negative costневерный wallet route дороже abstain
Dataset version/provenancesynthetic v1 или CFPB snapshot + hash
Grouping keyconversation/customer/case, выбранный до split
Splitstrain / calibration / untouched test
Baselinemajority и TF-IDF/logistic regression
Metricsmacro F1, per-class recall, coverage, calibration
Thresholdmin_confidence=0.55
Stop conditionне лучше baseline или нарушен safety slice
Deploymentshadow → limited canary → rollback

Без этого «accuracy стала 91%» почти ничего не говорит: неизвестны population, class balance, leakage, цена ошибок и действие после предсказания.

Split — часть product semantics

Наивный random row split часто размещает сообщения одного клиента или одного инцидента и в train, и в test. Модель узнаёт entity-specific слова, а отчёт притворяется generalization.

В Helios group_train_calibration_test_split один раз детерминированно раскладывает весь entity_id по трём попарно непересекающимся subsets. Classifier fit использует только train, temperature/threshold выбираются только на calibration, а test остаётся untouched до финального отчёта. Если grouping entity содержит несколько labels, функция требует выбрать более подходящий homogeneous key вместо молчаливого компромисса.

В production возможны другие оси leakage:

  • время: будущие кейсы попали в прошлое;
  • template: почти одинаковые auto-generated тексты в разных splits;
  • actor: один speaker/merchant/patient присутствует везде;
  • teacher: test labels созданы тем же teacher prompt и не проверены независимо;
  • retrieval corpus: answer text оказался прямо внутри query fixture.

Три варианта начала

ПодходПолучаемПлатимПлохой выбор, когда
Rules/keywordsБыстро, объяснимоХрупкие границыЯзык и intents быстро меняются
Classical baselineДёшево, CPU, probabilitiesОграниченная семантикаНужен сложный compositional meaning
Fine-tuned neural modelБольше capacityData/GPU/serving complexityНет сильного baseline и dataset contract

Правильный baseline — не формальность. Он задаёт минимальную ценность, которую сложная модель обязана превзойти на тех же splits и product metrics.

Public data — только явный opt-in

CI курса использует синтетические fixtures и никогда не выходит в сеть. Скрипт загрузки поддерживает три внешних источника и рядом сохраняет URL, timestamp, вычисленный SHA-256, license note и caveat. Если у source задан доверенный expected_sha256, файл атомарно публикуется со статусом verified; mismatch удаляет .part до появления final path. Если эталона нет, статус — recorded_only: provenance помогает воспроизвести байты, но сам по себе не аутентифицирует источник.

  • CFPB Consumer Complaint Database — реальные complaint categories/narratives, но не репрезентативная выборка всех потребителей;
  • CFPB Terms of Credit Card Plans — product/price comparison snapshot, который устаревает;
  • Google Speech Commands — CC BY 4.0 English keyword data, не покрывающие все языки, акценты и каналы.

Лаборатория

Из корня репозитория:

npm run test:ml

Затем:

cd examples/helios_ml
uv run --frozen python scripts/train_intent_classifier.py
uv run --frozen python scripts/evaluate_retrieval.py
uv run --frozen python scripts/profile_serving.py

Сверьте dataset_size, split, seed, threshold, metrics и artifact path. Измените seed; затем специально сделайте row split и объясните, почему изменение метрики ещё не доказывает улучшение.

Self-check

  • Какое runtime decision использует prediction?
  • Что является grouping entity и почему?
  • Calibration set отделён от test?
  • Какая цена false accept и false reject?
  • Что произойдёт при низкой confidence?
  • Какой artifact и dataset hash можно воспроизвести?
  • Какая production metric подтверждает offline improvement?

Источники

Проверено 2026-08-30: