Почему стандартные промты проваливаются
Большинство пользователей пишут: «Сделай прогноз на тотал矣 матч X против Y». ИИ отвечает обобщением из обучающей выборки: средние значения, репутация команд, последние 5 матчей. Это не анализ — это шум.
Проблема в трёх вещах:
- Отсутствие контекста темпа. Тотал — это функция попаданий в единицу времени. Без скорости игры прогноз равен гаданию.
- Игнорирование распределения. Среднее 210.5 не значит, что игра закончится 105:105. Важен спред, скошенность, хвосты распределения.
- Нет инструкции по расчёту. ИИ не знает, какой метод вы хотите: пуассон, Монте-Карло, эло с поправкой на темп. Он выберет самый простой — и ошибется.
Работающий промт — это не вопрос. Это техническое задание с жёсткой структурой входных данных, методом расчёта и форматом выхода.
Анатомия рабочего промта: 5 блоков, которые решают исход
Шаблон №1: Прематч — полный цикл
Для игры, которая стартует через 2+ часа. Есть время собрать чистые данные, запустить симуляцию, сравнить с линией букмекера.
# ROLE
Ты — квантовый аналитик NBA/Евролиги. Твоя задача: спроецировать тотал очков с погрешностью ≤ 3.5 очков.
# INPUT DATA (заполни перед запуском)
TEAM_A: {name, pace, home_away, efg_overall, efg_home, efg_away, efg_vs_top10D, efg_vs_bot10D,
ortg, drtg, tov_pct, oreb_pct, ftrate,
rest_days, b2b, tz_travel, key_players_status, star_min_last3}
TEAM_B: {аналогично}
H2H_LAST_3: [{date, total, pace, winner, key_absences}]
MARKET_LINE: {total, over_odds, under_odds, book_margin_pct}
# METHOD
1. Рассчитай expected_pace = harmonic_mean(TEAM_A.pace, TEAM_B.pace) * home_court_adj
2. Рассчитай expected_efg_A = TEAM_A.efg_vs_def_tier(TEAM_B.drtg_tier) * rest_adj * load_adj
3. Рассчитай expected_efg_B = аналогично
4. projected_ortg_A = expected_efg_A * 2 * (1 — TOV%) + OREB% * 0.8 + FTrate * 0.45
5. projected_total = expected_pace * (projected_ortg_A + projected_ortg_B) / 100
6. Monte Carlo 10k симуляций: пуассон(possessions) * нормальное(ortg, σ=ortg*0.08)
7. Извлеки процентили 5/50/95, EV vs маркет, ключевые драйверы разницы
# OUTPUT FORMAT (строгий JSON)
{
«projected_total»: 218.4,
«ci_90»: [211.2, 225.7],
«p_over»: {«218.5»: 0.487, «219.5»: 0.432},
«p_under»: {«218.5»: 0.513, «219.5»: 0.568},
«ev_over»: {«218.5»: -0.021},
«ev_under»: {«218.5»: 0.034},
«key_drivers»: [«TEAM_A pace +4.2 vs season», «TEAM_B star questionable»],
«recommendation»: «UNDER 218.5 @ 1.91 (EV +3.4%)»
}
Шаблон №2: Лайв — квартал за кварталом
Работает на перерывах. Вводите актуальные статы текущей игры, ИИ пересчитывает проекцию на оставшееся время.
# ROLE
Лайв-моделер. Пересчёт тотала на лету с обновлением каждые 2-3 мин.
# LIVE INPUT
CURRENT: {quarter, time_remaining, score_A, score_B,
pace_current_A, pace_current_B,
efg_current_A, efg_current_B,
tov_pct_current, oreb_pct_current,
fouls_team_A, fouls_team_B,
key_players_on_floor_A, key_players_on_floor_B,
momentum_indicator: «A_run» | «B_run» | «neutral