Мониторинг LLM
Наблюдаемость и отладка
Проблема: ИИ в проде — это чёрный ящик. Как узнать, когда он ошибается, тормозит или стоит слишком дорого? Как отлаживать проблемы?
Решение: Мониторинг здоровья твоего ИИ
Observability для LLM (наблюдаемость) — это отслеживание, логирование и мониторинг всех аспектов твоей ИИ-системы, когда она уже работает с реальными пользователями. Обычный веб-сервис почти детерминирован: одинаковый ввод даёт одинаковый вывод, а статус 200 обычно значит «всё хорошо». С LLM всё иначе. Модель может выдать гладкий ответ, который уверенно неверен; один и тот же промпт завтра может стоить вдвое дороже; а мелкое изменение системного промпта незаметно ухудшит качество для тысяч людей. Observability — это дисциплина, которая делает чёрный ящик читаемым. Это как система мониторинга пациента в больнице: показатели жизнедеятельности на экране, тревога, когда что-то выходит за порог (threshold), и подробная карта всего, что произошло, чтобы потом восстановить, что именно пошло не так.
Как это работает
На практике ты инструментируешь каждый вызов модели и пишешь по нему структурированное событие. Основную работу делают три типа сигналов. Метрики — это дешёвые агрегаты, за которыми ты следишь на дашбордах: задержка (отслеживай p50, p95 и p99, а не только среднее), стоимость запроса, процент ошибок и токены на входе/выходе. Логи (logs) сохраняют полную нагрузку отдельных вызовов — промпт, ответ, имя модели, число токенов, — чтобы можно было разобрать конкретный плохой ответ. Трейсы (traces) сшивают эти логи в единую временную шкалу одного пользовательского запроса: многошаговый конвейер (достать контекст, собрать промпт, вызвать модель, прогнать guardrail) превращается в водопад, где видно, какой шаг съел время. Поскольку модель недетерминирована, ты также отслеживаешь сигналы качества, которых не покажет ни один HTTP-статус: процент галлюцинаций, соотношение лайков/дизлайков и офлайн-оценки релевантности.
Компромиссы и разбор примера
Добавляй observability с первого дня — прикручивать его после инцидента больно, а команды, которые инструментируют рано, регулярно находят, что 30-40% бюджета уходит впустую на горстку раздутых промптов. Главные подводные камни: логирование полных промптов и ответов может захватывать персональные данные пользователей, поэтому маскируй или хешируй чувствительные поля; а дашборды с высокой кардинальностью дороги, поэтому сэмплируй подробные трейсы, а не храни каждый байт. Конкретный пример: p95 задержка твоего чата вдруг подскочила с 1,2с до 4,5с. Без observability ты гадаешь. С трейсом ты открываешь один медленный запрос и видишь раскладку — запрос 5мс, сборка промпта 120мс, LLM API 4200мс, guardrail 50мс. Узкое место — сам вызов модели. Смотришь в логи на число токенов и обнаруживаешь, что вход раздулся с 800 до 9000 токенов после того, как недавнее изменение начало пихать всю историю чата в контекст. Фикс — обрезать старые ходы и добавить кэширование промпта (prompt caching) для статичного системного промпта — возвращает задержку и заодно режет стоимость, и всё это потому, что данные сделали проблему видимой.
Представьте это как мониторинг пациента в больнице:
- 1. Инструментируй все вызовы LLM: Логируй каждый запрос: текст промпта, текст ответа, количество токенов (вход/выход), задержку (мс), модель и стоимость
- 2. Настрой дашборды: Отслеживай стоимость/день, p95 задержку, процент ошибок и токены/запрос — визуализируй тренды, а не только текущие значения
- 3. Создай алерты: Алерты на: скачок стоимости > 2x от среднего, p95 задержка > 5с, процент ошибок > 5%, падение качества > 10%
- 4. Анализируй трейсы на узкие места: Разбирай медленные запросы — раздутый контекст? Промах кэша? Неподходящая модель? Каждый трейс рассказывает историю
- 5. Итерируй промпты на основе данных: Используй данные observability для нахождения и исправления худших промптов — топ 10% самых дорогих промптов обычно составляют 50%+ расходов
Что мониторить
- Производительность: Отслеживайте p50, p95, p99 задержку по эндпоинтам — p95 > 3с означает, что 5% пользователей ждут слишком долго
- Отладка трейса: Пример трейса: запрос (5мс) -> сборка промпта (120мс) -> LLM API (4200мс) -> гарантия (50мс) -> ответ. Шаг LLM в 10 раз медленнее ожидаемого — возможные причины: раздутый контекст, перегрузка модели или промах кэша
- Стоимость: Отслеживайте стоимость-за-диалог (не только за запрос) — многоходовый чат может стоить в 10-50 раз больше одного обмена
- Качество: Отслеживайте процент галлюцинаций, соотношение лайков/дизлайков и оценки релевантности — деградация качества бесшумна без метрик
Интересный факт: Команды, добавляющие observability с первого дня, обычно находят возможности сократить затраты на 30-40% в первый же месяц, просто увидев реальные паттерны использования — большинство обнаруживают, что их самые длинные промпты одновременно самые неэффективные.
Попробуйте сами!
Используй интерактивный дашборд ниже, чтобы увидеть, как выглядит мониторинг LLM и понять ключевые метрики для отслеживания.
Частые вопросы
Что такое observability (наблюдаемость) для LLM?
Это отслеживание, логирование и мониторинг всех аспектов ИИ-системы в проде: задержки, стоимости, числа токенов, процента ошибок и сигналов качества вроде галлюцинаций и лайков/дизлайков. В отличие от обычного веб-сервиса, LLM недетерминирована — она может выдать уверенно неверный ответ при статусе 200, поэтому метрик HTTP недостаточно. Observability делает чёрный ящик читаемым: дашборды, алерты по порогам и подробные трейсы, чтобы потом восстановить, что пошло не так.
Чем логи, метрики и трейсы отличаются в мониторинге LLM?
Метрики — дешёвые агрегаты для дашбордов: p50/p95/p99 задержка, стоимость запроса, процент ошибок, токены вход/выход. Логи сохраняют полную нагрузку конкретного вызова (промпт, ответ, имя модели, токены), чтобы разобрать отдельный плохой ответ. Трейсы сшивают логи в единую временную шкалу одного запроса: многошаговый конвейер (достать контекст → собрать промпт → вызвать модель → guardrail) превращается в водопад, где видно, какой шаг съел время.
Какие метрики LLM нужно отслеживать в продакшене?
Минимальный набор: задержка по перцентилям (p50, p95, p99, а не среднее), стоимость на запрос и на диалог, число токенов на входе и выходе, процент ошибок. Плюс сигналы качества, которых не покажет HTTP-статус: процент галлюцинаций, соотношение лайков/дизлайков и офлайн-оценки релевантности. Настрой алерты на скачок стоимости больше 2x от среднего, p95 больше 5с, процент ошибок больше 5% и падение качества больше 10%.
Как observability помогает снизить стоимость и задержку LLM?
Данные делают проблему видимой. Пример: p95 задержка чата подскочила с 1,2с до 4,5с. Открываешь медленный трейс и видишь, что 4200мс из них съел сам вызов модели. В логах число токенов раздулось с 800 до 9000 — недавнее изменение начало пихать всю историю чата в контекст. Фикс (обрезать старые ходы плюс prompt caching для системного промпта) возвращает задержку и режет стоимость. Команды, инструментирующие рано, часто находят, что 30-40% бюджета уходит на горстку раздутых промптов.
Попробуй сам
Интерактивное демо этой техники
Отладить проблему с качеством ответов LLM в production
Попробуйте переписать промпт и посмотреть, станет ли лучше. Может быть, модель не подходит для задачи.
1. Логирование каждого запроса:
{
"request_id": "req_abc123",
"timestamp": "2024-01-15T10:30:00Z",
"user_id": "u_456",
"prompt": "...",
"response": "...",
"model": "gpt-4",
"tokens_in": 150,
"tokens_out": 200,
"latency_ms": 1200,
"temperature": 0.7,
"user_rating": null
}
2. Метрики (Prometheus/Grafana):
llm_latency_p95: < 3s (алерт > 5s)llm_error_rate: < 1% (алерт > 5%)llm_token_cost_hourly: отслеживать трендllm_user_satisfaction: thumbs up/down ratio
3. Алерты:
- Latency P95 > 5s → PagerDuty
- Error rate > 5% за 5 мин → Slack
- Satisfaction < 70% за час → email команде
LLM observability — это минимум: лог каждого запроса (prompt + response + метрики) + дашборд (latency, error rate, satisfaction) + алерты. Без этого вы отлаживаете вслепую.
Создайте бесплатный аккаунт для решения челленджей
4 челленджей с AI-проверкой для этого урока
Этот урок — часть структурированного курса по LLM.
Мой путь обучения