Когда AI-агенты начали галлюцинировать в продакшене
Это было обычное утро в monday.com. Команда запустила новый AI-агент для автоматизации workflow — он должен был анализировать тикеты и предлагать решения. Первые 20 минут всё работало идеально. Потом агент начал рекомендовать "перезагрузить сервер" для проблем с UI. Потом — "проверить кабели" для cloud-сервиса. К часу дня он уже предлагал "помолиться" для решения бага с API.
Проблема: 40% галлюцинаций в продакшен-агентах. Регрессии появлялись после каждого деплоя. Фидбэк-цикл занимал 3-5 дней. Инженеры тратили недели на ручное тестирование.
Решение: Evals as Code
Вместо того чтобы строить очередную "систему мониторинга", monday.com пошла другим путём. Они внедрили оценку AI-агентов как часть CI/CD пайплайна с первого дня. Не как опциональную фичу, а как обязательный gate перед каждым деплоем.
Идея проста: если ваш код проходит unit-тесты, то и ваши AI-агенты должны проходить evals. Но с одной ключевой разницей — evals должны быть такими же воспроизводимыми, версионируемыми и автоматизированными, как и любой другой код.
1 Инфраструктура: LangSmith + GitOps
monday.com использовала LangSmith не просто как инструмент для отладки, а как центральный хаб для evals. Вот как выглядит их стек:
- LangSmith (актуально на 22.02.2026): последняя версия с поддержкой Multi-Turn Evaluators и production-трассировки
- GitHub Actions: автоматический запуск evals при каждом PR
- Артефакты: датасеты evals хранятся как код в Git
- Метрики: автоматические отчёты в Slack/Teams
# .github/workflows/ai-evals.yml
name: AI Agent Evals
on:
pull_request:
paths:
- 'agents/**'
- 'prompts/**'
- 'evals/**'
jobs:
evaluate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: pip install langsmith langchain anthropic openai evals-core
- name: Run evals
env:
LANGSMITH_API_KEY: ${{ secrets.LANGSMITH_API_KEY }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: python -m evals.run_all --dataset production-2026-q1
2 Multi-Turn Evaluators: оценка диалогов, а не отдельных ответов
Самая большая ошибка при оценке AI-агентов — тестировать их в вакууме. Реальные пользователи ведут диалоги. Они задают уточняющие вопросы. Они меняют контекст.
monday.com разработала систему Multi-Turn Evaluators, которая симулирует реальные диалоги:
# evals/multi_turn_evaluator.py
from langsmith.schemas import Run, Example
from typing import List, Dict
import asyncio
class MultiTurnEvaluator:
def __init__(self, max_turns: int = 5):
self.max_turns = max_turns
async def evaluate_conversation(self,
agent: callable,
initial_prompt: str,
user_profile: Dict) -> Dict:
"""Оценивает агента в многоходовом диалоге"""
conversation = []
current_input = initial_prompt
for turn in range(self.max_turns):
# Получаем ответ агента
response = await agent(current_input)
conversation.append({"agent": response})
# Генерируем следующий пользовательский ввод
# на основе ответа агента и профиля пользователя
next_input = self._simulate_user_response(
response, user_profile, turn
)
if next_input is None: # Диалог завершён
break
conversation.append({"user": next_input})
current_input = next_input
return {
"conversation": conversation,
"coherence_score": self._calculate_coherence(conversation),
"hallucination_score": self._detect_hallucinations(conversation),
"helpfulness_score": self._rate_helpfulness(conversation)
}
| Метрика | До внедрения | После внедрения | Улучшение |
|---|---|---|---|
| Время фидбэка | 3-5 дней | 8 часов | 8.7x |
| Галлюцинации в проде | 40% | 3.2% | 12.5x |
| Регрессии после деплоя | 67% релизов | 4% релизов | 16.7x |
Как они это сделали: пошаговый разбор
Шаг 1: Создание эталонных датасетов
Вместо того чтобы писать evals с нуля, команда начала с анализа реальных пользовательских диалогов. Они взяли 1000+ реальных тикетов поддержки, анонимизировали их и превратили в тестовые кейсы.
Ключевой инсайт: не все диалоги одинаково важны. Они выделили три категории:
- Критические сценарии (20%): то, что ломает пользовательский опыт
- Частые запросы (50%): ежедневные операции пользователей
- Edge-кейсы (30%): странные, но важные сценарии
Шаг 2: Интеграция в CI/CD
Evals стали обязательным чеком в PR. Если агент не проходит 95% тестов — мерж-реквест блокируется. Звучит жёстко? Зато работает.
# evals/ci-config.yaml
thresholds:
critical_scenarios: 98% # Должны проходить почти всегда
frequent_requests: 95% # Стандартный порог
edge_cases: 85% # Могут иногда фейлиться
alerts:
- type: slack
channel: '#ai-agents-alerts'
conditions:
- score_drop > 5%
- new_hallucination_detected: true
auto_remediation:
- action: rollback_to_previous_version
condition: critical_score < 90%
- action: notify_engineers
condition: any_test_failed
Шаг 3: Production-трассировка
Evals — это не только про pre-production. monday.com настроила LangSmith на мониторинг продакшен-трасс в реальном времени. Каждый пользовательский запрос оценивается по тем же метрикам.
Если в продакшене обнаруживается новый тип галлюцинации — он автоматически добавляется в evals датасет. Круг замыкается.
Типичные ошибки (и как их избежать)
Ошибка #1: Тестировать только happy path. Реальные пользователи делают опечатки, меняют тему диалога, задают странные вопросы.
Ошибка #2: Использовать LLM для оценки без human-in-the-loop. Да, GPT-4 может оценивать ответы, но он тоже галлюцинирует. Нужна калибровка.
Ошибка #3: Фокусироваться только на точности. Пользователям важны ещё и тон, полезность, скорость ответа.
Инструменты, которые работают в 2026
После года экспериментов, команда monday.com остановилась на этом стеке:
- LangSmith 2026.1+ — для трассировки и evals
- Claude 3.5 Sonnet — как основной LLM для сложных evals
- GPT-4o Mini — для быстрых/дешёвых проверок
- RAGAS — для оценки retrieval-систем
- Custom evaluators — доменно-специфичные метрики
Если вы только начинаете, посмотрите на Maos AgentGate — это гайд по настройке CI/CD для AI-агентов, который поможет избежать самых болезненных ошибок.
Что делать, если evals стали bottleneck?
Случилось предсказуемое: по мере роста числа агентов, evals начали занимать часы. Вот как monday.com оптимизировала процесс:
- Приоритизация тестов — сначала критичные, потом остальные
- Параллельный запуск — разделили evals на независимые группы
- Кэширование — если промпт не менялся, используем прошлые результаты
- Сэмплинг — не нужно запускать все тесты каждый раз
# evals/optimized_runner.py
from concurrent.futures import ThreadPoolExecutor
import hashlib
from functools import lru_cache
class OptimizedEvalRunner:
def __init__(self, max_workers: int = 10):
self.executor = ThreadPoolExecutor(max_workers=max_workers)
self.cache = {}
def _get_cache_key(self, agent_config: dict, test_case: dict) -> str:
"""Генерируем ключ для кэша"""
config_hash = hashlib.md5(
str(sorted(agent_config.items())).encode()
).hexdigest()
test_hash = hashlib.md5(
str(sorted(test_case.items())).encode()
).hexdigest()
return f"{config_hash}:{test_hash}"
@lru_cache(maxsize=1000)
def run_eval_cached(self, agent, test_case):
"""Запускаем eval с кэшированием"""
cache_key = self._get_cache_key(
agent.get_config(),
test_case
)
if cache_key in self.cache:
return self.cache[cache_key]
result = agent.evaluate(test_case)
self.cache[cache_key] = result
return result
Совет, который сэкономит вам месяц работы
Не начинайте со сложных Multi-Turn Evaluators. Начните с трёх простых метрик:
- Точность — агент даёт правильный ответ?
- Безопасность — агент не рекомендует опасные действия?
- Скорость — ответ приходит за разумное время?
Добавляйте сложность постепенно. Каждую новую метрику калибруйте на реальных данных. И обязательно читайте форенсик-аудит локального AI-ассистента — там подробно разобраны методы обнаружения галлюцинаций.
Что дальше? Evals 2.0
Команда monday.com уже экспериментирует с next-gen подходами:
- Автоматическая генерация тестов — LLM создаёт edge-кейсы на основе продакшен-трасс
- Adversarial evals — специальные промпты, которые пытаются "сломать" агента
- Transfer learning между агентами — если один агент научился чему-то, другие могут перенять опыт
- Непрерывная калибровка — evals постоянно обновляются на основе пользовательского фидбэка
Самое интересное — они начали использовать evals не только для контроля качества, но и для обучения агентов. Проваленный тест становится тренировочным примером.
Финал: Evels as Code — это не про тестирование. Это про создание feedback loop, который становится короче с каждой итерацией. С 5 дней до 8 часов. С 40% галлюцинаций до 3.2%. Это тот самый leverage, который превращает AI-агентов из игрушки в production-инструмент.
Если вы хотите глубже погрузиться в тему, посмотрите Agent Engineering: новая дисциплина для перехода от прототипа к продакшену. Там разобраны все этапы — от MVP до масштабирования.
А самый главный урок от monday.com? Не ждите, пока ваши агенты начнут галлюцинировать в проде. Встройте evals в CI/CD с первого дня. Первый баг, который они поймают, окупит все потраченные усилия.