Jevの既知の弱点とは|jev-1.13の9つの苦手と回避策、日本語の精度、データの扱い
TypeSafe AIが公開するjev-1.13の9つの弱点(文字どおりの読み取り、計算、日付、間接参照、敵対的入力など)と公式の回避策、日本語の注意点、学習不使用とZDRの方針をまとめます。

Noul(ヌール)は、TypeSafe AI の Jev に yes/no の質問を評価させ、答えが yes である確率を 0 から 1 の数値ひとつで返す質問型です。
Jev(ジェヴ)に「はい/いいえ」を聞くとき、質問文をどう書けば安定した答えが返るのか迷う人は多いはずです。
結論から言うと、Noul(ヌール)は「高い確率 = はい」になる一文を instructions(指示文)に書き、返ってきた 0-1 の数値をコード側のしきい値で真偽に変える、という型です。
業務の自動化では、この1つの数値が if 文の条件になります。
公式ドキュメントの Noul のページでは、Noul は yes/no の質問を評価し、答えが yes である確率を返す質問型だと定義されています。
答えは noul という 0 から 1 の数値ひとつで、Choice や Score と違って confidence(信頼度)は別途返りません。
| フィールド | 必須 | 内容 |
|---|---|---|
type | はい | "noul" 固定 |
instructions | はい | 評価する yes/no の質問、または文 |
criteria | いいえ | true と false の説明。「はい」「いいえ」が何を指すかを補足する |
公式ドキュメントは、高い確率が「はい」を意味するように質問を書くのがよい習慣だとしています。
「顧客は返金を求めていないか」のような否定形だと、0.9 が何を意味するのか読み手にもコードにも曖昧になります。
疑問文だけでなく「the customer is requesting a refund」のような平叙文を真偽判定させる書き方もでき、両方を試して合う方を選ぶよう案内されています。
criteria(基準)は省略可能で、多くの Noul は instructions だけで足りるとされています。
「以前にも問い合わせたことがあるか」のように「はい」の境界が微妙な質問では、true に「過去の試行やチケットに言及している」、false に「過去の接触の形跡がない」と書いて境界を固定します。
1 に近ければ強い「はい」、0 に近ければ強い「いいえ」、0.5 付近は両方が同程度という読み方です。
コードが硬い判断を必要とする場面では、たいてい noul をしきい値で真偽値に変換すると説明されており、0.8 以上なら自動処理、0.4-0.8 なら人の確認、のように自分の業務の許容度で決めます。
Noul のページの例は、サポートへのメッセージに対して criteria なしとありの Noul を同時に聞いています。
{
"state": "I have asked three times now. Can I please just talk to a real person?",
"model": "jev-latest",
"questions": {
"is_human_escalation": {
"type": "noul",
"instructions": "Is the customer asking for a human agent?"
},
"is_repeat_contact": {
"type": "noul",
"instructions": "Has the customer contacted support about this before?",
"criteria": {
"true": "Mentions a prior attempt, ticket, or that they have asked before",
"false": "No sign of any previous contact"
}
}
}
}レスポンスは質問 ID ごとに noul が1つずつ返ります。
{
"model": "jev-latest",
"answers": {
"is_human_escalation": {
"type": "noul",
"noul": 0.99
},
"is_repeat_contact": {
"type": "noul",
"noul": 0.93
}
},
"usage": {
"input_tokens": 360,
"output_tokens": 39
}
}Python SDK では、Primitives のページにあるとおり Noul オブジェクトで質問を定義します。
from typesafe_sdk import Noul
questions = {
"refund_requested": Noul(
instructions="Does the customer request a refund?",
),
}この辞書を client.system_one(state=..., questions=...) に渡すと、response.answers["refund_requested"].noul で数値を取り出せます。
state(状態)は日本語でも送れますが、Models のページでは CJK は英語ほどの精度ではないとされているため、自分のデータで試してから運用に載せる前提です。
{
"state": "もう3回も問い合わせています。人のオペレーターと話をさせてもらえませんか。",
"model": "jev-latest",
"questions": {
"is_human_escalation": {
"type": "noul",
"instructions": "Is the customer asking for a human agent?"
}
}
}公式が挙げる悪い例は「Is the candidate strong in Python?」です。
「強い」の定義がないと確率の解釈ができず、しかも 0.5 は「中程度のスキル」ではなく「はいといいえが半々」を意味します。
スキルの高さを測りたいなら、未経験、多少の知識、日常的に使用、深い専門性、のように段階を決めた Score を使うよう案内されています。
yes/no の判断が欲しいなら「職務経歴書に、業務で Python を使ったと書かれているか」のように条件を明確にする、というのが公式の言い直しです。
| 型 | 使う場面 | コードでの受け方 |
|---|---|---|
| Noul | 答えが yes/no で、確率そのものが信号になる | if の条件 |
| Choice | 順序のない既知の選択肢から1つ選ぶ | 選択肢ごとの分岐 |
| Score | 程度が段階の上に乗り、各段階を説明できる | しきい値 |
カスタマーサポート。「人の担当者を求めているか」「以前にも連絡しているか」を同時に聞き、両方が高ければ優先キューに入れられます。
人事・採用。「分散システムの経験に触れているか」のような記載の有無を Noul で、スキルの深さは Score で分けて聞くと、確率の意味が混ざりません。
宿泊・不動産。公式の例にある「部屋にミニ冷蔵庫はあるか」のように、説明文から設備の有無を大量に判定し、検索用のフラグ(目印)を作れます。
| Noul が向くこと | Noul に向かないこと |
|---|---|
| 事実の有無や意図の確認 | 「強い」「良い」のような程度の判定 |
| 確率をそのまましきい値に使う分岐 | 3つ以上の選択肢からの選別 |
Noul は yes/no の質問を instructions に書き、必要なら criteria で境界を固め、0-1 の noul をしきい値で真偽に変える質問型です。
核心は、「はい」の定義を人ではなく質問文と基準に書き切ることにあり、それができない問いは Score や Choice に置き換えるのが公式の指針です。
次の一手は、自分の業務で「はい/いいえで答えられる問い」を疑問文と平叙文の両方で書き、同じ state に対してどちらが安定するかを試すことです。
そこで決めたしきい値が、あなたの自動化の最初の分岐になります。