中文翻译暂不可用,显示俄语原文。
Что такое SLI (Service Level Indicators) для AI системы и как их собирать?
Краткий тезис
SLI (Service Level Indicators) — это количественные метрики, которые измеряют ключевые аспекты работы AI-системы: производительность, надёжность, качество ответов и доступность. Для AI-систем, особенно в архитектуре Agentic RAG, SLI включают латентность (p50/p95/p99), частоту ошибок (4xx/5xx), пропускную способность (req/s), метрики качества (faithfulness, answer relevance) и аптайм. Сбор SLI требует комбинации инструментов мониторинга (Prometheus, OpenTelemetry), логирования, LLM-as-a-judge и A/B-тестирования.
1. Определение SLI, SLO и SLA
SLI (Service Level Indicator) — числовая метрика, отражающая определённый аспект сервиса. Примеры: время ответа, процент успешных запросов, точность ответов.
SLO (Service Level Objective) — целевое значение SLI, которое команда обязуется поддерживать. Например: «p95 latency < 2 секунд в 99% времени за месяц».
SLA (Service Level Agreement) — юридическое обязательство перед клиентом, обычно жёстче SLO. Например: «Если p95 latency превышает 2 секунды более 5 минут в месяц, клиент получает компенсацию».
| Термин | Пример для AI-системы |
|---|---|
| SLI | p95 latency = 1.8 с |
| SLO | p95 latency < 2 с в 99.9% времени за месяц |
| SLA | p95 latency < 2 с в 99.9% времени за месяц, иначе возврат 10% стоимости |
2. Категории SLI для AI-систем
SLI для AI можно разделить на четыре группы:
- Производительность (Performance): латентность, пропускная способность, время генерации первого токена (TTFT).
- Надёжность (Reliability): частота ошибок, аптайм, rate limits.
- Качество (Quality): faithfulness, answer relevance, context relevance, toxicity, bias.
- Безопасность (Safety): процент ответов, содержащих запрещённый контент, PII leakage.
В контексте Agentic RAG добавляются метрики, связанные с действиями агента: успешность выполнения инструментов, количество шагов, время на планирование.
3. Latency (задержка)
Latency — время от отправки запроса до получения полного ответа. Измеряется в миллисекундах или секундах.
Ключевые перцентили:
- p50 (медиана): типичное время ответа.
- p95: 95% запросов быстрее этого значения.
- p99: 99% запросов быстрее — критично для SLA.
Как собирать:
- Вставлять тайминги в код (например, с помощью time.perf_counter() в Python).
- Использовать middleware в веб-фреймворке (FastAPI, Flask).
- Экспортировать метрики в Prometheus через клиентскую библиотеку (prometheus_client).
import time
from prometheus_client import Histogram
latency_histogram = Histogram('llm_request_duration_seconds', 'LLM request latency', buckets=[0.1, 0.5, 1, 2, 5, 10])
def call_llm(prompt):
start = time.perf_counter()
response = llm_client.generate(prompt)
latency = time.perf_counter() - start
latency_histogram.observe(latency)
return response
Важно: для streaming-ответов измеряют Time to First Token (TTFT) и Total Generation Time.
4. Error Rate (частота ошибок)
Error rate — доля запросов, завершившихся ошибкой. Разделяют:
- 4xx ошибки: клиентские (неверный запрос, превышение rate limit, токен истёк).
- 5xx ошибки: серверные (перегрузка, сбой модели, таймаут).
Как собирать:
- Логировать статус-коды HTTP-ответов.
- В Prometheus — счётчик ошибок (Counter).
from prometheus_client import Counter
error_counter = Counter('llm_errors_total', 'Total LLM errors', ['status_code'])
def handle_request(request):
try:
response = llm_client.generate(request)
error_counter.labels(status_code=200).inc()
return response
except HTTPError as e:
error_counter.labels(status_code=e.code).inc()
raise
Типичные SLO: error rate < 1% для 5xx, < 0.1% для 4xx (если не связаны с клиентом).
5. Throughput (пропускная способность)
Throughput — количество запросов, обработанных за единицу времени. Измеряется в requests per second (RPS) или tokens per second (TPS) для LLM.
Как собирать:
- Использовать счётчик запросов в Prometheus (
Counter), затем вычислять rate черезrate()в PromQL. - Для TPS — логировать количество сгенерированных токенов.
from prometheus_client import Counter
request_counter = Counter('llm_requests_total', 'Total LLM requests')
token_counter = Counter('llm_tokens_total', 'Total generated tokens')
def generate(prompt):
request_counter.inc()
response = llm_client.generate(prompt)
token_counter.inc(len(response.tokens))
return response
SLO: обычно задают минимальный throughput (например, 100 RPS) или максимальный (чтобы не превысить лимиты API).
6. Quality (качество ответов)
Качество — самая сложная категория SLI для AI. Основные метрики:
- Faithfulness (фактологичность): насколько ответ соответствует предоставленному контексту (без галлюцинаций).
- Answer Relevance (релевантность ответа): отвечает ли ответ на заданный вопрос.
- Context Relevance (релевантность контекста): насколько извлечённые документы соответствуют запросу (для RAG).
- Toxicity: наличие оскорбительного или вредного контента.
Как собирать:
- LLM-as-a-judge: использовать отдельную LLM (например, GPT-4) для оценки ответов по шкале 1–5.
- RAGAS: библиотека с готовыми метриками (faithfulness, answer relevancy, context precision).
- Человеческая оценка: краудсорсинг или внутренние эксперты (дорого, но точнее).
from ragas import evaluate
from datasets import Dataset
data = Dataset.from_dict({
'question': ['What is RAG?'],
'answer': ['RAG stands for Retrieval-Augmented Generation.'],
'contexts': [['Retrieval-Augmented Generation (RAG) is a technique...']]
})
scores = evaluate(data, metrics=['faithfulness', 'answer_relevancy'])
print(scores)
SLO: например, faithfulness > 0.9, answer relevance > 0.85.
7. Availability (доступность)
Availability — доля времени, в течение которого система отвечает на запросы. Формула:
Availability = (Total Time - Downtime) / Total Time * 100%
Как собирать:
- Health check эндпоинт (например,
/health), который проверяет доступность LLM API, базы данных, векторного хранилища. - Мониторинг uptime с помощью Uptime Kuma, Pingdom или Prometheus Blackbox Exporter.
Типичные SLO: 99.9% (три девятки) — допустимо ~8.7 часов простоя в год.
8. Инструменты сбора SLI
| Инструмент | Назначение |
|---|---|
| Prometheus + Grafana | Сбор метрик (латентность, ошибки, throughput), визуализация дашбордов |
| OpenTelemetry | Трассировка запросов, сбор распределённых метрик |
| ELK (Elasticsearch, Logstash, Kibana) | Логирование ошибок и качества |
| Lunary / Helicone | Мониторинг LLM API (стоимость, токены, задержки) |
| RAGAS / DeepEval | Оценка качества ответов |
| Custom LLM-as-a-judge | Автоматическая оценка faithfulness, relevance |
Пример дашборда Grafana:
- График p50/p95/p99 latency за последние 24 часа.
- Счётчик ошибок по статусам (4xx/5xx).
- Throughput (RPS) с аномалиями.
- Средний faithfulness score по запросам.
9. Особенности для Agentic RAG
В Agentic RAG агент выполняет несколько шагов: планирование, вызов инструментов, генерация. Дополнительные SLI:
- Step latency: время на каждый шаг агента.
- Tool success rate: доля успешных вызовов внешних инструментов (API, базы данных).
- Task completion rate: процент задач, которые агент завершил без ошибок.
Сбор требует трассировки каждого шага (например, через OpenTelemetry spans).
Пет-проект для закрепления
Задача: Разработать систему мониторинга SLI для простого RAG-сервиса (FastAPI + OpenAI + ChromaDB).
Инструменты: Python, Prometheus, Grafana, RAGAS, Docker.
Шаги:
- Реализовать RAG-эндпоинт с замером latency (p50/p95/p99) через
prometheus_client.Histogram. - Добавить счётчик ошибок (4xx/5xx) и счётчик запросов.
- Настроить health check (
/health) и экспорт метрик в/metrics. - Запустить Prometheus для сбора метрик и Grafana для дашборда.
- Добавить асинхронную оценку faithfulness через RAGAS (сохранять результаты в отдельную метрику).
- Настроить алерты в Grafana (например, p95 latency > 3 с или error rate > 2%).
Ожидаемый результат: Дашборд с графиками latency, error rate, throughput и faithfulness. Алерты при нарушении SLO.
Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 387 | Что такое SLO и SLA для AI-систем? |
| 389 | Как настроить алертинг для AI-системы? |
| 390 | Какие метрики качества ответов LLM вы знаете? |
| 391 | Как проводить A/B-тестирование AI-модели? |
| 392 | Что такое LLM-as-a-judge и как его использовать? |
| 393 | Как оценивать галлюцинации в RAG? |
Навигация
- Предыдущий: 387
- Следующий: 389
- Индекс: 00. Индекс разборов