メインコンテンツへスキップ
Hero Image

Jev 入門:できること、プロンプトの書き方、その効果の検証(2026年9月版)

Jev

概要

Jev は TypeSafe 社が提供する AI モデルで、文章を生成せず「判断」と「その確率」だけを返す。 ChatGPT のような対話型の生成 AI とは使い方もプロンプトの書き方も異なる。

この記事では、Jev の概要と、公式ドキュメントをもとにまとめたプロンプトの書き方を紹介し、 その書き方が本当に効果があるかを公開データセットで検証した結果を示す。

Jev とは

3 行まとめ

  • 文章を読んで判断を下す AI モデル(文章は生成しない)
  • 回答は、決めた選択肢の中から確率付きで返る
  • プログラムに組み込み、判断が必要な箇所だけを任せる想定で作られている

Jev が使える質問の種類

Jev への質問には 3 つの種類があり、答えの形がそれぞれ異なる。

種類問いの形返る答え例
Choice選択肢のどれか選ばれた選択肢、各選択肢の確率、確信度問い合わせをどの部署に回すか
Score段階評価のどこか段階上の位置、各段階の確率、確信度不具合報告の深刻度
Noulはいかいいえか「はい」である確率(0〜1)返金を求めているか

Jev(1.13.0) プロンプトガイド概要

完全版は以下。

https://github.com/gnkm/jev-prompts/blob/main/docs/source-of-truth/jev-prompt-guide.md

プロンプトの構成要素

プロンプトの構成要素は以下の 2 つ。

  • state:判断の対象になる内容(問い合わせ文、文書、アプリケーションの状態など)
  • questions:その state について下してほしい判断の集合。ID をキーにした map で、各質問は type(choice / score / noul)、instructions(問いそのもの)、criteria(選択肢・段階・yes/no の定義)を持つ

例:スパムか否かの判断をする場合のプロンプト。

{
  "state": {
    "message": "WIN a free holiday. Call now to claim your prize."
  },
  "questions": {
    "unsolicited": {
      "type": "noul",
      "instructions": "Is `message` an unsolicited commercial or fraudulent message, sent to the recipient without them asking for it?",
      "criteria": {
        "true": "Advertises, promotes, or tries to obtain money or details from a stranger",
        "false": "A personal message, or a message from a service the recipient uses"
      }
    }
  }
}

instructions には判断させたい条件そのものを書く

Jev は instructions を字義どおりに解釈する。 人間なら汲み取るはずの意図は補わない。 そのため、判断させたい条件を言葉として instructions に書き、境界になりそうな事例は criteria に書く。

良い例:

Is `message` an unsolicited commercial or fraudulent message, sent to the recipient without them asking for it?

悪い例:

Is `message` spam?

悪い例では、「spam」が何を含むか(自分で登録したメルマガは含むか、詐欺は含むか)の判断がモデルに委ねられる。 良い例は、判定したい条件そのものを書いている。

公式ドキュメントには、誤答を見て「本当はこういう意味だった」と説明したくなったら、 その説明こそが instructions に欠けていた部分だ、という目安が書かれている。

Score の段階は「程度」ではなく「状況」で書く

Score の criteria は、低い方から高い方へ並べた段階の配列である。 各段階は state と個別に照合され、モデルは段階の番号や隣の段階を見ない。 そのため「中程度」「前の段階より悪い」のような程度の表現は手がかりにならない。

良い例(不具合の深刻度):

"criteria": [
  "Cosmetic issue only; every feature still works",
  "Broken or degraded feature, but a workaround exists",
  "Feature unusable with no workaround, or data is lost"
]

悪い例:

"criteria": ["Low", "Medium", "High"]

後述の検証でも、Score では criteria の書き方によって精度が大きく変わった。

そのほかの基本原則

  • 1 つの質問には 1 つの判断だけを入れる。「このメッセージを分析して最善の対応を決めて」ではなく、「緊急性を伝えているか」のような、詳しい人が 1 秒で下せる判断に分解し、組み合わせはコードで行う
  • state には判断に必要な情報だけを入れる。無関係な情報が多いと精度が落ちる
  • 同じ state に対する質問は 1 リクエストにまとめる。質問は並列に評価されるので、増やしても応答時間はほとんど変わらない
  • 数え上げ、計算、日付の比較、文章生成は苦手なので、コードで行う
  • 質問の ID はモデルに送られない。ID が自明に見えても、instructions には完全な問いを書く

その他の注意事項

  • 主な学習言語は英語で、日本語を含む CJK 言語は精度が低い。日本語の入力を扱う場合も、instructions と criteria は英語で書く案を検討し、手元のデータで比較するとよい
  • 入力はテキストのみ(画像・音声は非対応)
  • 1 リクエストのコンテキストには上限がある(jev-1.13.0 では 64k トークン)

Jev プロンプトガイド検証結果概要

自作のプロンプトガイドが正しいか検証をおこなった。

仮説

事前に立てた問いは次の 3 つである。

  • H1: instructions と criteria を一緒に崩すと、ガイドラインにしたがった書き方のプロンプトより精度が落ちるか
  • H2: 崩す要素によって、精度の落ち方は違うか
  • H3: 良いプロンプトほど、確信度の高い誤答が少ないか

検証方法

次の 5 条件のプロンプトを、3 つの課題それぞれで比較した。

条件変えるもの内容
A(基準)ガイドに沿った書き方
B1instructions と criteria指示を曖昧な 1 文にし、選択肢の説明を名前だけにする
B2criteria のみ選択肢・段階・条件の定義を崩す
B3instructions のみ質問文を崩す
Cstate のみ判断に関係ない情報を足す

結果

結果の表に出る列の意味は次のとおりである。

列意味
top1Choice で、最も確率の高い意図が正解と一致した割合
MAEScore で、出した値と正解の段階との差の絶対値の平均。値は四捨五入しない。小さいほど近い
spearmanScore で、出した値と正解の段階の順位がどれだけ一致するか。1 に近いほど順位が合い、負なら逆
aucNoul で、スパムの方がスパムでないものより高い値になる割合。0.5 は区別できず、1 は完全に分かれ、0 は完全に逆向きに分かれる
CIその指標の 95% 区間。同じケースを再標本したときのばらつき
confident_error_rateChoice と Score は confidence が 0.9 以上なのに誤った割合。Noul は値が 0.1 以下または 0.9 以上なのに誤った割合
ece較正の確率を 0.1 刻みの区間に分け、区間内の正解率との差を件数で重みづけした平均。0 に近いほど、採用した答えの確率が正解率と一致する
brier(較正の確率 − 正誤)^2 の平均。0 に近いほど、採用した答えの確率が正誤に近い

choice

conditiontop1top1 CIconfident_error_rateecebrier
A0.900[0.817, 0.967]0.0330.0540.063
B10.933[0.867, 0.983]0.0000.0780.047
B20.950[0.883, 1.000]0.0000.0680.025
B30.900[0.817, 0.967]0.0170.0550.057
C0.867[0.783, 0.950]0.0170.0550.068

score

conditionMAEMAE CIspearmanspearman CIconfident_error_rateecebrier
A0.501[0.386, 0.627]0.618[0.422, 0.767]0.0000.0820.125
B10.733[0.599, 0.870]0.636[0.460, 0.762]0.0000.1630.168
B20.730[0.589, 0.878]0.616[0.438, 0.751]0.0000.2770.257
B30.491[0.381, 0.610]0.660[0.486, 0.790]0.0000.0750.117
C0.528[0.412, 0.655]0.660[0.485, 0.790]0.0000.1040.118

noul

conditionaucauc CIconfident_error_rateecebrier
A0.999[0.997, 1.000]0.0000.0450.022
B10.962[0.913, 0.993]0.0000.1300.168
B20.996[0.982, 1.000]0.0000.0680.049
B30.003[0.000, 0.014]0.8830.8950.876
C0.999[0.993, 1.000]0.0000.0560.024

結論

  • H1(A と B1 の比較):課題によって異なった。Score では MAE が 0.50 から 0.73 に悪化し、Noul でも AUC が 0.999 から 0.962 に下がり、較正(ECE、Brier)も悪化した。Choice では差が見られなかった
  • H2:Score では criteria を崩す(B2)と MAE と ECE が悪化し、instructions を崩しても(B3)変わらなかった。Noul では instructions を崩すと判定が反転した(理由は後述)。Choice ではどの要素を崩しても差は見られなかった
  • H3:支持されなかった。Choice ではむしろ A のほうが確信度の高い誤答がわずかに多く、Score ではどの条件でも確信度の高い誤答はなかった
  • 追加条件 C:判断に無関係な情報を足しても、今回の追加量ではどの課題でも大きな変化はなかった
  • Score では criteria を崩しても順位の一致度(spearman)は変わらず、ずれたのは段階の位置だった

今回の結果からは、Jev における良いプロンプトの効果は、とくに判断の境界を言葉で定義する必要がある課題(Score の段階、Noul の条件)で表れると言える。

気づき

Jev は RLCD(Reinforcement learning for calibrated decisions) を用いて学習されている。 ドキュメントには、以下のとおり記載されている。

Reinforcement learning for calibrated decisions trains TypeSafe to return decisions and calibrated probabilities instead of generated text.

較正確率を学習しているということである。 ガイドラインにしたがったプロンプトは、較正確率の精度(ECE)が小さかった。 回答精度に加えて、較正確率の精度も良くなるというメリットがあるのかもしれない。

参照: https://docs.typesafe.ai/introduction/machine-learning-primer#rlcd-and-calibrated-decisions

まとめ

Jev は文章を生成せず、決めた選択肢の中から判断と確率を返すモデルで、プログラムの中の判断箇所に組み込んで使う。 プロンプトは state(判断材料)と questions(判断の定義)でできており、判断の境界を言葉で一意に伝えることが重要である。 検証では、とくに Score(順序あり分類)で criteria を状況として明確に書くことが精度に効いた。 また、ガイドに沿ったプロンプトは確率の較正誤差も小さかった