Jev — 意思決定モデル
MarkdownTypeSafeの意思決定モデルJevは、テキストやJSONに関する型付きの質問に回答します。選択肢からの選択、尺度に基づく評価、「はい/いいえ」を確率付きで返します。チャットやテキスト生成のモデルではありません。
完全ガイド
https://api.ailoot.ai/v1/systemonecurl https://api.ailoot.ai/v1/systemone \
-H "Authorization: Bearer $AILOOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "jev-latest",
"state": "助けてください! 3日間、私への払い出しが失敗し続けています。",
"questions": {
"is_urgent": {
"type": "noul",
"instructions": "緊急性が伝わる内容ですか?"
}
}
}' import json, os, urllib.request
body = {
"model": "jev-latest",
"state": "助けてください! 3日間、私への払い出しが失敗し続けています。",
"questions": {
"is_urgent": {"type": "noul", "instructions": "緊急性が伝わる内容ですか?"},
},
}
req = urllib.request.Request(
"https://api.ailoot.ai/v1/systemone",
data=json.dumps(body).encode(),
headers={"Authorization": "Bearer " + os.environ["AILOOT_API_KEY"],
"Content-Type": "application/json"},
)
with urllib.request.urlopen(req, timeout=60) as resp:
result = json.load(resp)
print(result["answers"]["is_urgent"]["noul"]) # 0.95const resp = await fetch("https://api.ailoot.ai/v1/systemone", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.AILOOT_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "jev-latest",
state: "助けてください! 3日間、私への払い出しが失敗し続けています。",
questions: {
is_urgent: { type: "noul", instructions: "緊急性が伝わる内容ですか?" },
},
}),
});
const result = await resp.json();
if (!resp.ok) throw new Error(`${resp.status} ${JSON.stringify(result)}`);
console.log(result.answers.is_urgent.noul); // 0.95{
"model": "jev-1.13.0",
"answers": {
"is_urgent": {
"type": "noul",
"noul": 0.95
}
},
"usage": { "input_tokens": 296, "output_tokens": 20 }
}Jevは、TypeSafeのSystem Oneクラスの意思決定モデルです。テキスト生成や会話は行いません。入力するのは 状態 (state) を表すテキストまたはJSONと、 質問の集合です。レスポンスでは、確率付きの型付き値が返されます。コードは自由形式のテキストを解析せず、その値を直接使って分岐、並べ替え、ルーティングを行えます。
一つのリクエストに含まれる質問はすべて、互いに独立して並列に評価されます。評価対象は同じ stateです。TypeSafeによると、質問を追加しても応答時間はほとんど変わらず、質問同士が干渉することもありません。
| 項目 | 概要 |
|---|---|
| モデル | jev-latest はJevの最新安定版を指すエイリアスです; カタログのモデルカード |
| メソッド | POST /v1/systemone。チャットではないため、JevにはOpenAI、Anthropic、Geminiの形式は使えません。レスポンスは一つのJSONとして全体が返されます。 |
| 受け付ける入力 | テキストのみ。文字列、JSONオブジェクト、テキストの配列を受け付けます。画像、音声、動画は、あらかじめテキストに変換してください。 |
| コンテキスト | リクエスト全体で64Kトークンまで。stateとすべての質問の合計です。stateと最も長い質問の合計は32Kまで。 |
| 言語 | TypeSafeによると、英語で最も高い精度を発揮します。他の言語も受け付けますが精度は下がるため、ご自身のデータで検証してください。 |
| 料金 | 入力は$0.084/1百万トークン、出力は無料 |
リクエスト
認証
- Authorizationheader必須
Ailootキーの形式:
Bearer sk-…。
リクエストボディ
- modelstring必須
jev-latest。 - statestring | object | array必須
評価対象。テキストの文字列またはJSONで、顧客からの問い合わせ、データベースのレコード、やり取り、アプリケーションの現在の状態などを渡します。通常は、一つの文字列より、意味が分かるフィールド名を持つオブジェクトの方が扱いやすくなります。
- questionsobject必須
質問。キーは自由に指定でき、同じキーで回答が返ります。キーは回答内容に影響しません。質問自体を指定するフィールドは
instructions。 - questions.*.typestring必須
noul,choiceまたはscore。以下を参照してください。 - questions.*.instructionsstring | object | array必須
質問そのもの。データを含む長い質問は、質問を一つのフィールドに、データを他のフィールドに入れたオブジェクトとして渡せます。フィールドを参照する際は、名前をバッククォートで囲んでください。
- questions.*.criteriaobject | array
回答の選択肢。形式はタイプごとに異なります。noulでは「はい」と「いいえ」の説明(任意)、choiceでは選択肢の辞書、scoreでは順序付きの評価段階のリストです。
質問のタイプ
| タイプ | 質問の内容 | 返される値 |
|---|---|---|
noul | 命題が正しいか:「はい」か「いいえ」か | noul は「はい」の確率を0から1で表します |
choice | 指定した選択肢のうち、どれが適切か | choice, probabilities, confidence |
score | stateが、指定した評価尺度のどの段階に当たるか | score, legend, probabilities, confidence |
一つのリクエストで複数のタイプを組み合わせられます。
noul — はい/いいえ
フィールド criteria は任意です。「はい」(true)と「いいえ」(false)の意味を記述できます。レスポンスの noul は、0(いいえ)から1(はい)の数値です。
"is_urgent": {
"type": "noul",
"instructions": "緊急性が伝わる内容ですか?",
"criteria": {
"true": "時間的な切迫性が明示されている",
"false": "緊急性が表明されていない"
}
}"is_urgent": {
"type": "noul",
"noul": 0.95
}choice — 選択肢の選択
criteria は「選択肢 → 説明」の辞書です。説明が不要な場合は nullを指定してください。最大255の選択肢を指定できます。レスポンスの choice は最も確率の高い選択肢、 probabilities は各選択肢の確率(合計1)、 confidence は0から1の確信度です。
"department": {
"type": "choice",
"instructions": "どのチームが対応すべきですか?",
"criteria": {
"billing": "支払い、請求書発行、返金",
"technical": "バグ、障害、連携",
"sales": "価格設定、アップグレード、新規顧客"
}
}"department": {
"type": "choice",
"choice": "billing",
"probabilities": { "billing": 0.88, "technical": 0.12, "sales": 0.0 },
"confidence": 0.81
}score — 尺度に基づく評価
criteria は低い段階から高い段階へ並べたリストで、最大10段階です(TypeSafeは二段階以上を推奨しています)。レスポンスの score は、各段階の確率で重み付けした値です(段階と段階の間の値になることもあります)。legend は段階の番号とその説明、 probabilitiesとconfidenceが返されます。TypeSafeによると、 score は閾値との比較に適していますが、段階の間の値を厳密な数値として扱う用途には適していません。
"frustration": {
"type": "score",
"instructions": "顧客はどの程度いら立っていますか?",
"criteria": ["落ち着いている", "いら立っている", "非常に怒っている"]
}"frustration": {
"type": "score",
"score": 1.05,
"legend": { "0": "落ち着いている", "1": "いら立っている", "2": "非常に怒っている" },
"probabilities": { "0": 0.0, "1": 0.95, "2": 0.05 },
"confidence": 0.92
}レスポンス
- modelstring
回答したモデルのバージョン。エイリアスjev-latestは、将来、新しいバージョンを指すようになります。特定のバージョンに合わせて
confidenceの閾値を調整した場合は、このフィールドを確認してください。 - answersobject
各質問に一つの回答が、指定したキーで返ります。すべての回答に
typeがあり、choiceとscoreにはさらにconfidence。 - usageobject
input_tokensとoutput_tokensがあります。課金されるのは入力トークンのみです。
一つのリクエストで複数の質問
同じstateに関する質問は、一つのリクエストにまとめてください。並列に評価され、stateは一度だけ送信されます。TypeSafeの13問の例では、一括リクエストのコストは12,2分の一、処理は10倍高速でした。比較対象は13回の個別リクエストを順に送った場合で、回答は同じでした。
複雑な判断は単純な質問に分解し、コードで回答を組み合わせると扱いやすくなります。たとえば「応募内容を評価」ではなく、市場、実現可能性、競合との差異を個別に評価します。重みは質問文ではなく、コードで変更できます。
{
"model": "jev-latest",
"state": "助けてください! 3日間、私への払い出しが失敗し続けています。",
"questions": {
"department": {
"type": "choice",
"instructions": "どのチームが対応すべきですか?",
"criteria": {
"billing": "支払い、請求書発行、返金",
"technical": "バグ、障害、連携",
"sales": "価格設定、アップグレード、新規顧客"
}
},
"frustration": {
"type": "score",
"instructions": "顧客はどの程度いら立っていますか?",
"criteria": ["落ち着いている", "いら立っている", "非常に怒っている"]
},
"is_urgent": {
"type": "noul",
"instructions": "緊急性が伝わる内容ですか?"
}
}
}適した用途
- ルーティング。 問い合わせを適切な部署に、リクエストを適切な処理先に振り分けます。単純なコード、大規模モデル、人などが処理先になります。
- 並べ替えと優先順位。 緊急度、感情、リスクを尺度で評価し、コードに閾値を設定します。
- モデレーションと検証。 テキストを次の処理へ送る前に、メッセージがルールに違反していないか、引用を出典が裏付けているか、文書に質問への答えがあるかなどを確認します。
- スコアリングとランキング。 独自の評価基準で文書、候補者、検索した断片を評価し、次に使うものをコードで決定します。
- 不安定な「JSONを返して」という指示の代わりに。 解析が必要なテキストではなく、仕組み上、型付きの値を返す呼び出しです。
適さない用途
- チャット、ユーザーへの回答、テキストやコードの生成。 Jevはテキストを生成しません。その用途には テキストモデル。
- Claude Code、Cursorなどのエージェント用モデル。 エージェントのモデルをjev-latestに置き換えることはできません。エージェントには、テキストを生成してツールを呼び出すモデルが必要です。エージェントが書いたコードからJevを呼び出すことはできます。
- 算術、集計、日付の比較。 TypeSafeによると、こうした処理はコードで行う方が確実です。モデルには意味の判断だけを任せてください。たとえばchoiceで日付の構成要素を抽出します。
- 画像、音声、動画。 モデルが受け付けるのはテキストのみです。これらのデータは事前にテキストへ変換してください。
料金
課金されるのは入力トークンのみです。参照するのはレスポンスのフィールド usage.input_tokens です。料金は $0.084/1百万トークン。出力トークンは無料です。
このページのリクエスト例(入力296トークン)の料金は$0.0001未満です。
リクエスト前にAilootが残高から金額を仮確保し、レスポンス後に実際の使用量に基づいて一度だけ残高から差し引きます。詳細:仕組み。
制限
| 項目 | 制限値 |
|---|---|
| リクエスト全体:stateとすべての質問 | 64Kトークン |
| stateと最も長い質問の合計 | 32Kトークン |
| 一つのchoiceの選択肢数 | 255まで |
| 一つのscoreの評価段階数 | 2から10 |
| 入力 | テキストのみ:文字列、JSONオブジェクト、テキストの配列 |
モデルの制限はTypeSafeの情報に基づきます。キーと残高の制限は、他のAilootモデルと同様に適用されます。詳細:エラーと制限。
エラー
エラーはAiloot API共通の形式で返されます。コード、分かりやすい説明、Request IDが含まれます。このメソッドでよく発生するエラー:
| コード | 発生条件 | 対処方法 |
|---|---|---|
400 invalid_request | ボディの検証失敗:state、model、questionsがない、typeが不明、choiceの選択肢が255を超える、scoreの段階が10を超える | エラーテキストに従ってリクエストを修正してください。修正しなければ、再度検証に失敗します。 |
400 context_length_exceeded | stateと質問の合計が、モデルの上限を超えている | コードでstateを絞り込み、質問に必要なデータだけを残してください。 |
401 invalid_api_key | キーがない、または無効 | Authorizationヘッダーでキーを送信してください。 |
402 insufficient_balance | 仮確保に必要な空き残高が不足している | 残高をチャージ |
404 model_not_found, unsupported_endpoint | IDが間違っている、またはモデルを異なるメソッドで呼び出している(例:/v1/chat/completions) | jev-latestはPOST /v1/systemoneでのみ呼び出してください。 |
429 rate_limit_exceeded | リクエストが多すぎる | Retry-Afterヘッダーに指定された秒数だけ待ってから、再試行してください。 |
503 model_overloaded, model_unavailable | モデルが一時的に過負荷、または利用できない | X-Should-Retry: trueの場合はRetry-Afterに指定された秒数後に再試行してください。falseの場合は、先に履歴のRequest IDを確認してください。 |
504 model_timeout | モデルが制限時間内に応答しなかった | 履歴のRequest IDを確認するまで、リクエストを再送しないでください。 |
コードの一覧は次のページにあります:エラーと制限。