ПОЧЕМУ APM НЕ ХВАТАЕТ ДЛЯ LLM
Классический мониторинг (Datadog, Grafana, Sentry) отвечает на вопрос «жив ли сервис и какая латентность». Для LLM-приложения этого катастрофически мало. Запрос вернул HTTP 200 и уложился в 800 мс — но модель выдала галлюцинацию, потратила 12 000 токенов на пустяк или сорвалась в цикл tool-calling. Стандартный APM этого не увидит.
LLM observability отвечает на другие вопросы: что именно ушло в модель, сколько это стоило, почему цепочка агентов приняла такое решение и насколько хорош был ответ. В 2026 году, когда типовое приложение — это не один вызов, а граф из ретривера, нескольких LLM-шагов и вызовов инструментов, без трейсинга вы отлаживаете вслепую.
Три боли, которые решает observability:
- Стоимость. Один забытый цикл ре-промптинга способен за ночь сжечь бюджет. Без по-запросного учёта токенов вы узнаете об этом из счёта провайдера.
- Отладка цепочек. Агент из 8 шагов упал на 6-м. Без трейса вы не поймёте, какой промежуточный вывод сломал логику.
- Качество. Regression в промпте не ловится юнит-тестом. Нужны оценки на реальном трафике — LLM-as-judge, пользовательские thumbs up/down, эвалы.
ЧТО ВООБЩЕ НАДО МЕРИТЬ
Прежде чем ставить инструмент, определитесь с метриками. Минимальный набор для прода:
- Токены (prompt / completion / total) — база для стоимости и для поиска раздутых промптов.
- Стоимость по запросу и по трейсу — с разбивкой по модели, юзеру, фиче.
- Латентность и TTFT (time to first token) — для стриминга критичен именно TTFT, а не полное время.
- Трейс полной цепочки — вложенные спаны: ретривер → LLM → tool → LLM.
- Частота ошибок и ретраев — rate limits, таймауты, отказы модели (refusals).
- Качество ответа — скоры от эвалов, фидбек юзеров, флаги галлюцинаций.
Отдельно держите в голове PII. Промпты часто содержат персональные данные, и слать их в облачный дашборд без маскирования — прямой путь к проблемам с комплаенсом. Langfuse и Helicone оба умеют скрабить чувствительные поля, но включать это надо руками.
LANGFUSE: OPEN-SOURCE СТАНДАРТ ДЕ-ФАКТО
Langfuse — самый популярный open-source инструмент для LLM observability. Ставится через Docker self-hosted, есть облако. Ядро — иерархические трейсы: trace содержит вложенные span и generation, что идеально ложится на агентные цепочки.
Сильные стороны
- Полный self-host под MIT-совместимой лицензией ядра — данные не покидают ваш контур.
- Prompt management с версионированием: промпты живут вне кода, откат в один клик.
- Встроенные эвалы и датасеты для регрессионного тестирования промптов.
- SDK для Python и JS/TS + декораторы, нативная интеграция с LangChain, LlamaIndex, OpenAI SDK.
Слабые стороны
Self-host требует Postgres + ClickHouse + Redis — это не «поднял одним контейнером и забыл». Для команды без DevOps проще взять облако. UI местами перегружен, порог входа выше, чем у Helicone.
# pip install langfuse openai
from langfuse.openai import openai # drop-in обёртка над OpenAI SDK
client = openai.OpenAI()
# Каждый вызов автоматически трейсится в Langfuse
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Объясни трейсинг LLM в двух фразах"}],
# метаданные для группировки в дашборде
metadata={"user_id": "u-42", "feature": "chat", "env": "prod"},
)
print(response.choices[0].message.content)
# Ручной трейс для агентной цепочки
from langfuse import Langfuse
lf = Langfuse()
trace = lf.trace(name="rag-pipeline", user_id="u-42")
retr = trace.span(name="retriever", input={"q": "что мерить"})
retr.end(output={"docs": 5})
HELICONE: PROXY-FIRST, МИНУТА НА СТАРТ
Helicone построен по другому принципу — это прокси. Вы меняете base_url в вашем клиенте на эндпоинт Helicone, добавляете API-ключ в заголовок, и весь трафик логируется автоматически. Ноль изменений в бизнес-логике.
Сильные стороны
- Интеграция буквально за минуту — заменить URL и добавить header.
- Кэширование ответов на уровне прокси — экономит и деньги, и латентность на повторах.
- Rate limiting и алерты по стоимости из коробки.
- Не привязывает к конкретному фреймворку: работает с любым HTTP-клиентом.
Слабые стороны
Прокси в критическом пути — это дополнительная точка отказа и лишний сетевой хоп (self-host снимает вопрос латентности, но добавляет эксплуатацию). Иерархические трейсы агентов слабее, чем у Langfuse — Helicone силён в логировании отдельных вызовов, а не в глубокой трассировке графов.
from openai import OpenAI
# Весь фокус — в base_url и заголовке. Код приложения не меняется.
client = OpenAI(
base_url="https://oai.helicone.ai/v1",
default_headers={
"Helicone-Auth": "Bearer sk-helicone-xxxx",
"Helicone-Property-Feature": "chat", # кастомные свойства
"Helicone-Cache-Enabled": "true", # кэш повторов
},
)
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Привет из прода"}],
)
СРАВНЕНИЕ: LANGFUSE, HELICONE И ОСТАЛЬНЫЕ
На рынке 2026 года ещё держатся LangSmith (родной для экосистемы LangChain, но closed-source и платный), Phoenix от Arize (силён в эвалах и на базе OpenTelemetry) и W&B Weave. Ключевые различия:
| Инструмент | Модель | Self-host | Сильная сторона | Кому |
|---|---|---|---|---|
| Langfuse | SDK + декораторы | Да (OSS) | Трейсинг цепочек, prompt-management | Командам, которым нужны данные в своём контуре |
| Helicone | Proxy | Да (OSS) | Скорость подключения, кэш, rate-limit | Тем, кто хочет логи «здесь и сейчас» |
| LangSmith | SDK | Enterprise only | Глубокая интеграция с LangChain | Стеку целиком на LangChain |
| Arize Phoenix | OpenTelemetry | Да (OSS) | Эвалы, дрейф, embeddings-анализ | ML-командам с фокусом на качество |
Практическое правило: если не уверены — начните с Helicone для быстрого сбора логов, а когда упрётесь в потребность трассировать многошаговых агентов и версионировать промпты, добавьте Langfuse. Они не взаимоисключающие. Свежие релизы и альтернативы этих инструментов отслеживаются в каталоге REDDYX.
OPENTELEMETRY: КУДА ВСЁ ИДЁТ
Главный тренд 2026 — стандартизация через OpenTelemetry. Появилась спецификация semantic conventions для GenAI (атрибуты вроде gen_ai.usage.input_tokens, gen_ai.request.model), и большинство серьёзных инструментов теперь умеют принимать OTLP. Практический вывод: инструментируйте приложение через OpenTelemetry-совместимый слой, и вы сможете менять бэкенд-дашборд без переписывания инструментации.
Langfuse и Phoenix уже принимают OTLP-трейсы. Это защищает от вендор-лока: единожды разметив спаны, вы отправляете их хоть в Langfuse, хоть в свой Grafana Tempo.
ПРАКТИЧЕСКИЕ ГРАБЛИ ПРОДА
- Не блокируйте основной поток. Отправка трейсов должна быть асинхронной и батчами. Синхронный флаш на каждый запрос добавит вам латентности на ровном месте.
- Сэмплируйте на масштабе. При миллионах запросов в день логировать 100% дорого и по хранилищу, и по деньгам. Полный трейс для ошибок и медленных запросов, сэмпл 5-10% для остального — разумный старт (цифры подбирайте под свой объём).
- Считайте стоимость сами, не доверяйте только дашборду. Прайсинг моделей меняется, а в дашборде цена может быть зашита старая. Держите свою таблицу цен как источник правды.
- Маскируйте PII до отправки. Скрабинг на клиенте надёжнее, чем на стороне дашборда.
- Ставьте бюджетные алерты. Порог по $/час ловит взбесившийся цикл ретраев раньше, чем это заметит финансовый отдел.
МИНИМАЛЬНЫЙ ЧЕКЛИСТ ВНЕДРЕНИЯ
- Подключить один инструмент (Helicone за минуту или Langfuse SDK) — начать собирать хоть что-то.
- Добавить метаданные к каждому вызову: user_id, feature, env.
- Настроить трейсинг цепочек — вложенные спаны для агентов и RAG.
- Включить учёт токенов и стоимости, привязать к своей таблице цен.
- Настроить бюджетные и error-rate алерты.
- Завести датасет и эвалы для регрессии промптов перед деплоем.
Инструменты и их обновления удобно мониторить через каталог REDDYX — там же появляются новые OSS-альтернативы, если Langfuse или Helicone вам не подойдут.
Частые вопросы
Что такое LLM observability простыми словами?
Это сбор и анализ данных о том, что происходит внутри LLM-приложения в проде: какие промпты уходят в модель, сколько токенов и денег тратится, как выполняются цепочки агентов и насколько хороши ответы. В отличие от обычного мониторинга, observability показывает содержание и качество, а не только доступность сервиса.
Langfuse или Helicone — что выбрать?
Helicone — если нужна скорость подключения (меняете base_url и через минуту видите логи) и кэширование. Langfuse — если нужен глубокий трейсинг многошаговых агентов, версионирование промптов и полный self-host данных. Их можно использовать вместе.
Сильно ли observability замедляет приложение?
При правильной настройке — почти нет. Трейсы отправляются асинхронно и батчами, не блокируя основной поток. Прокси-инструменты вроде Helicone добавляют один сетевой хоп, который снимается self-host-развёртыванием рядом с приложением.
Как контролировать стоимость LLM в проде?
Логируйте токены по каждому запросу с разбивкой по модели, фиче и пользователю, ведите собственную актуальную таблицу цен и настройте алерты по порогу $/час. Это ловит взбесившиеся циклы ретраев до того, как они разорят бюджет.
Если ловите свежие инструменты для LLM-стека раньше остальных — заглядывайте в Telegram-канал REDDYX AI — новые репозитории каждые 30-60 минут.