Harness для ИИ. Собираем конструктор для автотестов.

Вы уже знаете, что голый промпт без окружения не сработает. Но как выглядит этот самый Harness под капотом? И как его настроить, чтобы он действительно приносил пользу, а не просто жрал ресурсы?

Разбираю конструктор на части.

Из каких блоков собирается Harness

Он состоит из четырёх жёстко связанных элементов.

Оркестратор. Главный диспетчер. Он управляет потоком данных. Получает вашу задачу, передаёт её модели, забирает сгенерированный тест, кидает в песочницу и возвращает результат обратно в CI. Без него все части разбегаются.

Модель. Не просто большая языковая модель, а правильно настроенный инстанс. С локальным развёртыванием и зафиксированными параметрами температуры, чтобы генерация была предсказуемой, а не плясала от запуска к запуску.

Песочница. Изолированное окружение для прогона. Обычно это Docker-контейнер с чистым Python и вашими зависимостями. Внутри него тест может упасть, но это никак не повлияет на продакшен.

Оценщик. Набор скриптов, который определяет валидность результата. Проверяет синтаксис, прогоняет тест, смотрит на зелёный/красный статус. Если оценщик выдаёт «fail», Harness возвращает ошибку модели на перегенерацию.

Петля обратной связи. Механизм, который запоминает, почему тест упал, и передаёт этот контекст модели в следующей итерации. С каждым кругом модель учится на своих же ошибках.

Как я настраиваю такой Harness под свои задачи

Пошаговая инструкция, которую я использую.

Шаг 1. Готовлю контекстный архив. Собираю всё в одну папку. OpenAPI-спецификацию, примеры JSON-ответов, требования к структуре теста на pytest. Всё это будет загружаться в оркестратор при старте.

Шаг 2. Пишу скрипт-оценщик. Самый простой вариант — скрипт с двумя проверками. Первая: тест должен импортироваться без ошибок. Вторая: запустить тест в песочнице и получить статус «passed». Если хоть одна проверка падает — возвращаю модель «красный».

Шаг 3. Собираю песочницу через Dockerfile. Прописываю базовый образ, ставлю нужные версии Python и библиотек (pytest, requests). Всё остальное — чистый контейнер, который поднимается за пару секунд.

Шаг 4. Связываю всё в один Python-скрипт. Он последовательно выполняет действия. Сначала берёт задачу и контекст, отправляет в модель. Потом ждёт ответа. Сохраняет тест в папку. Вызывает песочницу. Запускает оценщик. Если тест зелёный — коммитит код в репозиторий. Если нет — перезапускает цикл с новым промптом.

Шаг 5. Запускаю тестовый прогон. Беру один эндпоинт, отдаю Harness и смотрю на результат. Если проходит — внедряю в CI. Если нет — правлю промпт и настройки оценщика.

Зеркало. Разрушаем миф

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

Главное правило при настройке. Никогда не доверяйте Harnessу на 100%. Добавьте возможность ручной правки в конце. Сгенерированный код падает в отдельную директорию для ревью. Только после вашего одобрения он уходит в основной репозиторий.

А вы пробовали собирать свою инфраструктуру для ИИ-тестов, или предпочитаете готовые решения?

Harness для ИИ. Собираем конструктор для автотестов. | Сетка — социальная сеть от hh.ru