Трейсинг, стоимость и наблюдаемость

Урок о том, как видеть и контролировать, что происходит в LLM-приложении на проде.

Трейсинг — запись полного пути выполнения цепочки (промпты, вызовы модели и инструментов, тайминги, токены) для отладки и мониторинга.

Почему без наблюдаемости тяжело

LLM-приложение недетерминированно: один и тот же вход даёт разные ответы, ошибки прячутся в промптах и данных. Без трейсинга вы не понимаете, почему ответ плохой: дело в найденном контексте, в промпте или в модели? Трейсинг показывает каждый шаг цепочки и делает отладку возможной.

Стоимость складывается из токенов

Главная статья расходов — токены: считаются и вход, и выход. Прикинуть стоимость запроса можно на чистом Python:

def cost(in_tokens, out_tokens, price_in, price_out):
    # цены за 1000 токенов
    return (in_tokens / 1000) * price_in + (out_tokens / 1000) * price_out

per_request = cost(1200, 300, price_in=0.15, price_out=0.60)
print(round(per_request, 4), "за запрос")
print(round(per_request * 10000, 2), "за 10k запросов")

Вывод:

0.36 за запрос
3600.0 за 10k запросов

Рычаги стоимости

РычагЭффект
Модель поменьшедешевле за токен, иногда достаточно по качеству
Короче контекст (меньше k, обрезка истории)меньше входных токенов
Кэширование ответовповторяющиеся запросы не платятся
Лимит max_tokens выводаограничивает длину ответа

Как работает под капотом

Инструменты трейсинга (например, LangSmith) собирают данные через тот же механизм callbacks: на каждом шаге цепочки они получают событие и пишут его в трейс — с промптом, ответом, числом токенов и временем. Поэтому подключение трейсинга обычно не требует переписывать логику: достаточно настроить обработчик. Кэширование тоже встраивается прозрачно: перед вызовом модели проверяется кэш по ключу-промпту, и при попадании ответ берётся оттуда без оплаты.

Частые ошибки

  • Деплой без трейсинга. Потом невозможно понять причину плохих ответов на проде.
  • Игнорировать рост стоимости. Длинные истории и большое k незаметно раздувают счёт.
  • Логировать чувствительные данные. В трейсы попадают промпты — следите, чтобы туда не утекали персональные данные и секреты.

Итог

  • Трейсинг показывает каждый шаг цепочки и делает отладку возможной.
  • Стоимость — это токены входа и выхода; считайте её заранее.
  • Рычаги: модель поменьше, короче контекст, кэш, лимит вывода.
  • Трейсинг и кэш встраиваются через callbacks без переписывания логики.
Проверьте себя
1. Зачем нужен трейсинг в LLM-приложении?
AЧтобы ускорить модель
BЧтобы видеть каждый шаг цепочки и понимать причину плохих ответов
CЧтобы уменьшить размерность эмбеддингов
DЧтобы заменить векторную базу
2. Какой рычаг НЕ снижает стоимость запросов?
AУменьшить k и обрезать историю
BКэшировать повторяющиеся запросы
CУвеличить число инструментов у агента до максимума
DВзять модель поменьше
3. Через какой механизм обычно подключают трейсинг, не переписывая цепочку?
AЧерез эмбеддинги
BЧерез callbacks (события выполнения)
CЧерез смену провайдера
DЧерез увеличение temperature