English translation is not available yet. Showing Russian content.
Как в Harness Engineering реализована эвалюация и дрейф (evaluation & drift)?
Краткий тезис
Harness Engineering — платформа для непрерывной поставки AI-агентов, в которой evaluation (оценка качества) и drift detection (обнаружение дрейфа) встроены в CI/CD-пайплайн. Оценка строится на Eval Runner — запуске сценариев с scorers (объективными и LLM‑as‑judge метриками), а Quality Gates блокируют деплой при падении метрик ниже порога. DriftDetector сравнивает поведение агента во времени (семантическая близость ответов, tests|статистические тесты), а Flywheel автоматически собирает неудачные кейсы, улучшает промпты и перезапускает оценку. Такой подход гарантирует, что каждое изменение кода или промпта не ухудшает качество агента.
1. Термины: Evaluation и Drift в контексте AI-агентов
Evaluation (оценка) — процесс измерения качества работы агента на репрезентативном наборе сценариев. В отличие от классического RAG, агент может совершать actions (вызов инструментов, многопоточные диалоги, обращения к памяти), поэтому метрики включают не только качество ответов, но и корректность действий]], соблюдение политик, время выполнения.
Drift (дрейф) — изменение поведения агента со временем, не связанное с намеренными изменениями кода. Причины: обновления базовой LLM (скрытые изменения API), эволюция данных в векторной БД, изменение пользовательских паттернов. Дрейф может быть тихим — метрики ещё в норме, но стиль или тональность ответов изменились.
Harness Engineering — open‑source платформа (репозиторий harness-one/devkit), предоставляющая инструменты для построения, развёртывания и мониторинга AI-агентов. Её модуль evaluation/drift — это ответ на необходимость continuous AI quality assurance.
2. Eval Runner: инфраструктура оценки
Eval Runner — компонент, который берёт набор сценариев (test suite) и прогоняет агента через каждый из них, собирая результаты и вычисляя метрики.
Сценарий (scenario) состоит из:
- входных данных (user query, контекст, начальное состояние)
- ожидаемого результата (golden answer, последовательность действий, ограничения)
- конфигурации scorers (какие метрики применять)
Scorers — функции, оценивающие качество. В Harness используются три типа:
| Тип | Примеры | Описание |
|---|---|---|
| Объективные (Exact Match, F1, BLEU, ROUGE) | Сравнение строк, подсчёт совпадающих n-gram | Быстрые, не требуют LLM, но не чувствительны к смыслу |
| LLM-as-Judge | Faithfulness (фактологичность), Answer Relevance, Context Relevance | LLM оценивает ответ по заданному критерию; дорого, но гибко |
| Поведенческие (Action Correctness) | Tool call order, успешность API-вызовов, время выполнения | Специфичны для агентов с инструментами |
Пример конфигурации (yaml):
eval_suite:
scenarios:
- name: "book_flight"
input: "Забронируй билет из Москвы в Лондон на завтра"
expected: { action: "book_flight", params: { from: "Moscow", to: "London" } }
scorers: ["exact_match_action", "faithfulness", "latency < 5s"]
runners:
- model: "gpt-4"
- model: "claude-3"
Результат запуска — таблица со скорами по каждому сценарию и агрегированные метрики (среднее, процентили).
3. Quality Gates: контрольные точки развёртывания
Quality Gate — это пороговое правило, которое проверяется после прогона Eval Runner. Если метрика не достигает порога, пайплайн останавливается, и новая версия агента не деплоится.
Примеры типичных gate'ов
- Faithfulness >= 0.9 (не менее 90% фактов в ответе подтверждаются контекстом)
- Answer Relevance >= 0.85 (ответ релевантен запросу по оценке LLM)
- Action Success Rate >= 0.95 (доля корректно выполненных инструментов)
- Latency P95 < 3 секунды
Quality gates могут быть жёсткими (блокирующими) и предупреждающими (log warning, но деплой разрешён). В Harness gate'ы конфигурируются в harness.yaml:
quality_gates:
- metric: "faithfulness"
threshold: 0.9
action: "block"
- metric: "latency_p95"
threshold: 3000 # ms
action: "warn"
Такой подход превращает оценку агента в часть CI/CD — каждое изменение кода, промпта или инструмента проходит через автоматическую проверку.
4. DriftDetector: обнаружение дрейфа поведения
DriftDetector — модуль, который сравнивает текущее поведение агента с «базовым» (reference), зафиксированным в момент последнего успешного релиза.
4.1 Типы дрейфа, обнаруживаемые DriftDetector
| Тип дрейфа | Что мониторится | Методы |
|---|---|---|
| Поведенческий (Behavioral Drift) | Распределение ответов, тональность, стиль | Семантическое сходство эмбеддингов, KL‑дивергенция распределения intent'ов |
| Фактологический (Factual Drift) | Точность фактов, faithfulness | Регрессионные тесты на золотых ответах |
| Инструментальный (Tool Drift) | Какой инструмент вызывается, с какими параметрами | Сравнение частот вызовов, статистика ошибок API |
| Производительности (Performance Drift) | Latency, throughput, токенов на ответ | Percentile comparison, control charts |
4.2 Техника сравнения распределений
DriftDetector использует embedding-based approach:
- Для каждого сценария из тестового набора генерируется эмбеддинг ответа (например, через all‑MiniLM).
- Совокупность эмбеддингов за текущий период образует многомерное распределение.
- С помощью Maximum Mean Discrepancy (MMD) или Wasserstein distance сравнивается с распределением reference.
- Если расстояние превышает порог (например, 0.1), фиксируется дрейф.
4.3 Статистический мониторинг
Для метрик (faithfulness, latency) используется CUSUM (Cumulative Sum) — алгоритм обнаружения сдвига среднего. Когда сумма отклонений превышает порог, генерируется alert.
# Упрощённый CUSUM для drifting метрики
threshold = 0.05
cumulative = 0
for new_value in online_stream:
cumulative += (new_value - baseline_mean)
if abs(cumulative) > threshold:
alert("Drift detected")
cumulative = 0
5. Flywheel: цикл непрерывного улучшения
Flywheel (маховик) — механизм, который использует результаты evaluation и drift detection для автоматического улучшения агента.
Этапы цикла
- Сбор failed кейсов — сценарии, на которых агент показал низкий score или обнаружен дрейф, помечаются как «программные ошибки».
- Анализ — Harness группирует failed кейсы по корневой причине (плохой промпт, неверный инструмент, устаревшая документация).
- Генерация улучшений — используя LLM, предлагаются изменения промптов (prompt refinement) или правил маршрутизации.
- Тестирование — изменённый агент прогоняется через тот же Eval Runner, и если Quality Gates проходятся, новая версия предлагается к деплою.
- Эскалация — если автоматическое улучшение не справляется, кейс передаётся человеку.
Этот цикл делает систему самовосстанавливающейся: дрейф автоматически выявляется и исправляется без ручного вмешательства.
6. Интеграция с CI/CD пайплайном
Harness Engineering встраивает evaluation и drift detection в git-ориентированный workflow:
- Pull Request → запуск Eval Runner на ограниченном наборе сценариев (smoke tests)
- Merge в main → полный прогон (regression suite) с Quality Gates
- Ежедневный scheduled run → DriftDetector сравнивает с baseline и генерирует отчёт
- Каждые N релизов → рекалибрация baseline (фиксация нового reference)
Пример пайплайна в GitHub Actions
- name: Run Eval Suite
run: |
harness eval run --suite integration-tests.yaml
- name: Check Quality Gates
run: |
harness eval gates --thresholds quality-gates.yaml
7. Сравнение с традиционным ML drift
| Аспект | Классический ML (data/concept) | AI-агент (behavioral) |
|---|---|---|
| Объект дрейфа | Распределение признаков или целевой переменной | Ответы, действия, последовательность вызовов |
| Метрики | PSI, KS, Page‑Hinkley | Embedding distance, action accuracy, faithfulness |
| Инструмент коррекции | Переобучение модели | Обновление промптов, правил, инструментов |
| Мониторинг | Batch inference pipeline | Online evaluation с LLM-as-judge |
8. Пет-проект для закрепления
Задача Реализовать упрощённую версию Eval Runner + DriftDetector для агента с одним инструментом (поиск погоды).
Инструменты Python, LangChain/LlamaIndex, sentence‑transformers, scipy, Docker.
Шаги:
- Создайте агента, который вызывает API погоды (mock).
- Напишите 10 сценариев с ожидаемыми вызовами инструмента.
- Реализуйте
EvalRunner: прогон агента, сбор метрик (exact match города, время ответа). - Реализуйте
DriftDetectorна основе эмбеддингов: сохраните эмбеддинги ответов первой версии, при изменении промпта сравните с помощью MMD. - Добавьте
QualityGate: если точность < 80% — запретить деплой. - Создайте
Flywheel: при падении метрики автоматически сгенерируйте новый промпт (через LLM) и перезапустите оценку.
Ожидаемый результат Консольный инструмент, который при изменении промпта показывает delta метрик и блокирует «плохие» версии. Вы научитесь основам continuous evaluation для AI-агентов.
9. Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 741 | Как спроектировать архитектуру Agentic RAG с нуля? |
| 742 | Какие метрики использовать для оценки действий агента? |
| 745 | Как организовать CI/CD для AI-агентов? |
| 746 | Что такое LLM-as-Judge и как настроить его корректно? |
| 749 | Как обрабатывать «тихий дрейф» (semantic drift) в агентах? |
| 750 | Как сравнивать агенты между собой (A/B тестирование)? |
Навигация
- Предыдущий: 747
- Следующий: 749
- Индекс: 00. Индекс разборов