Jev は TypeSafe AI が出しているモデルで、LLM のように文章を書きません。こちらが選択肢や段階を決めて質問を渡すと、どれに当たるかを確率で返します。このページでは、Jev に何を渡して何が返ってくるのかを、実際のリクエストで確かめます。

文章ではなく、型の決まった値を返す

公式ドキュメントは、LLM に判断をさせるときのずれを次のように説明しています。

you are coercing a text-generation system into outputting structured decisions, then parsing the results back into something your code can depend on.

出典: https://docs.typesafe.ai/introduction.md(取得日: 2026-09-23)

LLM は人が読む文章を書くためのモデルです。その文章から判断の結果を読み取るには、パースの処理が要ります。Jev は最初から型の決まった値を返すので、この手間がありません。質問の型は 3 つです。

型 聞くこと 返るもの
Choice 選択肢のどれか 選んだ選択肢、選択肢ごとの確率、confidence
Score 段階評価のどこか 段階の期待値、段階ごとの確率、confidence
Noul はい・いいえ 「はい」の確率(0〜1)

1 回のリクエストに型の違う質問をいくつも入れられ、それぞれが同じ入力(state)に対して並列に評価されます。公式は、この仕組みを速い直感的な判断にたとえて「System One」と呼んでいます。カーネマンの「速い思考・遅い思考」の System 1 から取った名前です。

3 つの型を 1 回で聞いてみる

問い合わせの文を 1 つ渡し、担当チーム(Choice)・苛立ちの度合い(Score)・返金を求めているか(Noul)を 1 回のリクエストで聞きます。SDK を使わず、HTTP API を fetch で直接呼びました。

// ask.mjs
// 1 つの問い合わせ文について、Choice・Score・Noul を 1 リクエストで聞く
// 実行: TYPESAFE_API_KEY=... node ask.mjs
const body = {
  model: 'jev-latest',
  state: {
    ticket: '先月分の請求が 2 回引き落とされています。今日中に返金してもらえないと困ります。',
  },
  questions: {
    team: {
      type: 'choice',
      instructions: 'Which team should handle `ticket`?',
      criteria: {
        billing: 'Payments, invoices, refunds',
        technical: 'Bugs, errors, how to use the product',
        account: 'Login, profile, cancellation',
      },
    },
    frustration: {
      type: 'score',
      instructions: 'How frustrated is the customer who wrote `ticket`?',
      criteria: ['Calm', 'Somewhat frustrated', 'Very frustrated'],
    },
    refund: {
      type: 'noul',
      instructions: 'Does `ticket` request a refund?',
    },
  },
}

const started = performance.now()
const res = await fetch('https://api.typesafe.ai/v1/systemone', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.TYPESAFE_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(body),
})
const elapsed = performance.now() - started
console.log(JSON.stringify(await res.json(), null, 2))
console.log(`elapsed: ${Math.round(elapsed)} ms`)

返ってきたのは文章ではなく、コードでそのまま if や並べ替えに使える値です。Score の score: 1.36 は、「やや苛立っている」が 64%、「とても苛立っている」が 36% の期待値です。confidence が 0.46 と低いのは、確率が 2 つの段階に割れているためです。担当チームのように答えがはっきりしている質問では、confidence は 1 になりました。この「答え」と「どれだけ迷ったか」を別々に受け取れることが、あとのページでも効いてきます。

なお、公式は英語を主な学習言語とし、日本語などは精度が下がるとしています。上の例は、質問と選択肢を英語で書き、問い合わせの文だけを日本語で渡しました。

速さと料金

料金は入力 100 万トークンあたり 0.042 ドルで、出力には料金がかかりません(2026-09-23 時点の Models ページ)。上のリクエストは入力が 447 トークンなので、1 回あたり約 0.00002 ドルです。公式サイトは、LLM で同じ処理をした場合と比べて「193.6 倍速い・444.6 倍安い」とうたっています。これは公式の比較で、自分では測っていません。手元で測った応答時間は、上のとおり 0.3 秒前後でした。

どんな判断に使うのか

公式の「Example use cases」は、使い道を判断の形で整理しています。分類(選択肢から 1 つ)・検出(ある性質を持つ確率)・スコアリング(段階評価)・ルーティング(次に進む道)・検索・取得・ランキング・検証・特徴量抽出・構造化データ抽出です。業界別の例も 20 近く並んでいますが、どれも中身は「文章を読んで、ラベル・確率・スコアに変える」作業です。

逆に、文章を書かせる・コードを書かせる・自分で次の行動を決めさせる、といったことはできません。Jev に任せられるのは、コードの流れの途中にある小さな判断だけです。次のページからは、この判断を E2E テストと道の駅のおすすめ機能に組み込んでみます。