色々ラボ 小ネタを漁る日々 画像づくりと、保存先やPC用品の選び方

Jevの使い方|Choice、Score、Noulの違いとPython実践例

Jevに「このメールを読んで、いい感じに対応して」と頼むだけでは、持ち味を生かしにくいです。
使いやすいのは、「どの種類の連絡か」「今日の返信が必要か」のように、小さな判断へ分けたときです。

TypeSafe AIのJevは文章生成用のチャットAIではなく、決められた形式で判断を返すSystem Oneモデル。
返信文を書く部分と、その前に連絡を仕分ける部分を分けて考えると、任せる仕事がはっきりします。

確認日:2026年9月20日。公式資料を基にした解説です。コードと例文は説明用に作成しており、有料APIの実行、日本語精度の検証はしていません。当サイトは広告を利用しています。

まだ利用準備が済んでいなければ、Jevの導入方法:PlaygroundとPython SDKの始め方から進めてください。

Jevでできることと、別の処理に任せること

たとえば、連絡文を「質問」「不具合の報告」「その他」に分ける仕事は、あらかじめ選択肢を用意できます。
一方、相手に返す丁寧な文章には自由な生成が必要です。前者をJevに聞き、後者は人や文章生成モデルに任せる構成が考えられます。

仕事 試す設計 人やコードに残すもの
受信連絡の仕分け 主な用件を候補から選ぶ 担当者の権限と実際の転送
記事メモの整理 決めたテーマへの分類 情報源の確認と本文執筆
不具合報告の点検 再現手順が書かれているか判定 実機での再現と修正
金額や期日の処理 必要なら文章中の候補の選別を補助 足し算、日付比較、支払いの承認

これらは用途の提案であり、検証済みの成果事例ではありません。
公式も、Jev 1.13の正確な計算や日付比較の弱点を説明しています。計算で確定できることまでモデルに聞かず、コードで処理します。公式の既知の弱点

Choice、Score、Noulの違い

返してほしい答えの形から質問を選びます。
種類を一つ選ぶならChoice、順序のある段階で評価するならScore、yesかnoの確率を聞くならNoulです。

種類 質問の例 結果の読み方
Choice この連絡の主な用件は? 選ばれた候補、候補ごとの確率、confidence
Score 再現手順はどれくらい具体的? 定義した段階上の数値。整数とは限らない
Noul 今日中の返信を明示的に求めている? yesである確率。0.5はyesとnoが同程度

Noulの0.5は「緊急度が中くらい」という意味ではありません。
程度を測りたい場合はScoreで段階を定義します。公式の定義は質問の種類で確認できます。

Pythonで連絡文を分類する例

最初は自動返信も転送もせず、画面に結果を出すだけにします。
次は「主な用件」と「今日中の返信要求」を一度のリクエストで聞く、自作のサンプルです。

導入編の仮想環境でuse_jev.pyとして保存してください。
実行時にAPIキーを非表示入力します。通常のターミナルで使い、非表示入力ができないという警告が出たら中止してください。実行するとAPIへの送信と、利用条件に応じた課金が発生します。

import os
from getpass import getpass
from typesafe_sdk import Choice, Noul, TypeSafeClient

os.environ["TYPESAFE_API_KEY"] = getpass("TypeSafe API key: ")
message = "保存ボタンを押すとエラーになります。今日中に確認して返信してください。"

with TypeSafeClient() as client:
    result = client.system_one(
        state={"message": message},
        questions={
            "kind": Choice(
                instructions="`message`に書かれた主な用件を一つ選んでください。",
                criteria={
                    "question": "使い方や仕様についての質問。動作不良の報告は含めない。",
                    "bug": "期待した操作ができない、またはエラーが出るという報告。",
                    "other": "上記に該当しない、または用件が読み取れない。",
                },
            ),
            "reply_today": Noul(
                instructions="`message`は今日中の返信を明示的に求めていますか?"
            ),
        },
    )

kind = result.answers["kind"]
print("分類:", kind.choice)
print("候補ごとの確率:", kind.probabilities)
print("confidence:", kind.confidence)
print("今日中の返信を求める確率:", result.answers["reply_today"].noul)
print("確認待ち:このサンプルは返信や転送を実行しません。")

Windowsでは.\.venv\Scripts\python.exe use_jev.py、macOSやLinuxでは.venv/bin/python use_jev.pyで実行します。
これは公式のPython SDKの呼び出し方に合わせた例で、実測の出力値は掲載していません。

kindなどの質問IDは、プログラムが結果を取り出すための名前です。
ID自体はモデルへ渡されないため、instructionsに「どの文章の、何を判定するか」を書きます。「その他」を入れておけば、用意した分類に収まらない入力も扱えます。

Scoreは段階の説明を先に決める

不具合報告を「詳しいかどうか」で測りたいなら、何をもって詳しいとするかを決めます。
たとえば、操作の記載なし、操作だけ記載、操作と発生結果を記載、という3段階です。

from typesafe_sdk import Score

detail_question = Score(
    instructions="不具合報告の`message`には、操作と発生結果がどこまで書かれていますか?",
    criteria=[
        "操作内容の記載がない。",
        "操作内容はあるが、発生結果が書かれていない。",
        "操作内容と発生結果の両方が書かれている。",
    ],
)

この断片は質問を作るだけです。前のサンプルでquestionsへ"detail": detail_questionを追加すれば、同じ文章について一緒に聞けます。
値は段階の間にもなり得ます。たとえば仮の値1.4を「正答率140%」と読むことはできません。段階の定義と合わせて扱います。

confidenceが高ければ任せていい?

confidenceは、候補ごとの確率がどれだけ一つに集中しているかをまとめた指標です。
「0.9なら、この処理全体が90%正しい」と保証する数値ではありません。Noulには別のconfidence項目はありません。公式のconfidence解説

最初は全件を人が確認し、間違いを記録します。
そのうえで、誤分類しても戻せる仕分けに限って自動化を検討します。返金、データ削除、外部への送信は別の承認条件を持たせ、確率だけで実行しない設計にします。

公式のChoiceの反復検証例でも、迷う結果を人の確認へ回す方法が示されています。
同じ答えを繰り返すことと、その答えが正しいことも別です。例に出てくるしきい値を、そのまま自分の業務の合格基準にはしません。

日本語で使う前に確かめたいこと

公式モデル一覧では、主な学習言語は英語で、他言語は同じ精度ではないと説明されています。
日本語を入力できることと、日本語の仕事を安心して任せられることは分けて確認する必要があります。

  1. 架空の文章で、質問、動作不良、その他をそれぞれ試す。
  2. 「今日中でなくてよい」のような否定文を加える。
  3. 二つの用件が混ざった文や、短すぎる文を試す。
  4. 人の正解と、分類結果、確率、モデルの版を記録する。
  5. 失敗の傾向を見て質問と候補を直し、別の文章で確かめる。

確認時点のjev-latestはjev-1.13.0を指しますが、latestの中身は更新されます。
運用の判定基準を作った後は、モデルの版を記録し、更新時に再検証します。

最初に任せるなら、元に戻せる分類から

Jevの結果だけで公開や送信まで進めると、分類の間違いがそのまま外へ出ます。
まずは手元のメモに仮のラベルを付ける、架空の問い合わせを仕分ける、といった作業で結果を見比べるほうが、質問の直し方も見つけやすくなります。

Jevは判断を返し、実際に何をするかは周囲のプログラムが決めます。
最初のサンプルを結果表示だけにしてあるのも、その境目を残すためです。