English translation is not available yet. Showing Russian content.
Реализовать алертинг по faithfulness
ТЕХНИЧЕСКОЕ ЗАДАНИЕ: Реализовать алертинг по faithfulness
1. Цель задачи
Научиться настраивать мониторинг и алертинг на метрику faithfulness (фактологическая точность) в RAG-системе. Вы развернёте пайплайн сбора метрик, настройки порога тревоги (faithfulness < 0.8) и интеграции с системой оповещения (PagerDuty или её эмуляцией). Основной фокус — добиться, чтобы уведомление приходило не позднее 1 минуты после падения метрики.
Ключевой результат Работающий алерт, который уведомляет команду о деградации faithfulness быстрее 60 секунд.
2. Исходные данные
Перед началом необходимо иметь:
| Что нужно | Откуда взять |
|---|---|
| RAG-система (рабочая или тестовая) | Пет-проект из учебного курса или собственная реализация |
| Набор тестовых вопросов и ответов | Сгенерировать самому (20–50 пар) или взять из открытых датасетов (например, Natural Questions, TriviaQA) |
| Ground truth (эталонные ответы) | Разметить вручную или взять из датасета с reference |
| Python 3.10+ с RAGAS | pip install ragas |
| Prometheus + Alertmanager | Docker Compose (рекомендуется) |
| PagerDuty (или эмуляция) | Бесплатный аккаунт PagerDuty или любой вебхук-приёмник (Slack, Telegram, локальный HTTP endpoint) |
| Docker | Для быстрого развёртывания инфраструктуры мониторинга |
Если нет реального PagerDuty — симулируем:
- Создаём простой HTTP-сервер на Python (Flask / FastAPI), который имитирует приём алертов (логирует в файл или выводит в консоль).
- Настраиваем Alertmanager на отправку вебхуков на этот сервер.
- Используем готовые сервисы-заглушки: webhook.site или putsreq.
3. Технологический стек
| Компонент | Инструменты | Назначение |
|---|---|---|
| Вычисление faithfulness | RAGAS (Faithfulness) + Python | Расчёт метрики по парам (вопрос, ответ, контекст) |
| Хранилище метрик | Prometheus (Pushgateway для push-модели) | Сбор и хранение временного ряда faithfulness |
| Правила алертинга | Prometheus rules (YAML) | Определение условия faithfulness < 0.8 |
| Alertmanager | Alertmanager API | Маршрутизация и отправка уведомлений |
| Уведомления | PagerDuty (Integration → Webhook), либо эмуляция HTTP-сервером | Доставка сигнала ответственному инженеру |
| Оркестрация | cron / systemd timer / Kubernetes CronJob (опционально) | Периодический запуск пайплайна сбора faithfulness |
4. Этапы выполнения
Этап 1: Подготовка данных и расчёт faithfulness (1 час)
Действия
-
Подготовить тестовые данные Создайте файл
test_data.jsonlс полями:question— вопрос пользователяanswer— ответ RAG-системыcontexts— список чанков, использованных для генерации ответаground_truth(опционально) — эталонный ответ
Пример:
{"question": "Столица Франции?", "answer": "Париж — столица Франции.", "contexts": ["Париж находится во Франции и является её столицей."]} -
**Написать скрипт
compute_faithfulness.py, который загружает данные, вызываетragas.metrics.Faithfulnessи сохраняет результат (например, среднее значение).from datasets import Dataset from ragas import evaluate from ragas.metrics import faithfulness dataset = Dataset.from_json("test_data.jsonl") result = evaluate(dataset, metrics=[faithfulness]) avg_faithfulness = result["faithfulness"].mean() print(avg_faithfulness) -
Отработать скрипт вручную, убедиться, что значение faithfulness в диапазоне 0–1.
Ожидаемый результат этапа Рабочий Python-скрипт, который возвращает численное значение faithfulness.
Этап 2: Настройка сбора метрик в Prometheus (1–1.5 часа)
Действия
-
Развернуть Prometheus + Pushgateway + Alertmanager через Docker Compose. Пример
docker-compose.yml:version: '3.8' services: prometheus: image: prom/prometheus:latest volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml - ./alert.rules.yml:/etc/prometheus/alert.rules.yml ports: - "9090:9090" pushgateway: image: prom/pushgateway:latest ports: - "9091:9091" alertmanager: image: prom/alertmanager:latest volumes: - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml ports: - "9093:9093" -
Создать
prometheus.yml: добавить job для Pushgateway:scrape_configs: - job_name: 'pushgateway' static_configs: - targets: ['pushgateway:9091'] -
Дополнить скрипт отправки метрики в Pushgateway (используйте
prometheus_client):from prometheus_client import CollectorRegistry, Gauge, push_to_gateway registry = CollectorRegistry() g = Gauge('rag_faithfulness', 'Faithfulness score', registry=registry) avg_faithfulness = compute() # вызов вашего расчёта g.set(avg_faithfulness) push_to_gateway('localhost:9091', job='rag', registry=registry) -
Запустить скрипт вручную и проверить, что метрика
rag_faithfulnessпоявилась в Prometheus (http://localhost:9090/graph).
Ожидаемый результат этапа Метрика faithfulness поступает в Prometheus и видна на дашборде.
Этап 3: Конфигурация алертов в Prometheus/Alertmanager (1 час)
Действия
-
Создать файл правил
alert.rules.yml:groups: - name: faithfulness rules: - alert: LowFaithfulness expr: rag_faithfulness < 0.8 for: 30s labels: severity: critical annotations: summary: "Faithfulness dropped below 0.8" description: "Current value: {{ $value }}"Значение
for: 30s— задержка перед алертом, чтобы избежать ложных срабатываний. -
Настроить
alertmanager.ymlдля отправки в PagerDuty (или эмуляцию): -
Перезапустить стеки Docker Compose и проверить, что Alertmanager загружает конфигурации.
-
Протестировать правило — временно уменьшить порог в скрипте (например, имитировать падение). Отправить метрику с низким значением и проверить, что алерт переходит в состояние
PENDING, затемFIRING.
Ожидаемый результат этапа При значении faithfulness < 0.8 в течение 30 секунд алерт переходит в FIRING.
Этап 4: Интеграция с PagerDuty / эмуляция уведомлений (45 минут)
Действия
-
Создать сервер-заглушку для эмуляции (если нет PagerDuty):
from flask import Flask, request app = Flask(__name__) @app.route('/alert', methods=['POST']) def handle_alert(): data = request.json with open('alerts.log', 'a') as f: f.write(str(data) + '\n') print("Alert received:", data) return '', 200 if __name__ == '__main__': app.run(port=5000) -
Убедиться, что Alertmanager отправляет вебхук — проверить логи
alertmanager.log(см.docker logs alertmanager). -
Измерить задержку: засечь время изменения метрики до момента получения уведомления. Для точности:
- Добавить штамп времени в заглушку.
- Использовать
time.time()при отправке метрики и при приёме. - Разница должна быть < 60 секунд.
-
Настроить периодический запуск скрипта (каждые 30 секунд) через cron (
*/1 * * * * python compute_faithfulness.py). Это даст почти непрерывный мониторинг.
Ожидаемый результат этапа Уведомление приходит на заданный endpoint не позднее чем через 1 минуту после падения faithfulness.
Этап 5: Тестирование и документирование (30 минут)
Действия
- Написать скрипт для симуляции падения faithfulness (занизить значения в тестовых данных).
- Запустить сценарий сначала нормальное значение, затем падение, затем восстановление.
- Проверить все стадии алерта inactive → pending → firing → resolved (когда значение поднимется выше 0.8).
- Зафиксировать конфигурационные файлы (
prometheus.yml,alert.rules.yml,alertmanager.yml,docker-compose.yml,compute_faithfulness.py, заглушка) в отдельной папкеmonitoring/. - Написать короткий README с описанием архитектуры и инструкцией по запуску.
Ожидаемый результат этапа Воспроизводимый сценарий и полная документация для команды.
5. Критерии приемки (Definition of Done)
- Метрика faithfulness вычисляется и отправляется в Prometheus с периодичностью не реже 1 раза в минуту.
- Правило в Prometheus срабатывает при faithfulness < 0.8 (после задержки
for: 30s). - Alertmanager получает алерт и отправляет уведомление на PagerDuty (или эмуляцию).
- Время от падения метрики до получения уведомления не превышает 1 минуты.
- При восстановлении метрики выше 0.8 алерт автоматически переходит в
resolved. - Все конфигурационные файлы сохранены и задокументированы.
- README содержит инструкцию по запуску стека мониторинга и скрипта сбора метрик.
6. Ожидаемый результат
Итоговый артефакт — папка monitoring/ с содержимым:
monitoring/
├── docker-compose.yml # стек Prometheus + Pushgateway + Alertmanager
├── prometheus.yml # конфигурация scrap
├── alert.rules.yml # правило LowFaithfulness
├── alertmanager.yml # конфигурация receiver
├── compute_faithfulness.py # скрипт расчёта и отправки метрики
├── webhook_receiver.py # эмуляция PagerDuty (или ссылка на аккаунт)
├── test_data.jsonl # тестовый набор данных
├── alerts.log # логи срабатываний (при эмуляции)
└── README.md # описание и инструкция
Опциональный дополнительный результат Дашборд в Grafana с графиком faithfulness и статусом алерта.
7. Возможные сложности и их решение
| Сложность | Решение |
|---|---|
| Pushgateway может «зависать» с устаревшими данными | Используйте push_to_gateway с параметром job; настраивайте TTL для метрик. Или перейдите на pull-модель с экспортёром (например, Prometheus Python exporter как отдельный сервис). |
| Задержка из-за периодического сбора (каждые N секунд) | Сделать интервал сбора меньше 60 секунд (например, 10 с). Уменьшить for до 10 с. |
| Нет доступа к PagerDuty | Используйте эмуляцию через webhook (Flask) и логируйте в Slack/Telegram через webhook. |
| Faithfulness может быть недоступен в реальном времени (требует ground truth) | Используйте proxy‑метрику, например, confidence score из LLM или entailment score от специального классификатора. Либо рассчитывайте faithfulness на исторических данных с задержкой, а алерт — по тренду. |
| Prometheus не видит Pushgateway | Проверьте сеть в Docker Compose: все сервисы должны быть в одной сети. Используйте depends_on. |
8. Бюджет времени (оценка)
| Этап | Время |
|---|---|
| Этап 1: Подготовка данных и расчёт faithfulness | 1 час |
| Этап 2: Настройка сбора метрик в Prometheus | 1–1.5 часа |
| Этап 3: Конфигурация алертов | 1 час |
| Этап 4: Интеграция с PagerDuty / эмуляция | 45 минут |
| Этап 5: Тестирование и документирование | 30 минут |
| Итого | 4–4.5 часа |
Примечание Для первого раза заложите +1 час на отладку Docker и конфигураций.
9. Связанные вопросы из базы знаний
| Вопрос | Тема |
|---|---|
| 14 | Как настроить алертинг в Prometheus? |
| 37 | Что такое faithfulness и как его измерять? |
| 42 | Как интегрировать PagerDuty с Alertmanager? |
| 58 | Как использовать Pushgateway в Prometheus? |
| 63 | RAGAS: метрики faithfulness и answer relevancy |
| 87 | Настройка Alertmanager для отправки в Slack |
| 112 | Как симулировать инцидент для тестирования алертов? |
| 144 | Docker Compose для инфраструктуры мониторинга |
| 201 | Мониторинг RAG-систем: ключевые метрики |
| 238 | Периодический сбор метрик с cron в Prometheus |
10. Чек-лист самопроверки
- Я написал скрипт, который рассчитывает faithfulness и отправляет метрику в Pushgateway.
- Я развернул Docker Compose с Prometheus, Pushgateway и Alertmanager.
- Я создал правило алертинга и проверил, что оно срабатывает при значении < 0.8.
- Я настроил получатель уведомлений (PagerDuty или эмуляцию) и получил тестовое уведомление.
- Я измерил время от падения метрики до прихода уведомления — оно менее 60 секунд.
- Я зафиксировал все конфигурационные файлы и написал README.