Артём рассказал о том, почему привычных инструментов мониторинга уже недостаточно для систем на базе LLM и AI-агентов — и что именно нужно наблюдать, чтобы такие решения оставались управляемыми в продакшне.
Главная проблема в том, что технически исправная AI-система не обязательно работает хорошо. Сервер может вернуть 200 OK, модель — сформировать ответ, а пользователь при этом получить нерелевантный результат, галлюцинацию или просто не дождаться начала генерации. Поэтому в AI-системах наблюдаемость постепенно смещается от контроля инфраструктуры к пониманию всего пути запроса: что система получила, какие решения приняла, какие инструменты вызвала, сколько это стоило и чем закончилось.
Почему классического мониторинга недостаточноВ обычных веб-сервисах многое можно понять по стандартным показателям: latency, throughput, error rate, загрузке CPU, GPU и RAM. Структурированные логи позволяют связать запрос с конкретной версией сервиса или модели и найти техническую причину сбоя. В классическом ML к этому добавляются качество данных, Data Drift, качество модели и деградация ее показателей со временем. Однако и здесь система в основном работает с достаточно четко определяемыми входными и выходными данными.
С LLM ситуация меняется. Модели работают со свободным естественным языком, где одну и ту же мысль можно выразить множеством способов, а единственного математически правильного ответа часто вообще не существует. Поэтому традиционных метрик качества уже недостаточно. LLM Observability в презентации определяется как комплексный мониторинг и анализ LLM-приложения на всех этапах — от трассировки цепочек промптов до оценки качества ответов уже в production.
Что нужно видеть внутри LLM-системыМинимально полезная трассировка должна позволять восстановить весь путь запроса. Что именно спросил пользователь? Какие документы вернула векторная база? Что вошло в итоговый промпт? Что ответила модель? Это важно, потому что ошибка часто находится не там, где кажется. Плохой ответ может быть связан не с самой моделью, а с поиском, составом контекста, системной инструкцией или промежуточным сервисом.
При этом наблюдаемость должна объединять как минимум две группы показателей. Первая —
производительность и стоимость: количество токенов в prompt и completion, TTFT — время до первого токена, общую задержку и throughput. Вторая —
качество и безопасность: насколько ответ опирается на переданный контекст, отвечает ли он на вопрос пользователя, нет ли в нем токсичности или предвзятости.
Для проверки качества в production может использоваться
LLM-as-a-Judge: другая модель оценивает ответы основной модели по заданной шкале.
С агентами все становится еще сложнее. Для обычного LLM-вызова цепочка относительно проста: есть prompt, ответ, токены и задержка. У агента появляется полный цикл поведения: планирование, несколько обращений к LLM, вызовы инструментов, память и реальные действия во внешних системах. Поэтому объектом наблюдения становится уже не отдельный ответ, а вся траектория выполнения задачи. Такую траекторию важно видеть как граф. Агент может двигаться линейно, возвращаться на предыдущие шаги, вызывать подагентов или запускать инструменты параллельно. Простого списка вызовов в этом случае недостаточно. При этом полезно фиксировать не только время выполнения операций, но и их
смысл: какие данные получил агент, какой шаг выбрал и к какому результату это привело. Для этого используются семантические spans.
Отдельная задача — экономика. Стоимость нужно считать не только на уровне отдельного вызова модели, но и по каждому шагу, агенту и пользовательской задаче целиком.
Кейс 1. Документ найден, но модель его «не видит»Один из примеров — классическая проблема
Lost in the Middle.
Векторный поиск отработал правильно: нужный документ действительно попал в prompt. Но если в контексте слишком много документов, модель может хорошо использовать информацию в начале и конце и проигнорировать фрагмент из середины. В кейсе в prompt было передано 15 документов, а нужное правило находилось на седьмой позиции. При этом модель утверждала, что нужной информации в предоставленных документах нет. Трассировка позволяет увидеть, что поиск сработал корректно, а проблема появилась уже на этапе использования контекста.
Решение — не просто «дать модели больше данных», а подобрать оптимальный объем контекста: использовать reranking, уменьшать top_k, убирать дубли и нерелевантный текст через context compression. После этого изменение нужно проверить A/B-тестом — не только по качеству ответа, но и по расходу токенов и стоимости.
Практический вывод: документ, попавший в prompt, еще не означает, что модель действительно использовала его в ответе.
Кейс 2. Несколько запросов могут стоить очень дорогоДругой пример — неконтролируемый рост расходов.
Пользователь повторно отправляет один и тот же большой файл после таймаута. Количество запросов может оставаться относительно небольшим, но токены в минуту, стоимость в час и размер каждого запроса резко растут. Observability позволяет пройти от финансового алерта до конкретного пользователя или API-ключа, увидеть повторяющиеся крупные запросы и обнаружить, что лимит установлен только на число запросов, но не на токены или бюджет. В результате причиной оказывается агрессивный retry, который многократно умножает стоимость большого prompt. Решение — лимиты по токенам и бюджету, ограничение числа повторов, backoff и защита от дублей.
Практический вывод: мало запросов не означает низкую стоимость. В LLM-системах критически важен размер каждого вызова.
Кейс 3. Новый prompt может тихо ухудшить продуктЕще одна типичная ситуация — после изменения системной инструкции инфраструктура продолжает работать штатно, но ответы становятся хуже.
Например, инструкция «отвечай кратко» приводит к тому, что модель начинает пропускать важные детали в сложных запросах. Падение видно не по HTTP-ошибкам, а по метрике Answer Relevance. Чтобы найти причину, нужно связать момент ухудшения с релизом prompt, сравнить версии через prompt diff и посмотреть качество по разным сегментам запросов. Если новая версия действительно ухудшает результат, ее откатывают, неудачные запросы сохраняют в регрессионный датасет, а следующую версию проверяют на этих кейсах еще до релиза.
Практический вывод: промпт — такой же компонент системы, как код или модель, и его изменения требуют версионирования и регрессионного тестирования.
Кейс 4. Агент работает долго не потому, что модель медленнаяВ мультиагентной системе классификатор и исполнитель могут начать бесконечно передавать друг другу одну и ту же задачу. Для пользователя это выглядит как долгая загрузка или таймаут. При этом внутри растет количество шагов, вызовов и расход токенов. Трассировка показывает внутренний «пинг-понг»: задача почти не меняется, новых фактов не появляется, но в системе нет условия выхода из цикла. Решение — ограничить число передач задачи, время и бюджет одного запуска. Если новые данные перестали появляться, система должна либо уточнить запрос, либо передать его человеку.
Практический вывод: большая latency в агентной системе может быть вызвана не медленной моделью, а неудачной логикой маршрутизации.
Кейс 5. API работает, но пользователь все равно уходитЕще одна скрытая проблема — деградация провайдера модели. Ошибок может не быть вообще, но время до первого токена увеличивается, например, с 0,2 до 8 секунд. Пользователь воспринимает это как зависание приложения и закрывает его.
Поэтому важно отдельно мониторить
TTFT, а при устойчивом превышении порога переключать критичные запросы на резервного провайдера. После восстановления основной инфраструктуры трафик возвращается постепенно с контролем TTFT, отмен запросов, качества и стоимости.
Практический вывод: техническая доступность API еще не означает приемлемого пользовательского опыта.
Наблюдаемость должна доходить до бизнес-результата. Кейс ассистента продавца. Такой агент может анализировать каталог продуктов, актуальные условия и данные CRM, а затем предлагать решение и черновик письма клиенту. Но оценивать его работу только по правильности текста недостаточно.
Здесь предлагается смотреть сразу на три уровня:
- качество ответа — учтены ли требования клиента, подтверждены ли функции, ограничения и цены актуальными источниками;
- процесс — какие документы и данные CRM использовал агент, какие сервисы вызвал, где возникли сбои и сколько стоило выполнение;
- результат — воспользовался ли продавец рекомендацией, что исправил в письме и сколько времени сэкономил.
При этом влияние AI-ассистента на саму сделку предлагается оценивать отдельно, поскольку результат зависит не только от работы системы.
Это важный переход: observability — это уже не только поиск технических ошибок, но и попытка связать работу AI с реальной пользой.
До релиза — тесты, после релиза — трассировка. Для контроля AI-агента предлагается сочетать несколько уровней.
Golden Dataset хранит эталонные сценарии, ожидаемые результаты и обязательные правила.
Promptfoo используется для тестов в CI/CD: проверки регрессий, формата и ограничений. Для более мягких критериев можно подключать LLM-as-a-Judge.
Langfuse дает трассировку уже работающей системы: какие инструменты использовались, что ответили микросервисы, где возникли ошибки, какова задержка и сколько токенов было потрачено.
При этом Артём отдельно подчеркивает: жесткие бизнес-правила лучше проверять кодом, а оценку LLM использовать как дополнительный сигнал, а не как единственный механизм контроля.
Иногда проблема агента — не в логике, а в отсутствии нужного инструмента. Один из показательных кейсов — обработка кредитной заявки тремя агентами: аналитиком, рисковиком и супервизором. Аналитик формирует отчет, рисковик находит пропущенный судебный риск и возвращает документ на доработку. Но у аналитика нет инструмента, позволяющего получить нужные данные. Поэтому он просто меняет формулировку и снова отправляет практически тот же отчет. В результате два агента зацикливаются, стоимость растет, а супервизор так и не получает решенный спор. Через три минуты и около $50 расходов запрос завершается таймаутом 504.
Обычный APM показывает только длинный POST, но не объясняет, что произошло внутри системы. Семантические spans позволяют увидеть реальную причину: агенту буквально нечем получить недостающую информацию. Решение — дать ему проверенный источник данных или передавать такую проверку человеку, а также добавить эскалацию и ограничения по числу итераций, времени и бюджету.
Практический вывод: бесконечный цикл иногда возникает не из-за «плохого reasoning», а из-за того, что система требует от агента действие, для которого у него нет данных или инструмента.
Наблюдать нужно не только агента, но и все его окружениеПо мере усложнения систем одного мониторинга модели становится недостаточно.
Один пользовательский запрос может запустить несколько LLM-вызовов, поиск в vector DB, обращения к бизнес-БД, внешние API, выполнение кода, запись в память, отправку уведомлений и human-in-the-loop.
Поэтому для одного запуска стоит считать число шагов и вызовов инструментов, общие токены, latency, стоимость, количество retry и неудачных действий.
Зрелая AI-инфраструктура должна связывать все эти действия единым распределенным trace, управлять объемом сохраняемых данных через sampling и retention, маскировать чувствительную информацию, вести аудит действий, ограничивать нагрузку и ресурсы. Важен и model routing: простые задачи можно направлять на более дешевые модели, сложные — на более мощные. Для критичных действий должен оставаться механизм human-in-the-loop.
Инфраструктурные метрики и качество AI нельзя рассматривать отдельноПри масштабировании AI-систем необходимо соединять два уровня наблюдаемости. С одной стороны — инфраструктура: vRAM, NVLink, KV-cache, состояние серверов и реальная нагрузка. С другой — пользовательские метрики вроде TTFT. Например, переполненный KV-cache может резко увеличить время до первого токена. Поэтому TTFT из Langfuse имеет смысл сопоставлять с инфраструктурными метриками vLLM в Grafana или Prometheus. Есть и еще один компромисс: дополнительные guardrails сами увеличивают задержку, потому что синхронная проверка добавляет новый шаг в критический путь. Поэтому тяжелую оценку ответов имеет смысл по возможности выполнять асинхронно, например через Langfuse и Ragas.
Главный тезис выступления можно сформулировать просто:
выпускать LLM в production без полноценной наблюдаемости — значит создавать систему, которую невозможно нормально объяснять и контролировать.
В LLM и особенно агентных системах недостаточно считать ошибки сервера или количество токенов. Нужно одновременно видеть производительность, стоимость, качество и безопасность; отслеживать планы, вызовы инструментов, циклы и память; версионировать промпты, скиллы и MCP; учитывать особенности выбранной модели и инфраструктуры. И, пожалуй, самое важное: считать нужно
не только деньги, но и качество. Экономный AI-сервис, который регулярно галлюцинирует или нарушает бизнес-правила, нельзя считать хорошо работающим.