Коротко
Автор создал Full Court Press — автоматически публикуемый фанатский зин по каждому матчу WNBA, где статистику считает код, а ИИ отвечает только за подачу. Проверки сокращают ошибки, но не гарантируют смысловую точность; если ИИ-текст не проходит проверку, сайт публикует честный, хотя и сухой, вариант, составленный кодом.
Контекст
Автор — сотрудник органов судебной системы Калифорнии, который сам не пишет код, а направляет ИИ-агентов, проверяет результат и принимает решения. Он хотел получать на следующее утро отдельный фанатский выпуск по каждой команде WNBA, а не только стандартный итог матча; проект Full Court Press работает как неофициальный зин и публикуется на AWS.
Главное
- Full Court Press — зин по каждой команде в каждом завершённом матче WNBA; публикация выходит утром после игрового дня.
- У выпуска две манеры подачи: The Call — тёплый радиокомментарий, Film Room — разбор тактики; также есть десятисекундное аудио, карточка для публикации, печатная раскладка из восьми панелей и архив.
- BALLDONTLIE ALL-STAR предоставляет play-by-play, но не WNBA box scores; статистику очков, подборов, передач, перехватов и блок-шотов проект считает сам.
- Если подсчитанные очки не совпадают с финальным счётом, проект отбрасывает все производные показатели матча; другие категории проходят отдельные проверки.
- Текст генерирует Claude Haiku 4.5 на Amazon Bedrock; проверка разрешает только фактические числа и имена из конкретного матча, блокирует написанные словами числа и неподтверждённые темы.
- В тестах фильтр пропустил фразу о победе Atlanta в четвёртой четверти, хотя Indiana выиграла её 17:9; после этого в лист фактов добавили сформулированные кодом сведения о четвертях, перерыве, рывках и лидерах.
- После ужесточения правил обзоры исчезли на 20 из 56 страниц; резервный обзор теперь автоматически собирается кодом и помечается как текст без ИИ.
- Инфраструктура: один AWS SAM stack; EventBridge Scheduler запускает Lambda на Python 3.13 в 6:15 утра Pacific; сайт — статический, хранится в приватном S3 и отдаётся через CloudFront.
- Аудио создаёт Amazon Polly, только neural engine; скрипт для озвучивания формирует код, а не языковая модель.
- Пять неизменяемых тестовых матчей составляют golden set; среди них Indiana—Atlanta с овертаймом, завершившийся 95:91. Агент Kiro занимался AWS, Claude — локальной логикой, шаблонами, тестами и дизайном.
Как сделано
Данные о матчах берутся у BALLDONTLIE: тариф ALL-STAR не включает боксы WNBA, поэтому очки, подборы, передачи, перехваты и блок-шоты восстанавливаются из play-by-play. Сумма очков сверяется с независимой записью финального счёта; при расхождении производная статистика отбрасывается. Для остальных категорий действуют отдельные проверки, например передачи не могут превышать число попаданий.
Claude Haiku 4.5 через Amazon Bedrock пишет заголовок, обзор, заметку об игроке и раздел The Number. «Замок фактов» сверяет числа и имена с листом фактов, запрещает написанные словами числа и неподтверждённые темы вроде травм, слухов и ставок; провалившийся раздел получает одну попытку исправления, затем удаляется. Чтобы избежать неверных выводов из верных чисел, код заранее формирует фактические фразы о четвертях, рывках, счёте и лидерстве, которые модель должна цитировать.
Если обзор ИИ удалён, код собирает простой рассказ из проверенных фактов и явно маркирует его как написанный кодом без ИИ. Сайт состоит из статических файлов в S3 за CloudFront. Один SAM-стек запускает Lambda на Python 3.13 по расписанию EventBridge в 6:15 утра по тихоокеанскому времени; аудио делает Amazon Polly с нейронным движком по скрипту, собранному кодом. Используются SSM Parameter Store SecureString, CloudWatch и бюджеты AWS ($10 для проекта и $2 для Polly).
Результаты
На пяти тестовых матчах очки сошлись с финальным счётом во всех случаях, включая овертайм; три строки статистики автор вручную сверил с Basketball Reference, и все совпали. Первая проверка текста выявила 9 не прошедших проверку разделов, а ручной аудит нашёл ещё 7 неверных, которые прошли фильтр из-за правильных чисел. На 14 живых матчах проверили 151 сохранённый раздел: в 13 были ложные утверждения; новые правила поймали 6 из них. После ужесточения фильтров обзоры пропали на 20 из 56 страниц, поэтому добавили кодовые версии: в итоге у всех 56 страниц есть рассказ — 36 написаны ИИ, 20 кодом, пустых страниц нет. После отъезда автора расписание три ночи работало без вмешательства и опубликовало выпуски по восьми матчам.
Ограничения
Используется один поставщик данных; независимая ручная проверка ограничилась очками в трёх статистических строках. Фильтр подтверждает происхождение чисел и имён, но не правильность их интерпретации: после доработок 7 из 13 ошибок на 14 матчах остались незамеченными. Кодовый рассказ проще и звучит как сводка статистики, а не полноценная журналистская история; он снижает, но не исключает вероятность неверных утверждений. Проект охватывает WNBA, а NBA пока лишь обозначена как будущая возможность. У тестового «золотого набора» нет аудио; аудитория проекта ещё не появилась. Автор также предупреждает, что описанные инструменты быстро меняются.
Что взять себе
- Критические числа лучше вычислять обычным кодом из первичных событий, а не просить языковую модель считать их по ходу текста.
- Проверка того, что числа и имена существуют в данных, не доказывает правильность утверждения; смысловые выводы нужно либо отдельно тестировать, либо строить из заранее вычисленных фактов.
- Строгий фильтр может испортить полноту продукта, удаляя слишком много текста; заранее предусмотренный и честно обозначенный запасной вариант лучше пустой страницы.
- Сохраняйте репрезентативный тестовый набор и повторно проверяйте уже опубликованные материалы при изменении правил.
- Логи и результаты, сохранённые в файле, надёжнее краткого вывода агента: в описанном случае сводка не заметила овертайм, который был в полном файле.
Читать оригинал, если…
Откройте оригинал, если нужны исходный код, журнал сборки, конфигурация AWS, примеры выпусков и подробности аудита ошибок.