guides
Как составить техническое задание (SOW) для проекта интеграции ML

Расплывчатое ТЗ превращает 6-недельную ML-интеграцию в четырёхмесячный кошмар с расползанием границ проекта. Вот что именно нужно прописать в каждом разделе, чтобы этого не случилось.
Клиент думает, что «интеграция ML» означает, что чат-бот волшебным образом будет понимать каждого клиента вечно. Ваша команда думает, что это означает выпуск модели с точностью 85% на данных за прошлый месяц. Никто не зафиксировал ни одно из этих предположений на бумаге, и вот вы уже на шестой неделе проекта, рассчитанного на четыре.
Это и есть реальная причина провала большинства проектов по интеграции ML — не модель, не код, а документация. Слабое техническое задание (SOW, Statement of Work) — главная причина, по которой ML-проекты выходят за рамки бюджета и сроков, ведь «добавить машинное обучение» — это не объём работ, а пожелание.
Что должно входить в техническое задание для проекта интеграции ML?
Полноценное ТЗ для ML-интеграции должно содержать как минимум 7 ключевых разделов: обзор проекта, требования к данным, критерии производительности модели, архитектуру интеграции, результаты и вехи проекта, критерии приёмки и процедуру контроля изменений. Пропустите раздел про критерии приёмки — и у вас не будет юридических оснований утверждать, что результат «готов». Именно отсюда и начинается большинство споров по ML-проектам.
В отличие от стандартного SOW для разработки ПО, ТЗ для ML должно учитывать неопределённость, которой нет в традиционной разработке. Вы не можете гарантировать, что модель достигнет точности 95%, так же, как гарантируете, что кнопка будет синей. Поэтому документ должен определять успех в вероятностных терминах, а не в абсолютных.
Почему ML-проектам нужно другое ТЗ, чем обычным софтверным проектам?
Потому что производительность модели — не бинарная величина, а качество данных на момент подписания договора вне вашего контроля. Обычное ТЗ по разработке ПО говорит: «реализовать функцию X». ТЗ для ML должно говорить: «построить модель, которая достигает как минимум Y% точности на отложенной тестовой выборке при условии, что данные соответствуют критериям качества Z» — и указывать, что происходит, если данные этим критериям не соответствуют.
Это та часть, которую клиенты не любят слышать, но обязаны услышать: вы не можете обязаться достичь конкретного показателя точности, не увидев обучающие данные. Решение — не избегать обязательств, а выстроить ТЗ так, чтобы обязательства были условными и поэтапными.
Раздел за разделом: что входит в каждую часть
Обзор проекта — один абзац, описывающий бизнес-проблему, которую решает ML-компонент (например, «автоматическая классификация входящих обращений в поддержку по срочности»), а не технологию, с помощью которой она решается.
Требования к данным — точные источники данных, минимальный объём (например, «минимум 10 000 размеченных примеров»), ответственный за поставку данных и контрольная точка проверки качества данных перед началом работы над моделью.
Критерии производительности модели — конкретная метрика (точность, полнота, F1, задержка), целевой порог и тестовая выборка, на которой производится измерение. Никогда не оставляйте формулировку «высокая точность».
Архитектура интеграции — где «живёт» модель (API-эндпоинт, встроенный сервис, пакетное задание), с какими системами она взаимодействует и кто отвечает за инфраструктуру после запуска.
Результаты и вехи проекта — разбивка по этапам: конвейер данных, базовая модель, интеграция, продакшен-развёртывание. У каждого этапа — дата и определённый итоговый артефакт.
Критерии приёмки — точный тест, определяющий, что веха завершена и оплата подлежит выплате. Привяжите это к цифрам из раздела критериев производительности, а не к субъективному согласованию.
Процедура контроля изменений — как новые запросы получают оценку объёма, стоимости и утверждаются после подписания ТЗ. Это пункт, который спасает вас от расползания границ проекта.
Как установить реалистичные показатели производительности до того, как вы увидели данные?
Используйте двухфазную структуру: короткий этап исследования (обычно 1-2 недели) для оценки качества данных, а затем — обязательства по конкретным показателям производительности только после этой оценки. Любой, кто называет жёсткую цель по точности, не притронувшись к реальному датасету, просто гадает — и именно вам придётся разгребать последствия, если догадка окажется неверной.
Постройте ТЗ так, чтобы этап исследования был отдельной оплачиваемой вехой со своим результатом: отчётом о качестве данных и пересмотренной, основанной на фактах целью производительности для второго этапа. Это защищает обе стороны. Клиент не привязан к цифре, взятой из ниоткуда, а вы не обязаны гарантировать то, что «грязный» датасет попросту не потянет.
Что должно входить в раздел архитектуры интеграции?
Этот раздел отвечает на один вопрос: как результат работы модели фактически попадает в системы, которыми люди пользуются каждый день? Для большинства B2B-команд это означает точное определение того, в какую CRM, мессенджер или внутренний инструмент должен поступать вывод модели — и через какой механизм (webhook, REST API, пакетный экспорт).
Если интеграция затрагивает аутрич или воронки лидов, будьте конкретны в описании эндпоинта. Например, если результат работы ML должен запускать последовательность продаж в Telegram или обновлять запись в CRM, укажите точный API, с которым идёт интеграция, а не пишите «подключается к CRM» в надежде, что все позже сойдутся во мнении, что это значит. Требования, собранные во время брифинга с клиентом, должны напрямую отражаться в этом разделе — не оставляйте разрыв между тем, что обсуждалось, и тем, что закреплено в договоре.
CRMChat включает API для разработчиков, который позволяет передавать результаты работы модели — например, скоринг лидов или теги классификации — напрямую в карточки контактов и последовательности аутрича. Это именно та точка интеграции, которую ТЗ должно называть явно, а не оставлять расплывчатой. Если результаты вашего ML-проекта поступают в рабочий процесс Telegram CRM, ссылайтесь непосредственно на документацию CRMChat API в разделе архитектуры, чтобы обе стороны опирались на одну и ту же техническую поверхность.
Как справляться с расползанием границ проекта конкретно в ML-проектах?
ML-проекты провоцируют расползание границ проекта больше, чем обычная разработка ПО, потому что просьба «просто переобучите её на этих новых данных» звучит как мелочь, но часто ею не является. Пропишите в ТЗ жёсткое правило: любой запрос на переобучение, дообучение или добавление новых источников данных после принятия базовой модели запускает процедуру контроля изменений, без исключений.
Определите в ТЗ точный обучающий датасет и дату отсечки — всё, что выходит за эти рамки, является запросом на изменение.
Установите фиксированное количество циклов переобучения, включённых в базовую цену (например, «включено до 2 итераций переобучения»).
Оцените дополнительные циклы переобучения или новые категории меток как отдельную статью расходов заранее, а не по факту.
Требуйте письменного согласования запроса на изменение до возобновления работы — устные просьбы «просто добавьте это» не считаются.
Фиксируйте каждый запрос на изменение в общем документе, на который ссылается ТЗ, чтобы был документальный след на случай спора о границах проекта в дальнейшем.
Как выглядит реалистичный график и структура вех?
Большинство ML-проектов среднего масштаба делятся на четыре этапа продолжительностью 6-12 недель: оценка данных (1-2 недели), разработка базовой модели (2-4 недели), интеграция и тестирование (2-3 недели) и продакшен-развёртывание с мониторингом (1-2 недели). Привязывайте вехи оплаты к завершению этапов, а не к календарным датам — оплата по календарным срокам игнорирует реальность: второй этап не может начаться, пока не пройдена контрольная точка проверки качества данных первого этапа.
Агентства, которые хорошо справляются с этим для клиентов — так же, как аутрич-агентства отчитываются перед клиентами о прогрессе — встраивают отчёт о статусе на каждой вехе, а не только в конце проекта. Это та же дисциплина: определить контрольную точку, отчитаться по ней и не давать неопределённости накапливаться месяцами, пока кто-то не заметит, что проект сбился с курса.
Типичные ошибки, которые губят ТЗ для ML-проекта
Формулировка «улучшить точность» вместо конкретной цифры. Если это неизмеримо, значит, это невозможно обеспечить принудительно.
Пропуск контрольной точки проверки качества данных. Обязательство по срокам модели до подтверждения того, что данные существуют в пригодном для использования виде.
Отсутствие определённой тестовой выборки. Без фиксированной отложенной тестовой выборки «точность» можно подтасовать или оспорить постфактум.
Расплывчатая ответственность за переобучение. Кто переобучает модель через шесть месяцев после запуска, когда данные «дрейфуют»? Пропишите это заранее.
Отсутствие плана отката. Что происходит, если модель начинает работать хуже в продакшене? Определите запасной вариант до запуска, а не во время инцидента.
Всё это не уникально для «навороченных» AI-подрядчиков — та же дисциплина, что удерживает правильную оценку стоимости проекта разработки чат-бота, не даёт и стоимости ML-интеграции незаметно удвоиться. Именно конкретика в ТЗ защищает бюджет, а не сложность модели.



