◀ PORTFOLIO HI-SCORE 000000
SYSTEM ONE × 5 GAMES

TypeSafe AI「Jev」System One モデル/構造化意思決定モデル

TypeSafe AI Jev — System One evaluation model (typed decisions: Choice / Score / Boolean)

TypeSafe AI の意思決定モデル Jev に、ゲームを5本プレイさせました。進む向き、はばたくタイミング、ジャンプ、ミノの置き場所を Jev が選びます。渡すのは画面の画像ではなく、盤面をまとめた JSON と、プログラムが合法手から先読みで絞り込んだ候補です。将棋・囲碁・チェスでは「ルール上打てる手」を合法手と呼びます。テトリス3Dでは、101個のミノのうち92個が Jev の選んだ場所に置かれました。

3枚の札(選択肢・メーター・チェック)を上げた判定係のロボットと、ヘビ・鳥・ペンギン・落ちものブロック・3Dの塔が映る5台のゲーム画面
ATTRACT MODE
5本
ゲーム(ヘビ・フラッピーバード・ミニマリオ・テトリス2D・テトリス3D)
13本
録画(ほかにスクリーンショット4枚)
3種類
判定の型(Choice / Score / Boolean)
0.3〜0.7秒
1回の判定(この環境での計測)
PRESS START ▶

Jev とは ABOUT

Jev は、TypeSafe AI が 2026年9月15日に公開した意思決定モデルです。入力は会話履歴ではなく、プログラムが渡す state(状況)と、型のついた questions(判定項目)です。出力は文章ではなく、選択の結果・スコア・真である確率で、コードはその値で分岐します。

ChatGPT 系は、トークンを順に生成する対話・作文のモデルです。Jev は、同じ state に対する複数の判定をまとめて返し、その値をソフトウェアがそのまま使います。公式ブログはこれを「unstructured state in, typed probabilistic decisions out」と書いています。[1] Jev を置くのは、エージェントやゲームループの中で次の一手を決める層です。

Vercel AI Gateway でのモデル名は typesafe-ai/jev で、チャット API ではなく、AI SDK の evaluate から呼び出します。[4] 判定の種類は3つで、AI SDK の型名では Choice(並べた候補から1つ選ぶ)、Score(段階で評価する)、Boolean(真である確率)です。Boolean は、TypeSafe AI のドキュメントでは Noul と呼ばれています。[2]

ChatGPT 系 LLM との違い VS

ChatGPT 系 LLMJev
役割対話・文章生成構造化判定
入出力プロンプト → 文章state + 型付き質問 → 選択/スコア/確率
使い方人が読む文を書く判定結果でプログラムを分岐させる
向く仕事説明、実装草案の作成、対話ルーティング、リスク判定、次アクションの決定
向かない仕事低遅延の大量判定物語生成、コード生成

5本に共通するつくり HARNESS

ゲームのデモは、Jev 単体にゲームを遊ばせたものではありません。判定モデルと、その周りで Jev を制御するコード(ハーネス)の組み合わせです。

ゲームPython・pygame
stateJSON
橋中継。Node.js・AI SDK の evaluate
JevVercel AI Gateway
答え選択・スコア・確率
ゲームのコード安全装置・再生
  1. 画面は送らない。盤面・位置・先読みの結果を、JSON 形式の state にまとめる。
  2. 選択肢は、コードが「打てる」と確かめた手(合法手)だけにする。各選択肢には、選んだ場合にどうなるかを示す数字を添える。
  3. 物理・当たり判定・ライン消しには、ゲーム側のコードをそのまま使う。Jev が返すのは、どの分岐を選ぶかだけ。
  4. 答えが来ないとき、間に合わないとき、候補にない答えが返ってきたときは、コード自身の評価で1位の手を選んで進める。
BRIDGE LOG — 127.0.0.1:8787
5本のゲームそれぞれの中継プログラム(橋)が実際に出したログから1行ずつ(長い行は途中を省略)

ステージセレクト SELECT

STAGE 1

ヘビ(Snake)

元のゲーム: rajatdiptabiswas/snake-pygame
5倍速(ウィンドウ録画)。下は速度のスライダーと「Jev 思考中は一時停止」の切り替え。
4倍速(ゲームが書き出した動画)
Jev に聞くこと次に進む向き(Choice)。逆走や即死につながる向きは、コードが先に選択肢から外す。
コードが受け持つこと向きごとに、進んだ先の状態(エサまでの距離、残る広さ)を計算して、選択肢の説明に書く。壁に当たってもゲームオーバーにせず、画面を赤く光らせる。
経過最初は向きの名前だけを渡したところ、Jev の答えは RIGHT に偏った。向きごとの先読みの結果を選択肢に書き足すと、Jev がエサに近づく向きを選ぶようになった。
SCORE81 点
録画の中での最高得点
STAGE 2

フラッピーバード(FlapPyBird)

元のゲーム: sourabhv/FlapPyBird(MIT)
下はスクロール速度(Lv10 = 500%)と、土管の隙間の幅
Jev に聞くこと今はばたくか(Boolean)。
コードが受け持つこと「はばたく」「はばたかない」のそれぞれについて、この先の操作を全部試し、生き残れる道があるかを調べる。片方でしか生き残れない場面ではコードが行動を決め、どちらでも生き残れる場面でだけ Jev に「今はばたくか」を聞く。
難しくする仕掛けスクロール速度のスライダー(500%まで)。20点ごとに土管の隙間を狭める。
SCORE108 点
ゲームオーバー画面のスクリーンショットでは108点(スクロール速度500%)。動画の中では92点。
STAGE 3

ミニマリオ(SuperTux の絵)

自作のゲームに、SuperTux の絵とアドオンのコースを使用
上は Jev の答え(方針・左右・ダッシュ・ジャンプ・長押し・危険度)と先読みの結果、下は速度のスライダー(20倍まで)
Jev に聞くこと6問(進む・戻る等の方針、左右、ダッシュ、ジャンプ、長押し、危険度)。4フレームに1回、1回の evaluate でまとめて聞く。
コードが受け持つこと物理演算と当たり判定、同じ物理モデルでの先読み(跳んだら着地まで確かめる)、安全装置。安全装置は Jev の答えより優先する。
ステージ自作の4本と、SuperTux のアドオン用コースから変換した6本の計10本。速度は20倍まで上げられる。
通信この節の録画が終わった時点で、問い合わせは205回、そのうち失敗は5回(打ち切りは0.7秒)。この回の起動からの計測では、答えが届くまでの時間は中央値0.32秒、最大0.65秒。
STAGE9 / 10
録画では、10ステージ中9番目の STAGE 2-5「Ghostforest」まで到達
STAGE 4

テトリス2D

元のゲーム: GABETROLL/Tetris3D の 2D モード(10×20)
録画2(効果音あり)。右上に Jev との送受信を示すハートビート、盤の上に「間に合わず」(Jev の答えが届く前にミノが固定された印)の表示を付けた版。13倍速で26ラインを消した。
録画1(効果音あり)。10秒ごとに速度を上げて、16倍速で67ラインのときゲームオーバー。
Jev に聞くことこのミノをどこに置くか(Choice)、選んだ位置と向きまでミノを動かしたら、そこで一気に落とすか(Boolean)、危険度(Score)。
コードが受け持つこと置き場所をすべてゲーム自身の関数で試し、置いたあとの盤を El-Tetris の重み(着地の高さ・消えるライン・穴などに掛ける係数)で採点する。1位との点差が15点以内の候補だけを、最大4つ渡す。1つしか残らなければ聞かずに置く。
繋ぐ前に確かめたこと候補からでたらめに選ぶ偽の橋でも、800個のミノを置くまでゲームオーバーにならなかった。
ゲームオーバーの理由16倍速では、Jev が答える約0.3秒のあいだにミノが約10段落ちる。応答の遅れだけを16倍速のときと同じにしたシミュレーションでも、約72ラインで同じように終わった。
LINES67
録画1。速度は16倍速まで上げた
STAGE 5

テトリス3D

元のゲーム: GABETROLL/Tetris3D の 3D モード(4×4×20)
置き場所を比べる版(効果音あり)。右上に Jev に見せた p0〜p3 と、それぞれの落ちたあとの一番下の層。左上は速度と自然落下速度のスライダー。
生キー版(Jev にキーを直接選ばせる版)の最初の形。選んだキーを、次の答えが来るまで毎フレーム押し続ける。
生キー版の2つ目の形。1回の答えにつき、キーを1回だけ押す。
生キー版Jev に回転キー(ROTATE_CW_X など)を直接選ばせた。答えは21回すべて HARD(その場で落とす)だった。回転は一度も起きず、約15秒で終わり、消えた層は0。
置き場所を比べる版コードが、最大24姿勢×16位置の置き方それぞれについて、Game3D と同じ関数でミノを回して落とす。点が高い4通りの置き方について、ミノを落としたあとの井戸の層(after_layers)を Jev に見せる。井戸は、ミノを積む 4×4×20 の枠のこと。Jev は p0〜p3 から1つ選ぶ。
試験乱数を変えた5試合で、各60ミノについて、候補ごとの after_layers が、本物の盤でその候補どおりにミノを落として固定した結果と一致することを確かめた。
見た目井戸は20秒で1周する。ミノの回転は、1回につき0.5秒かけて見せる。層が消えると「+1」と出る。自然落下の間隔は、1段あたり2000msから始まり、レベルが上がるごとに100msずつ短くなる。
JEV92 / 101 ミノ
置き場所を比べる版の録画。101ミノのうち、Jev が配置を選んだのは92ミノ。消えたのは20層、到達したレベルは6。

スナップショット PHOTO

スクリーンショットと短い録画です。

ヘビのゲーム画面
STAGE 1 · SHOTヘビ(速度 Lv10、毎秒50マス)。最下段は Jev の答え(UP、確率0.74)と応答時間(369ms)。
STAGE 2 · CLIPフラッピーバードを10秒間録画したもの。スクロール速度150%で、スコアが63点から74点まで上がる場面。
フラッピーバードのゲーム画面
STAGE 2 · SHOTフラッピーバード(スクロール速度150%、土管の隙間112px)。
フラッピーバードのゲームオーバー画面、108点
STAGE 2 · SHOTゲームオーバーの画面。スクロール速度500%でプレイし、108点を記録。中央のボタンを押すとオープニングに戻る。
ミニマリオ STAGE 1-1 の画面
STAGE 3 · SHOTミニマリオ STAGE 1-1。上の欄は Jev の6問の答えと先読みの結果で、この場面では止まると死に、走れば安全。
STAGE 3 · CLIP全10ステージを終えたあとの画面(ALL CLEAR)。画面の表示では、Jev への問い合わせは350回、失敗は7回。この時点では、右上の操作欄に「人間」と表示されている(キーボードからの入力があると、この表示に切り替わる)。
STAGE 5 · CLIPテトリス3D。20秒で1周する井戸の動きと、底の円。
STAGE 5 · CLIPテトリス3D(レベル3)。右の欄は、Jev に見せた候補 p0〜p3 と、それぞれの落ちたあとの一番下の層。

分かったこと TIPS

キーを直接選ばせると、Jev は毎回 HARD を選んだ。回して落とした結果を並べて比べさせると、101個のミノのうち92個が、Jev の選んだ配置どおりに置かれた。
Jev の応答は0.3〜0.7秒。ゲームが速くなると、その間にミノや鳥が動く。先読み・安全装置・「間に合わず」の表示はコードの側に置いた。
フラッピーバードでは、はばたく・はばたかないの一方でしか生き残れない場面はコードが決め、どちらでも生き残れる場面だけ Jev に聞いた。テトリス2Dでは、1位の候補との点差が15点以内の置き場所だけを残し、1つしか残らなければコードが置いた。この絞り方なら、候補からでたらめに選んでも、800個のミノを置くまでゲームオーバーにならなかった。

出典・クレジット CREDITS

  1. TypeSafe AI「Introducing System One Models & Jev」
  2. TypeSafe AI ドキュメント「System One」
  3. Vercel「TypeSafe AI's Jev now available on AI Gateway」
  4. Vercel ドキュメント「Evaluation」