AI-промпты для аналитиков

Готовые промпты для анализа данных, SQL-запросов, дашбордов, визуализации и отчётов. Копируйте и используйте.

Языковые модели превращают рутину аналитика в задачу на пару минут: написать SQL-запрос, разобраться в метриках, собрать отчёт для руководства. Но чтобы получить не «примерно похожее», а точный и полезный ответ, нужно правильно сформулировать промпт.

В этом гайде — готовые промпты для шести ключевых задач аналитика: от интерпретации метрик до подготовки отчётов для стейкхолдеров. Каждый промпт можно скопировать и адаптировать под свои данные.

Каждый промпт — это шаблон. Замените части в квадратных скобках [...] на свои данные. Промпты работают с любой современной моделью: Claude, ChatGPT, GigaChat, Gemini. Переключайте глубину ниже: «Коротко» — быстрый старт, «Подробно» — все задачи с примерами, «Для разработчика» — автоматизация через API.

Суть в двух словах

AI-модели помогают аналитикам на каждом этапе работы с данными: написать и оптимизировать SQL, объяснить скачок метрики, подобрать формулу для Google Sheets, спроектировать дашборд, проверить статистическую значимость A/B-теста и подготовить отчёт для руководства. Главное — дать модели максимум контекста: структуру таблиц, конкретные числа, бизнес-задачу.

Ниже — 10 готовых промптов, которые закрывают основные задачи аналитика.

ПромптClaude
Я аналитик продукта. Конверсия из регистрации в первую покупку упала с 12% до 8% за последний месяц. Других изменений в продукте не было. Трафик вырос на 30% из-за рекламной кампании в VK.

Предложи 5 гипотез, почему конверсия упала, и для каждой — какие данные проверить и какой SQL-запрос написать.
Ответ модели

Гипотеза 1: Изменение качества трафика Рекламная кампания привлекла менее целевую аудиторию. Общий объём регистраций вырос, но доля «горячих» пользователей снизилась. Проверка: сравнить конверсию по источникам трафика.

SELECT
  utm_source,
  COUNT(DISTINCT user_id) AS registrations,
  COUNT(DISTINCT CASE WHEN first_purchase_at IS NOT NULL THEN user_id END) AS buyers,
  ROUND(100.0 * COUNT(DISTINCT CASE WHEN first_purchase_at IS NOT NULL THEN user_id END)
    / NULLIF(COUNT(DISTINCT user_id), 0), 1) AS conversion_pct
FROM users
WHERE registered_at >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY utm_source
ORDER BY registrations DESC;

Гипотеза 2: Поломка в воронке онбординга Могла сломаться страница или шаг после регистрации. Проверка: построить воронку по шагам от регистрации до покупки, сравнить с предыдущим периодом.

Гипотеза 3: Сезонность Естественное сезонное снижение покупательской активности. Проверка: сравнить с аналогичным периодом прошлого года.

Гипотеза 4: Изменение ассортимента или цен Товары, которые привлекают новичков, могли закончиться или подорожать. Проверка: конверсия по категориям товаров первой покупки.

Гипотеза 5: Техническая проблема с оплатой Ошибки на этапе оплаты у определённых способов или устройств. Проверка: процент ошибок оплаты по дням и типам устройств.

1. Анализ данных и интерпретация метрик

Интерпретация метрик (metrics interpretation) — умение объяснить, почему показатель изменился и что с этим делать. AI помогает быстро сформулировать гипотезы и план проверки.

Всегда указывайте в промпте конкретные числа и контекст бизнеса. Вместо «конверсия упала» пишите «конверсия упала с 12% до 8% за март, при росте трафика на 30% из VK Ads». Чем точнее вводные, тем полезнее ответ.
ПромптClaude
Ты — старший аналитик данных. Проанализируй следующие метрики e-commerce за февраль 2026:

| Метрика | Январь | Февраль | Изменение |
|---------|--------|---------|----------|
| MAU | 120 000 | 145 000 | +20.8% |
| Заказы | 18 000 | 17 200 | -4.4% |
| Средний чек | 3 200 ₽ | 2 850 ₽ | -10.9% |
| Выручка | 57.6 млн ₽ | 49.0 млн ₽ | -14.9% |
| CAC | 320 ₽ | 280 ₽ | -12.5% |
| Retention D30 | 28% | 22% | -6 п.п. |

Контекст: запустили рекламу в VK и Telegram Ads, вышли на новый регион (Сибирь).

Для каждой метрики:
1. Объясни, хорошее это изменение или тревожное
2. Назови наиболее вероятную причину
3. Предложи действие
Ответ модели

Анализ метрик за февраль 2026

MAU +20.8% — рост. Положительно, но важно понять качество новых пользователей.

  • Причина: рекламные кампании VK + Telegram Ads + новый регион.
  • Действие: сегментировать MAU по источнику и проверить, какая доля доходит до заказа.

Заказы -4.4% — тревожный сигнал на фоне роста аудитории.

  • Причина: новые пользователи из рекламы пока не конвертируются; возможно, ассортимент не адаптирован под Сибирь.
  • Действие: рассчитать конверсию в заказ отдельно для старых и новых пользователей.

Средний чек -10.9% — тревожно.

  • Причина: новая аудитория из VK Ads, вероятно, чувствительнее к цене; возможно, промо-скидки.
  • Действие: проверить распределение чека по когортам (старые vs новые).

Выручка -14.9% — критично, требует немедленного внимания.

  • Причина: сочетание падения числа заказов и среднего чека.
  • Действие: декомпозировать выручку = заказы x средний чек и найти, какой фактор влияет сильнее.

CAC -12.5% — положительно, но с оговоркой.

  • Причина: дешёвый трафик из VK и нового региона.
  • Действие: рассчитать ROI по каналам — дешёвый трафик не равен качественному.

Retention D30 -6 п.п. — самая тревожная метрика.

  • Причина: новые пользователи удерживаются хуже; возможно, ожидания после рекламы не совпадают с продуктом.
  • Действие: построить retention-кривые отдельно для органических и рекламных пользователей.
Модель не имеет доступа к вашим данным — она работает с тем, что вы ей дали. Если вы не указали, что в феврале были праздники или технические сбои, модель не сможет это учесть. Проверяйте гипотезы на реальных данных.

2. SQL-запросы: генерация и оптимизация

SQL — основной инструмент аналитика. AI помогает не только писать запросы с нуля, но и оптимизировать медленные, объяснять чужие и находить ошибки.

Всегда описывайте структуру таблиц (DDL или хотя бы названия колонок с типами). Без схемы модель придумает названия полей, которые не совпадут с вашими.
ПромптClaude
Напиши SQL-запрос для PostgreSQL. Задача: рассчитать retention по когортам.

Структура таблиц:
```sql
-- users
CREATE TABLE users (
  user_id BIGINT PRIMARY KEY,
  registered_at TIMESTAMP,
  utm_source VARCHAR(100),
  region VARCHAR(50)
);

-- events
CREATE TABLE events (
  event_id BIGINT PRIMARY KEY,
  user_id BIGINT REFERENCES users(user_id),
  event_type VARCHAR(50), -- 'page_view', 'purchase', 'add_to_cart'
  created_at TIMESTAMP
);
```

Требования:
1. Когорта = неделя регистрации
2. Retention = доля пользователей, вернувшихся через N дней (0, 7, 14, 30)
3. Только когорты за последние 8 недель
4. Результат в формате pivot-таблицы
Ответ модели
WITH cohorts AS (
  SELECT
    user_id,
    DATE_TRUNC('week', registered_at)::date AS cohort_week
  FROM users
  WHERE registered_at >= CURRENT_DATE - INTERVAL '8 weeks'
),
user_activity AS (
  SELECT DISTINCT
    c.user_id,
    c.cohort_week,
    (e.created_at::date - c.cohort_week) AS days_since_reg
  FROM cohorts c
  JOIN events e ON e.user_id = c.user_id
),
cohort_size AS (
  SELECT cohort_week, COUNT(DISTINCT user_id) AS users_total
  FROM cohorts
  GROUP BY cohort_week
),
retention AS (
  SELECT
    ua.cohort_week,
    cs.users_total,
    COUNT(DISTINCT CASE WHEN days_since_reg BETWEEN 0 AND 0 THEN ua.user_id END) AS day_0,
    COUNT(DISTINCT CASE WHEN days_since_reg BETWEEN 7 AND 13 THEN ua.user_id END) AS day_7,
    COUNT(DISTINCT CASE WHEN days_since_reg BETWEEN 14 AND 20 THEN ua.user_id END) AS day_14,
    COUNT(DISTINCT CASE WHEN days_since_reg BETWEEN 30 AND 36 THEN ua.user_id END) AS day_30
  FROM user_activity ua
  JOIN cohort_size cs USING (cohort_week)
  GROUP BY ua.cohort_week, cs.users_total
)
SELECT
  cohort_week,
  users_total,
  ROUND(100.0 * day_0 / users_total, 1) AS ret_day_0,
  ROUND(100.0 * day_7 / users_total, 1) AS ret_day_7,
  ROUND(100.0 * day_14 / users_total, 1) AS ret_day_14,
  ROUND(100.0 * day_30 / users_total, 1) AS ret_day_30
FROM retention
ORDER BY cohort_week;

Запрос выведет таблицу вида:

cohort_week users_total ret_day_0 ret_day_7 ret_day_14 ret_day_30
2025-12-30 1 240 100.0 34.2 21.5 15.8

Оптимизация медленных запросов

ПромптChatGPT
Оптимизируй этот SQL-запрос для PostgreSQL. Сейчас выполняется 45 секунд на таблице events с 80 млн строк.

```sql
SELECT
  DATE(created_at) AS day,
  COUNT(*) AS events_count,
  COUNT(DISTINCT user_id) AS unique_users
FROM events
WHERE event_type = 'purchase'
  AND created_at >= '2026-01-01'
  AND created_at < '2026-02-01'
GROUP BY DATE(created_at)
ORDER BY day;
```

Индексы:
- PRIMARY KEY (event_id)
- INDEX idx_events_user (user_id)

Объясни, почему он медленный, и предложи оптимизацию (индексы, переписывание запроса).
Ответ модели

Почему запрос медленный

  1. Нет подходящего индекса. Запрос фильтрует по event_type и created_at, но индекс по этим полям отсутствует. PostgreSQL делает Seq Scan по 80 млн строк.
  2. DATE(created_at) — функция в GROUP BY не позволяет использовать индекс для группировки.

Решение

Шаг 1. Создать составной индекс:

CREATE INDEX idx_events_type_created
ON events (event_type, created_at)
INCLUDE (user_id);

INDEX покроет все поля запроса (covering index), PostgreSQL обойдётся Index Only Scan.

Шаг 2. Переписать запрос с created_at::date:

SELECT
  created_at::date AS day,
  COUNT(*) AS events_count,
  COUNT(DISTINCT user_id) AS unique_users
FROM events
WHERE event_type = 'purchase'
  AND created_at >= '2026-01-01'
  AND created_at < '2026-02-01'
GROUP BY created_at::date
ORDER BY day;

Ожидаемый результат: с covering index запрос должен выполняться за 1-3 секунды вместо 45.

AI-модели не видят EXPLAIN-план, статистику таблиц и реальное распределение данных. Всегда проверяйте предложенные индексы через EXPLAIN ANALYZE на тестовой базе перед созданием на продакшене.

3. Дашборды и визуализация данных

Проектирование дашборда (dashboard) — это не просто «вывести графики». Нужно выбрать правильные метрики, тип визуализации и логику расположения.

ПромптClaude
Спроектируй дашборд для руководителя e-commerce-отдела. Контекст:
- Магазин электроники, 50k заказов/мес
- Инструмент: Metabase (или DataLens / Redash)
- Обновление: ежедневно
- Аудитория: директор по e-commerce, смотрит дашборд 1 раз в день утром

Для каждого блока укажи:
1. Название
2. Тип визуализации (число, линия, бар, таблица, пай)
3. Какие метрики
4. SQL-запрос для источника данных
5. На что обращать внимание (алерты)
Ответ модели

E-commerce Executive Dashboard

Блок 1: Ключевые показатели (верхняя полоса)

Тип: 4 карточки с числом + тренд за неделю

Карточка Метрика Алерт
Выручка сегодня SUM(amount) за сегодня < 80% от среднего за 7 дней
Заказы сегодня COUNT(orders) < 80% от среднего
Средний чек AVG(amount) Падение > 15%
Конверсия в покупку orders / sessions Падение > 2 п.п.
SELECT
  SUM(amount) AS revenue_today,
  COUNT(*) AS orders_today,
  ROUND(AVG(amount), 0) AS avg_check
FROM orders
WHERE created_at::date = CURRENT_DATE;

Блок 2: Динамика выручки (центр)

Тип: линейный график, 30 дней, с отметкой плана

  • Ось X: дата
  • Ось Y: выручка
  • Линия плана пунктиром
  • Алерт: 3 дня подряд ниже плана

Блок 3: Топ-категории (левый столбец)

Тип: горизонтальная гистограмма

  • Топ-10 категорий по выручке
  • Цвет: зелёный если рост WoW, красный если падение

Блок 4: Воронка (правый столбец)

Тип: воронка или горизонтальный бар

  • Визиты → Просмотр товара → Корзина → Заказ → Оплата
  • Показывать конверсию на каждом шаге

Блок 5: Проблемы (нижняя часть)

Тип: таблица

  • Товары с высоким отказом в корзине (добавили, но не купили)
  • Категории с падением выручки > 20% WoW

Принципы расположения:

  • Глаз движется Z-образно: ключевые числа наверху, динамика в центре, детали внизу
  • Не больше 7 блоков — руководитель тратит 2 минуты
  • Каждый блок отвечает на один вопрос
AI может предложить идеальную структуру дашборда, но не знает вашу реальную базу данных. Названия таблиц и полей в SQL нужно адаптировать. Также модель не знает возможностей конкретной BI-системы — проверяйте, поддерживает ли ваш инструмент предложенные типы визуализаций.

4. Работа с Excel / Google Sheets

Формулы в таблицах — ежедневная задача аналитика. AI помогает составить сложную формулу, объяснить чужую или переписать VBA-макрос.

ПромптChatGPT
Напиши формулу Google Sheets. Задача:

В столбце A — даты заказов (A2:A5000)
В столбце B — суммы заказов (B2:B5000)
В столбце C — категории товаров (C2:C5000)
В столбце D — регион (D2:D5000)

Нужно: рассчитать среднедневную выручку по категории «Электроника» в регионе «Москва» за последние 30 дней.

Требования:
- Одна формула, без вспомогательных столбцов
- Должна работать при добавлении новых строк
- Объясни, как формула работает
Ответ модели
=SUMPRODUCT(
  (C2:C5000="Электроника")*
  (D2:D5000="Москва")*
  (A2:A5000>=TODAY()-30)*
  (A2:A5000<=TODAY())*
  B2:B5000
) / MAX(1, SUMPRODUCT(
  (C2:C5000="Электроника")*
  (D2:D5000="Москва")*
  (A2:A5000>=TODAY()-30)*
  (A2:A5000<=TODAY())*
  (1/COUNTIFS(
    A2:A5000, A2:A5000,
    C2:C5000, "Электроника",
    D2:D5000, "Москва"
  ))
))

Упрощённый вариант (если достаточно разделить на 30 дней):

=SUMPRODUCTS(
  (C2:C5000="Электроника")*
  (D2:D5000="Москва")*
  (A2:A5000>=TODAY()-30)*
  B2:B5000
) / 30

Как работает:

  1. SUMPRODUCT перемножает массивы условий — каждая строка получает 1 (проходит) или 0 (не проходит)
  2. Результат умножается на сумму заказа из столбца B
  3. Делим на 30 дней (упрощённый) или на количество уникальных дней (точный вариант)

Совет: для больших таблиц (> 10 000 строк) лучше использовать FILTER + UNIQUE:

=LET(
  filtered, FILTER(B2:B5000,
    (C2:C5000="Электроника")*
    (D2:D5000="Москва")*
    (A2:A5000>=TODAY()-30)),
  SUM(filtered) / 30
)
Модель может предложить формулу, которая синтаксически правильна, но не учитывает особенности ваших данных: пустые ячейки, текст вместо чисел, другой формат дат. Всегда тестируйте формулу на нескольких строках перед применением ко всему диапазону.

5. Статистический анализ и A/B-тесты

A/B-тестирование (A/B testing) — сравнение двух вариантов для принятия решений на основе данных. AI помогает спланировать тест, рассчитать размер выборки и интерпретировать результаты.

Давайте модели сырые числа, а не только p-value. Укажите размеры групп, конверсии, средние значения и стандартные отклонения — тогда модель сможет проверить вашу статистику и предложить альтернативный анализ.
ПромптClaude
Проанализируй результаты A/B-теста. Контекст: тестировали новый дизайн страницы оформления заказа (checkout).

Результаты за 14 дней:

| Метрика | Контроль (A) | Тест (B) |
|---------|-------------|----------|
| Пользователи | 12 400 | 12 600 |
| Завершили заказ | 1 116 | 1 197 |
| Конверсия | 9.0% | 9.5% |
| Средний чек | 3 150 ₽ | 3 020 ₽ |
| Выручка на пользователя | 283.5 ₽ | 286.9 ₽ |

Вопросы:
1. Значим ли рост конверсии статистически? (уровень значимости 0.05)
2. Значимо ли падение среднего чека?
3. Какое решение принять: раскатывать или нет?
4. Нужно ли продлить тест?
Ответ модели

Статистический анализ

1. Конверсия: +0.5 п.п. (9.0% → 9.5%)

Z-тест для двух пропорций:

  • p_A = 0.090, p_B = 0.095
  • pooled_p = (1116 + 1197) / (12400 + 12600) = 0.0925
  • SE = sqrt(pooled_p * (1-pooled_p) * (1/12400 + 1/12600)) = 0.00367
  • Z = (0.095 - 0.090) / 0.00367 = 1.36
  • p-value = 0.087 → не значимо при alpha = 0.05

Рост конверсии пока статистически не значим. Мощность теста при текущем размере выборки для обнаружения эффекта +0.5 п.п. составляет около 55% — недостаточно.

2. Средний чек: -130 ₽ (3150 ₽ → 3020 ₽)

Без стандартных отклонений точный t-тест невозможен, но падение на 4.1% заслуживает внимания. Рекомендую проверить, не связано ли это с изменением ассортимента покупок в группе B.

3. Рекомендация

Не раскатывать. Выручка на пользователя почти одинакова (283.5 ₽ vs 286.9 ₽, разница +1.2%), при этом ни одна из метрик не достигла статистической значимости.

4. Продлить тест

Да. Для обнаружения эффекта +0.5 п.п. при alpha=0.05 и power=0.80 нужно ~32 000 пользователей на группу. При текущем темпе (12 500 за 14 дней) нужно ещё ~22 дня. Общая длительность теста: 5 недель.

AI-модели считают статистику приблизительно. Для критически важных решений (раскатка на миллионы пользователей) используйте Python (scipy.stats) или R для точных расчётов. Модель хороша для быстрой оценки и формулировки выводов, но не заменяет статистический калькулятор.

6. Подготовка отчётов для стейкхолдеров

Отчёт для стейкхолдеров (stakeholder report) — это не SQL-запрос, а история с выводами и рекомендациями. AI помогает превратить сырые данные в понятный нарратив.

ПромптClaude
Помоги подготовить еженедельный отчёт для CEO. Формат: 1 страница, читается за 2 минуты.

Сырые данные за неделю 17-23 февраля 2026:
- Выручка: 12.4 млн ₽ (план 14 млн, прошлая неделя 13.1 млн)
- Заказы: 4 200 (план 4 800, прошлая неделя 4 500)
- Средний чек: 2 952 ₽ (прошлая неделя 2 911 ₽)
- Новые пользователи: 8 300 (прошлая неделя 6 200)
- NPS: 42 (прошлый месяц 38)
- Время доставки среднее: 2.8 дня (SLA 3 дня, прошлая неделя 3.2 дня)
- Критический баг: корзина не работала на iOS 2 часа в среду

Структура отчёта:
1. Headline (одно предложение — ключевой вывод)
2. Ключевые метрики (таблица с цветами: зелёный/жёлтый/красный)
3. Что произошло (2-3 пункта)
4. Риски и действия (2-3 пункта)
5. Фокус на следующую неделю
Ответ модели

Еженедельный отчёт: 17-23 февраля 2026

Headline

Выручка -11% от плана из-за падения заказов; рост новых пользователей +34% WoW и улучшение NPS — позитивные сигналы.

Ключевые метрики

Метрика Факт План WoW Статус
Выручка 12.4 млн ₽ 14 млн ₽ -5.3% Красный
Заказы 4 200 4 800 -6.7% Красный
Средний чек 2 952 ₽ +1.4% Зелёный
Новые пользователи 8 300 +33.9% Зелёный
NPS 42 40 +4 п. Зелёный
Время доставки 2.8 дня 3 дня -0.4 дня Зелёный

Что произошло

  1. Баг корзины на iOS (среда, 2 часа простоя). Оценка потерь: ~280 заказов, ~800 тыс. ₽. Это объясняет примерно половину отставания от плана.
  2. Рост новых пользователей на 34% — эффект запущенной рекламной кампании. Конверсия в первую покупку у новых: 6.2% (ниже среднего 9%).
  3. NPS улучшился — связано с ускорением доставки (2.8 дня vs SLA 3 дня).

Риски и действия

  1. Риск: низкая конверсия новых пользователей. Действие: команда продукта анализирует онбординг, результат в четверг.
  2. Риск: отставание от плана выручки. Действие: запланировать промо-акцию на следующую неделю для компенсации.

Фокус следующей недели

  • Увеличить конверсию новых пользователей (таргет: 8%)
  • Мониторинг стабильности iOS-корзины
  • Запуск промо для возврата к плану
Модель может выстроить красивую логическую цепочку, но не знает внутренней политики вашей компании. Проверяйте, не предлагает ли AI рекомендации, которые невозможны в вашем контексте (бюджет, сроки, команда). Также перепроверяйте арифметику — модели иногда ошибаются в простых расчётах.

Автоматизация аналитических задач через API

В продакшен-сценариях промпты для аналитиков встраиваются в автоматизированные пайплайны: генерация еженедельных отчётов, мониторинг аномалий, автоматическая интерпретация метрик.

Системный промпт для аналитического агента

ПромптClaude (API)
Ты — аналитический AI-ассистент для e-commerce компании.

Правила:
1. Отвечай на русском языке
2. Все расчёты показывай с формулами
3. Для SQL-запросов используй PostgreSQL-синтаксис
4. Структура таблиц передаётся в контексте
5. При неоднозначности — задавай уточняющие вопросы
6. Формат ответа — JSON:
```json
{
  "summary": "Краткий вывод в 1-2 предложениях",
  "metrics": [{"name": "...", "value": ..., "status": "good|warning|critical"}],
  "insights": ["Инсайт 1", "Инсайт 2"],
  "sql_queries": [{"description": "...", "query": "..."}],
  "recommendations": ["Рекомендация 1", "Рекомендация 2"]
}
```
7. Если данных недостаточно для вывода, явно укажи это в summary
8. Не придумывай данные — работай только с тем, что получил
Ответ модели

Этот системный промпт задаёт роль, формат и ограничения для аналитического агента. Используется как system message в API-вызове.

Ключевые элементы:

  • Фиксированный JSON-формат для парсинга downstream-системами
  • Явный запрет на галлюцинации данных
  • Мультизадачность: метрики + SQL + рекомендации в одном ответе
  • Статусная модель (good/warning/critical) для алертов

Автоматическая генерация еженедельного отчёта (Python)

import anthropic
import json
from datetime import datetime, timedelta
import psycopg2

client = anthropic.Anthropic()

SYSTEM_PROMPT = """Ты — аналитический AI-ассистент. Формат ответа — JSON:
{
  "headline": "Ключевой вывод в одном предложении",
  "metrics": [
    {"name": "Выручка", "value": "12.4 млн ₽", "vs_plan": "-11%", "status": "critical"},
    ...
  ],
  "insights": ["Инсайт 1", "Инсайт 2", "Инсайт 3"],
  "risks": [{"risk": "описание", "action": "что делать"}],
  "focus_next_week": ["Пункт 1", "Пункт 2"]
}
Отвечай на русском. Не придумывай данные."""

def fetch_weekly_metrics(conn, week_start: str) -> dict:
    """Получение метрик за неделю из PostgreSQL."""
    queries = {
        "revenue": """
            SELECT SUM(amount) as revenue, COUNT(*) as orders,
                   ROUND(AVG(amount), 0) as avg_check
            FROM orders
            WHERE created_at >= %s AND created_at < %s::date + 7
        """,
        "users": """
            SELECT COUNT(DISTINCT user_id) as new_users
            FROM users
            WHERE registered_at >= %s AND registered_at < %s::date + 7
        """,
        "prev_week": """
            SELECT SUM(amount) as revenue, COUNT(*) as orders
            FROM orders
            WHERE created_at >= %s::date - 7 AND created_at < %s
        """,
    }
    metrics = {}
    with conn.cursor() as cur:
        for key, query in queries.items():
            cur.execute(query, (week_start, week_start))
            row = cur.fetchone()
            metrics[key] = row
    return metrics

def generate_weekly_report(metrics: dict, plan: dict) -> dict:
    """Генерация отчёта через Claude API."""
    user_message = f"""Подготовь еженедельный отчёт для CEO.

Данные за неделю:
- Выручка: {metrics['revenue'][0]:,.0f} ₽ (план: {plan['revenue']:,.0f} ₽)
- Заказы: {metrics['revenue'][1]} (план: {plan['orders']})
- Средний чек: {metrics['revenue'][2]:,.0f}- Новые пользователи: {metrics['users'][0]}
- Прошлая неделя: выручка {metrics['prev_week'][0]:,.0f} ₽, заказы {metrics['prev_week'][1]}
"""

    message = client.messages.create(
        model="claude-sonnet-4-20250514",
        max_tokens=2048,
        system=SYSTEM_PROMPT,
        messages=[{"role": "user", "content": user_message}],
    )

    return json.loads(message.content[0].text)


if __name__ == "__main__":
    conn = psycopg2.connect(dsn="postgresql://...")
    week_start = (datetime.now() - timedelta(days=7)).strftime("%Y-%m-%d")

    plan = {"revenue": 14_000_000, "orders": 4800}
    metrics = fetch_weekly_metrics(conn, week_start)
    report = generate_weekly_report(metrics, plan)

    # Отправка в Slack / email / Notion
    print(json.dumps(report, ensure_ascii=False, indent=2))

Мониторинг аномалий в метриках

import anthropic
import json

client = anthropic.Anthropic()

ANOMALY_SYSTEM = """Ты — система мониторинга аномалий.
На вход получаешь метрику с историческими данными.
Определи, есть ли аномалия, и если да — объясни возможную причину.

Формат ответа — JSON:
{
  "is_anomaly": true/false,
  "severity": "info|warning|critical",
  "description": "Что произошло",
  "possible_causes": ["Причина 1", "Причина 2"],
  "recommended_queries": ["SQL-запрос для проверки"]
}"""

def check_anomaly(metric_name: str, current: float, history: list[float]) -> dict:
    """Проверка метрики на аномалию через Claude."""
    avg = sum(history) / len(history)
    std = (sum((x - avg) ** 2 for x in history) / len(history)) ** 0.5

    message = client.messages.create(
        model="claude-sonnet-4-20250514",
        max_tokens=1024,
        system=ANOMALY_SYSTEM,
        messages=[{
            "role": "user",
            "content": f"""Метрика: {metric_name}
Текущее значение: {current}
Среднее за 30 дней: {avg:.1f}
Стандартное отклонение: {std:.1f}
Отклонение от среднего: {((current - avg) / avg * 100):.1f}%
Последние 7 дней: {history[-7:]}"""
        }],
    )

    return json.loads(message.content[0].text)

metrics_to_check = {
    "revenue": {"current": 1_200_000, "history": [1_800_000, 1_750_000, 1_900_000, 1_820_000, 1_780_000, 1_850_000, 1_800_000]},
    "orders": {"current": 420, "history": [580, 560, 610, 590, 570, 600, 585]},
    "error_rate": {"current": 5.2, "history": [1.1, 0.9, 1.3, 1.0, 1.2, 0.8, 1.1]},
}

for name, data in metrics_to_check.items():
    result = check_anomaly(name, data["current"], data["history"])
    if result["is_anomaly"]:
        print(f"ALERT [{result['severity']}]: {name}{result['description']}")

Паттерны интеграции

ПаттернОписаниеИнструменты
Scheduled reportsCron-задача генерирует отчёт и отправляет в SlackPython + Claude API + Slack webhook
Anomaly alertsМониторинг метрик каждый час, алерт при аномалииPython + Claude API + PagerDuty/Telegram
SQL-ассистентЧат-бот, который пишет SQL по описанию на русскомSlack Bot + Claude API + PostgreSQL
Dashboard narratorАвтоматическое описание дашборда для рассылкиMetabase API + Claude API + Email
Один еженедельный отчёт через Claude API: ~$0.02-0.05 (зависит от объёма данных). Мониторинг аномалий на 10 метрик ежечасно: ~$0.50/день. Это значительно дешевле часов аналитика на рутинные отчёты, но требует начальной настройки пайплайна.

Проверьте себя

Проверьте себя

1. Что обязательно нужно указать в промпте для генерации SQL-запроса?

2. Почему нельзя полностью доверять статистическим расчётам AI-модели?

3. Какой формат ответа лучше запрашивать для автоматизированных аналитических пайплайнов?