栖王ヴァルハラ3丁目 ヘッダーイラスト
Illustration by ruder

明日になったら今日じゃない

栖王ヴァルハラ3丁目

すばら3 / Subara3

Jevをやってみよう

カテゴリ: tech

タグ: 技術, 個人サイト

2026年9月15日に、TypeSafe AI が Jev というモデルを出しました。

Jevってなに?

ご存じChatGPTやClaudeは、文章を出力してくれます。
Jevは、質問に対しての結果を確実にJSONで返してくれます。

パラメーターはこの二つです。

  • state:判定の内容。文章でもJSONでもいい
  • questions:質問。3種類
型聞けること返ってくるもの
noulはい/いいえ「はい」の確率(0〜1)
choice選択肢から1つ選ぶ(最大255個)選んだもの、全選択肢の確率、confidence
score段階で評価する(2〜10段階)確率で重みを付けた点数、各段階の確率、confidence

noul は変な名前ですね。boolean の確率版だと思っておきましょう。

Jevのすごいところは、速いところ、安いところです。
お値段は、入力が100万トークンあたり $0.042。出力は無料です。
公式の資料だと、応答は大半が100ms前後。LLMの40〜200倍速い、とのことです。

はじめかた

1. waitlist に登録……しなくてよい

私は3時間くらいで使用できましたが、今は一般開放されております。

2. コンソールで設定する

メールのリンクから、Google アカウントでログインします。

TypeSafe AI のコンソール。左のメニューは Home / Playground / Usage / API Keys / Documentation の5つ

左のメニューは Home / Playground / Usage / API Keys / Documentation の5つですね。
Playground を使えば、ブラウザの上でJevを試すこともできます。

3. コスト

Settings → Billing を開くと、$5 の Monthly credit があります。

Billing 画面。Monthly credit として 5.00 ドルが付与されている
  • 付与日は 2026-09-18、有効期限は 2026-10-18(UTC)
  • カードは登録していないので、自動チャージ(Auto-recharge)はオフ
  • 使い切っても止まるだけで、請求は来ません

$5は、入力で約1.2億トークンです。
1回1,000トークンの問い合わせなら、12万回くらい投げられます。ひとりで使うには十分すぎる使用量ですね。

4. APIキーを作る

API Keysから「+ Create key」を押すと発行されます。
キーは環境変数に入れておきましょう。
Windowsの例

setx TYPESAFE_API_KEY "発行したキー"

早速テスト

公式の例文(入金が3日失敗しているという問い合わせ)を、日本語で投げてみます。
SDKもありますが、中身を見たいので urllib だけで書きました。

import json, os, urllib.request

body = {
    "model": "jev-latest",
    "state": "助けてください!3日前から入金がずっと失敗しています。",
    "questions": {
        "is_urgent": {"type": "noul", "instructions": "緊急性が伝わる内容ですか?"},
        "department": {
            "type": "choice",
            "instructions": "どのチームが対応すべきですか?",
            "criteria": {
                "billing": "支払い・請求・返金",
                "technical": "バグ・障害・連携",
                "sales": "料金プラン・アップグレード・新規契約",
            },
        },
        "frustration": {
            "type": "score",
            "instructions": "顧客はどれくらい苛立っていますか?",
            "criteria": ["落ち着いている", "苛立っている", "激怒している"],
        },
    },
}
req = urllib.request.Request(
    "https://api.typesafe.ai/v1/systemone",
    data=json.dumps(body).encode(),
    headers={"Authorization": f"Bearer {os.environ['TYPESAFE_API_KEY']}",
             "Content-Type": "application/json"},
)
print(json.load(urllib.request.urlopen(req)))

質問は3つですが、リクエストは1回です。質問をまとめて投げられるのがJevの特徴のひとつであり、強みというわけです。

以下、返答です。

{
  "model": "jev-1.13.0",
  "answers": {
    "is_urgent": { "type": "noul", "noul": 0.91 },
    "department": {
      "type": "choice",
      "choice": "billing",
      "confidence": 0.82,
      "probabilities": { "sales": 0.0, "billing": 0.88, "technical": 0.12 }
    },
    "frustration": {
      "type": "score",
      "score": 1.01,
      "confidence": 0.95,
      "legend": { "0": "落ち着いている", "1": "苛立っている", "2": "激怒している" },
      "probabilities": { "0": 0.01, "1": 0.97, "2": 0.02 }
    }
  },
  "usage": { "input_tokens": 474, "output_tokens": 73 }
}

jev-latest を指定すると、中身は jev-1.13.0 でした。

同じ質問を英語でも投げて、並べてみました。

日本語英語
緊急性(noul)0.910.95
担当チーム(choice)billing 0.88billing 0.89
苛立ち(score 0〜2)1.011.05
入力トークン474402
かかった時間688ms609ms

公式のドキュメントには「英語がいちばん得意で、日本語などは同じようにはいかない」と書いてあります。
でも、このくらいならそんなに差はないようです。
なお、日本語のほうがトークンが2割近く多いので、そのぶんお値段は上がります。

時間は600ms台で、公称の100msよりだいぶ遅いですね。
ただ、日本から毎回つなぎ直しているので、通信の時間がほとんどだと思います。

どう動いているの?

返ってきた JSON を読んでみましょう。

Jevは「確率の分布」を見せてくれる

department の答えをもう一度見てみます。

"probabilities": { "sales": 0.0, "billing": 0.88, "technical": 0.12 }

Jev は、選択肢それぞれに確率を出してくれています。なので、足すと1になります。
choice に入っている billing は、この中でいちばん確率が高いものです。

例えば、LLM に「どれ?」と聞くと、「billing です。理由は……」と文章で返ってきます。
それをプログラムで使うには、返ってきた文章から答えを抜き出す処理が要ります。
いや、別に、「JSONでくれ」って言えばいいんですよ? 9割くらいはやってくれますよ?
だけども絶対ではないのが厄介なところで、コンテキストからぽろっぽろこぼれてあまり絶対とは言ってくれませんでした。
(一時期、仕事でGPTを組み込んだアプリを開発していたことがあるのですが、LLMがルールを守ってくれないのはかなりの悩みでした。
まあ、2年くらい前のことだったので、今はもっと賢いと思いますが……)。

Jev は、決めた選択肢の中からしか答えません!!

score は「重み付きの平均」

frustration の 1.01 は、こう計算されています。

0 × 0.01 + 1 × 0.97 + 2 × 0.02 = 1.01

各段階の確率で重みを付けた平均です。
だから 1.5 のような、段階と段階のあいだの値も出してくれます。 「苛立ってるけど、激怒寸前」みたいなときですね。

confidence は「確信度」

confidence は、確率の分布から出した数字です。
一つの選択肢に確率が集まっていれば高く、ばらけていれば低くなります。

公式のおすすめは、こんな使い分けです。

  • 0.5 未満:人に回す
  • 0.5〜0.9:確認してから実行する
  • 0.9 を超える:そのまま自動で実行する

質問どうしは、おたがいを見ない

1回のリクエストで3つ質問しましたが、Jev はそれぞれを別々に判定しています。
ある質問の答えが、別の質問の答えに影響しない作りです。LLM に3つまとめて聞くと、1つ目の答えに引っぱられることがありますよね?
(あなたは犬が好き? へえ、さっき好きだと言ってたから、ってことは猫も好きなんでしょうね)。 Jevだとそれが起きません。

ちなみに、質問はまとめて投げたほうが、1問ずつ投げるより安くて速いそうです(公式の cookbook だと11.5倍安く、9.6倍速い)。

苦手なこと

  • 数を数える、計算する
  • 日付を比べる
  • 文章を書く(そもそも書けない)
  • 画像や音声
  • 手順を追って考える、長い推論

使ってみた:このサイトの記事にタグを付けさせる

さて、このサイトには記事が81本あります。「技術」「ゲーム」「日記」みたいなやつです。
使っているタグは22種類、付けた数は延べ135個。1本の記事に1〜3個です。

これを、Jev にやらせてみます。

記事をどうやって渡すか

記事は SQLite に入っています。本文は HTML なので、タグを剥がして素のテキストにします。
長い記事は先頭12,000字まで。いちばん長いもので2万字を超えていたのですが、タグを決めるのに全部は要らないだろうという判断です。

質問は、22個のタグをそのまま22問にしました。全部 noul です。

QUESTIONS = {
    "t00": {
        "type": "noul",
        "instructions": "この記事に「技術」というタグを付けますか?",
        "criteria": {
            "true": "プログラミング・開発・サーバ運用・機械学習など、技術的な内容を扱っている",
            "false": "技術的な作業や仕組みの話が出てこない",
        },
    },
    # ... 以下、タグの数だけ同じものが並ぶ
}

これを1回のリクエストにまとめて投げます。記事1本につき1回、22個の答えが返ってきます。

body = {"model": "jev-latest", "state": f"{title}\n\n{text}", "questions": QUESTIONS}

CSP の設定をした記事を投げてみました(自分で付けたタグは「技術」「個人サイト」)。

0.98 技術
0.95 個人サイト
0.88 ハウツー
0.76 調べ物
0.56 ツール開発
0.37 Python
   (以下略)
1本の記事に対して22個のタグの点が並んだ図。自分が付けていた「技術」0.98 と「個人サイト」0.95 が上位2つ

まあ、問題なさそうですね。ハウツーは、ちょっと、TIPS的な運用をしているので違いますが……。

81本を並列6で流して、11秒で終わりました。入力は32万トークン、日本円にして2円くらいです。

測りかた

せっかくなので、正解率も出してみましょう。

ひとつは AUC。タグが付いている記事と付いていない記事を1本ずつ取ってきたとき、付いているほうに高い点を出せている確率です。0.5 なら当てずっぽう、1.0 で完璧。

(まあ、私のタグのつけ方がだいぶ気まぐれなので、あんまりアテになりませんが……。)

もうひとつは、自分が付けた個数だけ、上から採るやりかたです。
2個付けた記事なら Jev の上位2件を見て、何個一致したかを数えます。

1周目:タグの意味をそのまま書く

さっきのコードのまま、22本ぶんの基準を書いて流しました。

成績
全体の AUC0.950
上位から自分と同じ個数だけ採ったときの一致95/135(70.4%)
全部のタグが当たった記事46/81(56.8%)

くらべるものがないと良し悪しがわからないので、機械的な付けかたも並べてみます。

  • よく使うタグから順に機械的に付ける:27.4%
  • でたらめに付ける:9.1%

7割当たっていれば、まあ悪くないです。

しきい値を決めて「これ以上なら付ける」という使いかたをしてみましょうか。

しきい値付けた数合っていた数precisionrecall
0.9118760.6440.563
0.72391100.4600.815
0.62791150.4120.852

0.6 で切ると279個もタグが付いてしまいます。
私はあまりタグをつけていないので、過剰ですね。

どのあたりが私の感覚と違うのかチェック

Jevが私の意図とは違うつけ方をした部分を見てみましょうか。

月報(2025.11)
   自分: 月報      拾えず: 月報(0.91)   代わりに: Claude Code(0.95)
月報(2026.1)
   自分: 月報      拾えず: 月報(0.95)   代わりに: 技術(0.95)

月報には、その月にやったことを書きます。ツールを作った話も、Claude Code を触った話も出てきます。
Jev はそれを読んで「Claude Code の話が書いてあるな」と判定していて、間違っていません。

しかし、私は、月報には「月報」しか付けていません。

つまり Jev は「記事の中に出てくるか」で答えていて、私は「この記事は何の記事か」で付けているわけですね。

2周目:質問の頭に一行足す

そこで、全部の質問の頭に、同じ文を足しました。

これはある個人サイトの記事です。記事のまとめ役として、目次に出すタグを選びます。
記事全体がその話題であるときだけ付けてください。
話のついでに触れているだけ、道具として使っただけでは付けません。

あわせて、criteria も「記事の目的が〜」「〜が本題である」という書きかたに直しました。
「月報」には、こう書き足しています。

この記事がそれなら、中に何の話題が出てきてもこのタグが最優先

もう一度、81本を判定してもらいます。

1周目2周目
全体の AUC0.9500.958
上位から同じ個数だけ採った一致70.4%69.6%
しきい値0.6 の precision0.4120.650
しきい値0.6 の recall0.8520.659
いちばん良かったときの F10.6010.654
しきい値ごとに付けたタグの数。1周目は0.6で279個、2周目は137個で、正解の135個の線とほぼ重なる

おもしろいのは、順番はほとんど変わっていないことです。 上位から採る見かたでは、むしろ0.8ポイント下がっています。

しかし、スコアはだいぶ変化しました。
関係ない記事に出ていた点が下がって、0.6 で切るとちょうどいい数になりました。
1周目は279個付けてきたのが、2周目は137個。正解が135個なので、ほぼ同じ数です。

月報の AUC は 0.998 になりました。

タグごとの成績

タグ別に見ると、得意不得意がはっきり見えますね。

タグごとのAUC。TRPG・Steam・Claude Code などが1.000、日記が0.776でいちばん低い

固有名詞は満点です。「TRPG」「Steam」「Claude Code」は、書いてあるかどうかで決まりますから、当然といえば当然ですね。

苦しいのは「日記」でした。
私の日記タグは「出来事を書き残すこと自体が目的の記事」に付いています。でも、調べ物の記事にも出来事は出てくるし、ツールを作った記事にも経緯は書いてありますので、Jevには判断できないようです。

何度投げても同じ答えが返るのか

同じ81本を、もう2回判定させてみました。

  • 記事×タグで1,782組。3回の最大と最小の差は、平均 0.008
  • 55.2% は3回ともまったく同じ数字
  • 98.2% は差が 0.05 未満
  • しきい値0.6 での「付ける/付けない」が3回とも同じ:99.4%
同じ81本を3回投げたときの点のブレ。55.2%が3回とも同じ数字、しきい値0.6の判定は99.4%が一致

ほぼ動きません。いいですね。LLMよりも答えがブレていません(それでも完璧に同じ結果ではないようです)。

あまりうまくいかなかったタグ

あまりうまくいかなかったタグは以下のものです。

  • 「GoogleAdSenseの導入」:自分は「技術」だけ。Jev は「個人サイト」を上に出す。
    でも、ドメインを取った記事も、PHP を有効にした記事も、CSP の記事も「個人サイト」が付いています。AdSense だけ付いていないのは、気分です。
  • 「キングオブデモンズR楽しい」:自分は「おすすめ」だけ。Jev はゲーム0.98・おすすめ0.95。
    フリーゲームの紹介記事なので、ゲームも付いているべきです。ほかのゲーム紹介記事には全部「ゲーム」が付いていました。
  • 「年報(2025)」:Jev は月報を落とします。タイトルが「年報」だからですね。
    これは Jev のほうが素直で、私が月報タグに年報も混ぜているのが特殊でした。

というわけで、Jev が出した候補を見ながら、16本の記事にタグを足しました。

キングオブデモンズR楽しい        おすすめ → おすすめ, ゲーム
つるのしわけをリリースしました   ネタ → ネタ, ゲーム, ツール開発
GoogleAdSenseの導入              技術 → 技術, 個人サイト
技術書典20に参加しました         同人誌, Claude Code, 技術 → +イベント
   (以下略)

コスト

  • 1周 81本で 11〜12秒(並列6)、入力32万〜52万トークン
  • 1周あたり $0.014〜0.022(2〜3円)
  • 全部で4周まわして、合計 $0.079。無料枠の $5 はほとんど減っていません

2周目のほうがトークンが増えているのは、質問の頭に足した一行が22問ぶん乗るからです。
それでも3円です。

コンソールの Usage を「Last 24 hours」で切ると、この実験のぶんだけが見えます。

コンソールの Usage を24時間で切った画面。Spend 0.0791ドル、Tokens 2,012,754、Requests 325

Requests の 325 は、81本 × 4周 + 最初のお試し1本です。
Tokens の 2,012,754 は出力込みの数。お金がかかるのは入力だけなので、手元で数えた入力 1,877,247 トークンのほうが請求に効いています($0.0788)。画面の $0.0791 とほぼ一致しました。

記事1本にかかった時間は、中央値で 830ms でした。
最初に3問だけ投げたときが688msだったので、22問に増やしてもほとんど変わっていないことになります。
質問はまとめて投げたほうがいい、というのは間違いないようです。

この記事にも付けさせてみた

せっかくなので、いま読んでいるこの記事も Jev に判断させてみました。結果はこうです。

0.63 個人サイト
0.53 技術
0.46 おすすめ
0.45 イベント
0.43 ゲーム

しきい値0.6を超えたのは「個人サイト」だけ。「技術」が0.53で、どっちつかずになりました。

たぶん、この記事が「よそのAPIの紹介」と「自分のサイトの中身の話」の両方でできているからだと思います。
Jev は、記事全体がその話題のときだけ付けろと言われているので、どちらとも決めかねたというわけですね。

私は「技術/個人サイト」を付けました。

やってみてわかったこと

  • $5 の無料クレジットが最初から入っていて、カード登録なしで試せる
  • (今回のケースは)日本語でも、ちゃんと判定できる。トークンは英語より2割くらい多い
  • 答えは選択肢と確率で返ってくる
  • 3回投げて、99.4% は同じ判定だった。同じものを同じように測れる
  • 質問の一行を直すと、順位はそのままで点の付きかただけが変わった。順番を付けるのと、どこで切るかを決めるのは、別々に調整できる
  • 固有名詞のタグ(Steam、TRPG、Claude Code)は満点。曖昧なタグ(日記)は苦しい。明確なルールが決まっていないものはJevも判断できない
  • 81本を22項目で判定して3円、11秒。

記事

プライバシーポリシー 最終更新 2025/10/14

個人情報の取り扱いについて

当サイトでは、お問い合わせフォームからご連絡いただいた際に、お名前やメールアドレスなどの個人情報をお預かりすることがあります。

これらの情報は、お問い合わせへの返信や必要なご連絡のためにのみ使用し、それ以外の目的で使用することはありません。また、法令に基づく場合を除き、第三者に開示・提供することはありません。

Cookieの使用について

当サイトでは、サイトの利便性向上やアクセス解析のためにCookieを使用しています。

Cookieはブラウザの設定により無効にすることができますが、一部の機能が正しく動作しなくなる場合があります。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Google Analytics」を使用しています。

Google Analyticsはトラフィックデータの収集のためにCookieを使用しており、このトラフィックデータは匿名で収集されています。個人を特定するものではありません。

この機能はCookieを無効にすることで収集を拒否することができますので、お使いのブラウザの設定をご確認ください。

詳細については、Google アナリティクス利用規約をご参照ください。

広告の配信について

当サイトでは、第三者配信の広告サービス「Google AdSense」を使用しています。

広告配信事業者は、ユーザーの興味に応じた広告を表示するためにCookieを使用することがあります。

Google AdSenseの詳細については、Google 広告に関するポリシーをご参照ください。

アフィリエイトについて

当サイトは、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである、Amazonアソシエイト・プログラムの参加者です。

その他、各種アフィリエイトプログラムに参加している場合があります。

著作権について

当サイトに掲載されている文章、画像、その他のコンテンツの著作権は、当サイト管理者または正当な権利を有する第三者に帰属します。

無断転載・複製はご遠慮ください。引用の際は、出典を明記のうえ、リンクを貼っていただけますようお願いいたします。

免責事項

当サイトの情報は、可能な限り正確な情報を掲載するよう努めていますが、その正確性や安全性を保証するものではありません。

当サイトに掲載された内容によって生じた損害等について、一切の責任を負いかねますのでご了承ください。

また、当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直し、その改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。

ここについて

栖王ヴァルハラ3丁目は、頻子(ひんこ)がつくったものを置いている個人サイトです。2013年に建ちました。

小説、ゲーム、ブラウザで動くツール、技術記事、同人誌の情報があります。別館として、数式と規則が動くのを眺める PULSE と、Steam ゲームの本棚があります。

置いてあるものは、予告なく書き直したり、片付けたりすることがあります。


もし何かご用があれば、お問い合わせフォームからお声をおかけください(記名不要)。

応援・ご感想・誤字脱字報告などお気軽にどうぞ

お問い合わせ

自己紹介

頻子(ひんこ)です。
ゲームと文章を書くことと、それを作るための道具を作ることが好きです。

技術書典で技術同人誌を出したり、技術記事を書いたりもしています。

info★subara3.com (★→@)

活動場所

投げ銭

このサイトへのリンク

2013/01/01 開設 2017/09/06 有料サーバーに移行 2022/05/29 二次創作置き場を増設 2025/10/10 独自ドメイン化

既刊情報

すばら3ロゴ

すばら3の既刊はBOOTH、DLsite、kindle、あるいは各種イベントで入手することができます。

一部の本は、国会図書館に預けてきました。
寄稿したものは、それぞれの頒布先をご確認ください。

サークルロゴは高瀬川さんがつくってくださいました。ありがとう!

実績

お仕事

寄稿・お手伝い

受賞歴

技術記事コンテスト・投稿キャンペーンでの受賞歴です。

  • 2026/09 Qiita記事投稿キャンペーン「『さくらのAI Engine』3,000リクエスト使い切りチャレンジ」 ファーストステップ賞

    【さくらのAI】さくらのAIを使って、はじめてのLLMゲームを作ろう【請求0円/3000回】

  • 2026/09 Zennコンテスト「OpenTelemetryの知見を、記事にしよう」 Splunk Observability部門 優秀賞

    【Splunk】入力は無限、請求は有限:LLMを呼び出すゲームを、Splunk Observability Cloudで見張ってもらう

  • 2026/07 Zennfes Spring 2026「TiDBで作るAI時代のデータ基盤」 最優秀賞

    【TiDB】「Hades + Slay the Spire」は何になる? Steamのゲームを足し引きして次の一本を探そう

  • 2026/07 Zennfes Spring 2026「YouCam APIを活用した実装事例とアイデア」 特別賞

    【YouCam】YouCamAPIを使って、細かすぎて伝わらないメイク当てクイズを作った

  • 2024/06 Qiita記事投稿キャンペーン「音声認識APIを使ってみよう!」 AmiVoice優秀賞

    TRPGのボイスセッションのログを感情分析して、リプレイのハイライトを作成する

ご依頼

スクリプトや個人サイトなど、ご入用のものがありましたらぜひお声がけください!

info★subara3.com (★→@)

プライバシーポリシー

最終更新: 2025/10/14

個人情報の取り扱い

お問い合わせフォームからご連絡いただいたメッセージは、必要なご連絡のためにのみ使用します。許可なく第三者に開示・提供することはありません。

Cookieの使用

サイトの利便性向上やアクセス解析のためにCookieを使用しています。ブラウザ設定で無効にできますが、一部機能が正しく動作しなくなる場合があります。

アクセス解析

Google Analyticsを使用しています。トラフィックデータは匿名で収集され、個人を特定するものではありません。

広告配信

第三者配信の広告サービス「Google AdSense」を使用しています。ユーザーの興味に応じた広告表示のためにCookieを使用することがあります。

アフィリエイト

Amazonアソシエイト・プログラム等に参加しています。

著作権

掲載コンテンツの著作権は当サイト管理者または正当な権利者に帰属します。無断転載・複製はご遠慮ください。

免責事項

情報の正確性・安全性を保証するものではありません。当サイトの内容によって生じた損害等について責任を負いかねます。