AI Observability — это практика отслеживания, мониторинга и анализа всех аспектов работы AI-приложения: от формирования промпта до получения ответа, включая латентность, стоимость токенов, качество ответов и ошибки. Без observability вы летите вслепую — не знаете, почему модель ответила плохо, сколько стоит каждый запрос и где узкое место в пайплайне.
Зачем нужна AI Observability
Традиционный мониторинг (CPU, память, HTTP-статусы) недостаточен для AI-приложений. Вам нужно отслеживать специфичные метрики:
- Латентность — time-to-first-token (TTFT) и общее время генерации
- Стоимость — расход токенов (input + output) и денежная стоимость каждого запроса
- Качество — насколько ответ соответствует ожиданиям (eval-скоры)
- Ошибки — rate limiting, таймауты, отказы модели, некорректный output
- Использование контекста — сколько контекстного окна занято, есть ли truncation
Трейсинг LLM-запросов
Трейс (trace) — это полная цепочка обработки одного пользовательского запроса. Для AI-приложения трейс включает:
Trace: user_request_abc123
├── Span: input_validation (2ms)
├── Span: pii_filtering (5ms)
├── Span: rag_retrieval (120ms)
│ ├── Span: embedding_query (45ms)
│ └── Span: vector_search (75ms)
├── Span: prompt_construction (1ms)
├── Span: llm_call (1850ms)
│ ├── model: gpt-4o
│ ├── input_tokens: 1250
│ ├── output_tokens: 380
│ ├── cost: $0.0069
│ └── ttft: 320ms
└── Span: response_parsing (3ms)
Реализация трейсинга на Python с помощью декоратора:
import time
import uuid
import logging
logger = logging.getLogger("ai_tracing")
class Tracer:
def __init__(self):
self.trace_id = str(uuid.uuid4())[:8]
self.spans = []
def span(self, name: str):
return SpanContext(self, name)
def log_summary(self):
total = sum(s["duration_ms"] for s in self.spans)
logger.info(f"Trace {self.trace_id}: {len(self.spans)} spans, {total:.0f}ms total")
for s in self.spans:
logger.info(f" {s['name']}: {s['duration_ms']:.0f}ms {s.get('meta', '')}")
class SpanContext:
def __init__(self, tracer, name):
self.tracer = tracer
self.name = name
self.meta = {}
def __enter__(self):
self.start = time.perf_counter()
return self
def __exit__(self, *args):
duration = (time.perf_counter() - self.start) * 1000
self.tracer.spans.append({
"name": self.name,
"duration_ms": duration,
"meta": self.meta,
})
# Использование
tracer = Tracer()
with tracer.span("llm_call") as span:
response = client.chat.completions.create(model="gpt-4o", messages=messages)
span.meta = {
"model": "gpt-4o",
"input_tokens": response.usage.prompt_tokens,
"output_tokens": response.usage.completion_tokens,
}
tracer.log_summary()
Ключевые метрики для дашборда
Организуйте метрики по четырём категориям (RED + Cost):
- Rate — количество запросов в секунду, по моделям и по ключам
- Errors — процент ошибок, типы ошибок (429, 500, timeout, parse_error)
- Duration — p50, p95, p99 латентности, TTFT для streaming
- Cost — стоимость за час/день/месяц, стоимость на пользователя, средняя цена запроса
ModelSwitch предоставляет встроенный дашборд с этими метриками: расход по моделям, история транзакций, usage log с детализацией по каждому запросу. Это позволяет анализировать observability без дополнительных инструментов.
Инструменты AI Observability
Популярные решения для AI-трейсинга:
- Langfuse — open-source платформа для LLM observability с поддержкой трейсинга, eval и prompt management
- LangSmith — платформа от LangChain для трейсинга цепочек
- OpenTelemetry + Grafana — универсальный стек для кастомных метрик
- Helicone — прокси-логгер для OpenAI-совместимых API
- AI Gateway (ModelSwitch) — встроенная аналитика по расходам и использованию
Для большинства проектов достаточно комбинации: AI Gateway для бизнес-метрик (стоимость, использование) + Langfuse или OpenTelemetry для технических трейсов (латентность, ошибки, цепочки вызовов).
Заключение
AI Observability — это не опция, а необходимость для любого production AI-приложения. Начните с базовых метрик (стоимость, латентность, ошибки) через AI Gateway, затем добавьте трейсинг запросов для отладки сложных цепочек. Без observability вы не сможете оптимизировать расходы, находить регрессии качества и обеспечивать SLA.