Я дал Jev, модели принятия решений на базе ИИ от TypeSafe, ракетку и разместил ее на одной из сторон корта для Понга. Его противник — это вы. Правила просты: удерживайте мяч в игре и наберите семь очков первыми.
Но Jev не следует традиционному игровому сценарию. Когда мяч пересекает корт, он должен снова и снова принимать решения: двигаться вверх, вниз или оставаться на месте. Когда он добирается до мяча, перед ним встает еще больше выбор: отбить безопасно, ускорить мяч, прицелиться выше или ниже, либо приберечь ускорение для следующего розыгрыша.
Эти мелкие решения повторяются на протяжении каждого матча. В совокупности они определяют, сможет ли Jev не отставать или вы его обыграете.
Вы управляете одной ракеткой. Jev управляет другой. Пока вы пытаетесь рассчитать траекторию мяча и предугадать следующий удар, Jev делает то же самое с помощью непрерывного потока структурированных решений.
JevPong позволяет сыграть против Jev и одновременно изучить решения, стоящие за его движениями и ударами.
Встречайте своего соперника
Jev — первая модель TypeSafe первого системного уровня (System One). В отличие от языковых моделей общего назначения, она не предназначена для генерации абзацев, написания кода или объяснения длинных цепочек рассуждений. Она создана для принятия быстрых, точных решений, которые программное обеспечение может использовать напрямую.
Вы передаете Jev текущее состояние, задаете ограниченный вопрос и возможные варианты ответов, а в ответ получаете типизированное решение с вероятностями и коэффициентом уверенности.
Это делает модель отличным выбором для такой игры, как Pong. Игре не нужно, чтобы Jev описывал, куда должна переместиться ракетка. Ему нужно, чтобы Jev выбрал одно из трех действий:
- Двигаться вверх
- Двигаться вниз
- Оставаться на месте
Более сложное поведение формируется путем комбинации множества мелких решений в коде.
Jev поддерживает три типа вопросов:
- Choice (Выбор) выбирает один вариант из определенного набора.
- Score (Оценка) оценивает состояние на основе упорядоченной шкалы.
- Noul возвращает вероятность того, что ответом на вопрос «да-нет» является истина.
Несколько вопросов могут оцениваться независимо для одного и того же состояния в рамках одного запроса. Это становится полезным, когда Jev требуется нечто большее, чем просто следовать за мячом.
Как играет Jev
В начале матча вы выбираете уровень сложности: «Легкий», «Средний» или «Сложный». Затем вы двигаете ракетку, отбиваете мяч и пытаетесь первыми набрать семь очков.
Jev получает снимок данных, содержащий всю необходимую для игры информацию: положение и скорость мяча, координаты обеих ракеток, счет, текущую стратегию, доступность ускорения, ограничения движения для выбранного уровня сложности, прогнозируемую движком точку перехвата и измеренную задержку.
На основе этого состояния Jev одновременно отвечает на четыре вопроса:
- Куда должна переместиться ракетка: вверх, вниз или остаться на месте?
- Какой стиль отбивания подходит к данному моменту: безопасный, крученый или быстрый?
- Куда должен полететь следующий удар: в верхнюю часть, по центру или в нижнюю?
- Стоит ли использовать ускорение?
Игровой движок принимает эти ответы и применяет их в рамках правил матча. На среднем и сложном уровнях точность удара становится частью стратегии Jev, поэтому просто добраться до мяча — это лишь половина дела. Ему также нужно решить, что с ним делать.
Рядом с кортом Монитор решений отображает выбранное Jev действие, вероятность, присвоенную каждому варианту, уровень уверенности, задержку запроса и любой резервный вариант (fallback), использованный игрой. Смысл заключается не только в том, чтобы сыграть против агента, но и в том, чтобы наблюдать, как его поведение формируется решение за решением.
Внутри цикла принятия решений
API TypeSafe намеренно сделан компактным. POST /v1/systemone оценивает состояние по одному или нескольким вопросам, в то время как GET /v1/models выводит список доступных имен моделей.
Упрощенный запрос на движение от игры выглядит следующим образом:
Jev возвращает выбранный вариант, вероятность для каждого доступного действия и свою уверенность в принятом решении:
Полный ответ также включает разрешенную версию модели и использование токенов.
Игра не ставится на паузу в ожидании этого ответа. Физика продолжает работать в браузере, в то время как отдельный цикл решений отправляет снимки состояния Jev. Последнее принятое действие управляет ракеткой в течение короткого промежутка времени.
Если решение приходит слишком поздно, имеет низкую уверенность (менее 5 процентов) или больше не соответствует состоянию розыгрыша, движок может отбросить его и применить видимый резервный вариант. Такое разделение позволяет игре оставаться отзывчивой и при этом возлагать на Jev ответственность за значимые выборы.
Это также делает задержку частью игрового процесса. Хорошее решение, пришедшее слишком поздно, может оказаться бесполезным.
Как только JevPong заработал, возник следующий операционный вопрос: должен ли каждый эксперимент, использующий Jev, самостоятельно управлять учетными данными провайдера, маршрутизацией, доступом и телеметрией?
Для этой игры ответ был отрицательным.
Вместо того чтобы обращаться к API TypeSafe напрямую, бэкенд игры отправляет запросы через Postman Fabric Gateway. Fabric маршрутизирует запрос к Jev и скрывает учетные данные вышестоящего провайдера за шлюзом.
Путь запроса выглядит следующим образом:
Fabric предоставляет нам общее место для управления маршрутом и отслеживания его использования. Мы можем анализировать активность с помощью аналитики, журналов аудита, информации о работоспособности и трассировок, не создавая отдельный операционный уровень для каждого эксперимента.
Jev предоставляется игре через управляемый маршрут Fabric, а не через учетные данные провайдера, внедренные в приложение.
Fabric обеспечивает единое представление об объеме запросов, задержке, ошибках и использовании для всего маршрута.
Это небольшая игра, но архитектурный паттерн полезен и за ее пределами. Другое приложение может повторно использовать тот же управляемый маршрут без создания отдельной интеграции с провайдером или распространения нового набора учетных данных. Приложение получает единообразную конечную точку, а команда — единое место для маршрутизации, управления и мониторинга трафика.
Сможешь ли ты обыграть Jev?
Читать об игре — одно. Обыграть Jev — совсем другое.
Выберите уровень «Легкий», «Средний» или «Сложный» и соревнуйтесь до семи очков. Если вы выиграете, ваше время прохождения будет добавлено в глобальную таблицу лидеров для этого уровня сложности.
«Легкий» — это место, где можно прочувствовать ритм. «Средний» дает Jev больше влияния на его удары. «Сложный» — это уровень, где таблица лидеров становится серьезным испытанием.
Как быстро вы сможете читать траекторию мяча, адаптироваться к ударам Jev и довести матч до победы?
Обыграйте Jev, займите свое место в таблице лидеров и попробуйте следующий уровень сложности.
Если вы хотите изучить инфраструктуру, лежащую в основе игры, вы также можете попробовать Postman Fabric Gateway.
Ресурсы
- Сыграть в JevPong
- Посмотреть на GitHub
- Начать работу с Jev от TypeSafe
- Попробовать Postman Fabric Gateway












