コンテンツにスキップ

Jev

Jev は、TypeSafe AI の判断のためのモデルです。文章は書かず、渡されたものについての型の付いた質問に、どれだけ確かかを添えて答えます。jev のタスクは、タスクの結果の型が求める質問を一回のリクエストで Jev に尋ね、その型の値を受け取ります。この結果は、ほかのタスクの結果と同じく match で分岐に使うことも、規則に渡すこともできます。確信度が足りない答えは、タスクが名前を付けたエラーで呼び出しを失敗させるので、フローはそのエラーを呼び出したところで処理します。

問い合わせの例は、問い合わせの種類を Jev に選ばせ、Jev が確信を持てないときは、エージェントがほかのことと一緒に読んだ種類を使います (examples/inquiry)。

task 種類を選ぶ(本文: string) -> 振り分け.種類
  jev "この問い合わせの種類はどれか"
    返品 "商品を返したい、交換したい"
    配送 "荷物が遅れている、届かない、壊れていた、どこにあるか知りたい"
    請求 "請求、支払い、返金のこと"
    その他 "上のどれでもない"
  model "jev-1.13.0"
  confidence 0.8 else 迷い
  timeout 10 seconds
  retry 2 times every 1 second

flow
  …
  let 種類 = 種類を選ぶ(本文: 問い合わせ.本文)
    on 迷い, failure => let 種類 = 読み.種類
  let 判定 = 振り分け(種類: 種類, 会員: 問い合わせ.会員)

結果の型が質問になる

タスクの結果 Jev に尋ねること 結果になる値
列挙で、jev "<質問>" 列挙の値からの選択(choice)。下に、値ごとの意味を書く。書かなかった値は意味なしで送る Jev が選んだ値
列挙で、jev score "<質問>" 段階(score)。列挙の値を低い段階から順に並べ、すべてに意味を書く(2 から 10 段階) Jev の答えにいちばん近い段階。ちょうど真ん中なら上の段階
bool で、jev "<質問>" はいかいいえ(noul)。下に true と false の意味を、両方書くか、どちらも書かない はいの確率が半分を超えれば true
レコードで、jev だけ フィールドごとに上のどれかを尋ねる。すべて一回のリクエストで尋ねる 答えを並べたレコード

引数は、引数ごとに一つのフィールドにして、Jev への入力(state)として渡します。Jev は、選択の値を名前と意味で見分け、score の段階を書いた意味だけで見分けます。意味は「どれくらい」ではなく、Jev が当てはめられる具体的な場面として書きます。

レコードのフィールドには、ほかのフィールドの答えの確信度を率で受け取らせることもできます。審査の例は、申込がどの段階に当たるかを Jev に答えさせ、その確信度を規則に渡します (examples/review)。

record 採点
  判断   : 方針.判断
  確信度 : rate[step 1%]  range >=0 <=100

task 採点する(用途: string) -> 採点
  jev
    判断 score "資金は、どれだけはっきり事業に使われるか"
      却下 "私用や投機、法に反することに使う"
      保留 "事業に使うが、何に払うのかがはっきりしない"
      承認 "仕入れ、設備、人件費、店舗など、事業のはっきりした費目に使う"
    確信度 confidence of 判断
  model "jev-1.13.0"

rate[step 1%] は 1% 刻みの個数で、端数は切り捨てます。確信度 0.87 なら 87 です。rulec の率も同じ形でやりとりするので、この値はそのまま規則に渡せます。

Jev は文章を書かないので、それ以外の型の結果はエラーにします (tests/fixtures/jev.flow)。

エラー[E007]: tests/fixtures/jev.flow:38:3: Jev が答えるのは、列挙の値のどれか、列挙の値を低いものから並べた段階のどこか(`score`)、はいかいいえ(`bool`)と、それらを並べたレコードです。文章は書きません。結果は `string` です
    38 |   jev "要点は何か"

どれだけ確かなら使うか

選択と段階の答えには、Jev がどれだけ確かかを表す確信度(confidence、0 から 1)が付きます。TypeSafe が確率の散らばり方から計算した値です。はいかいいえの答えにはこの数が無いので、dandori は、選んだ答えの確率をそのまま確信度とみなします。はいの確率が 0.9 なら「はい」で確信度 0.9、0.3 なら「いいえ」で確信度 0.7 です。

confidence 0.8 else 迷い と書くと、確信度が 0.8 に届かない答えが一つでもある呼び出しは、エラー 迷い で失敗します。このエラーはこの行で宣言したことになります。フローは、ほかの宣言したエラーと同じく、呼び出したところで処理し、検査もそれを確かめます。尋ね直しても Jev はほぼ同じように答えるので、retry の対象にはなりません。

答えを使ってよい確信度が、その答えで何をするかによって違うときは、確信度を規則に渡し、規則の表で決めます。審査の例の規則は、90% 以上ならそのまま承認し、80% 以上ならそのまま却下し、それ以外は人に回します。表に抜けがないことは、rulec が確かめます。

  let 結果 = 採点する(用途: 申込.用途)
    on failure => fail 採点不能 "申込 {申込.id} を採点できませんでした"
  let 判定 = 方針(判断: 結果.判断, 確信度: 結果.確信度)
  match 判定.決定
    承認, 却下 => pass
    人に回す =>
table 決め方(act)
policy unique
| 判断 | 確信度 | -> 決定  |
| 承認 | >=90%  | 承認     |
| 承認 | <90%   | 人に回す |
| 却下 | >=80%  | 却下     |
| 却下 | <80%   | 人に回す |
| 保留 | -      | 人に回す |

確信度の意味は Jev のバージョンごとに違うので、確信度の下限を書くタスクや確信度を受け取るタスクには、合わせたバージョンを書きます。jev-latest と jev-preview はエイリアスで、何もしなくても新しいバージョンに移るので、検査が警告します。

警告[W032]: tests/fixtures/jev.flow:192:3: `jev-latest` はエイリアスで、ここを変えなくても Jev の新しいバージョンに移ります。確信度の意味はバージョンごとに違うので、確信度を合わせたバージョンを `model "jev-1.13.0"` のように書いてください
   192 |   model "jev-latest"

どこへ送るか

どのプラットフォームも、同じリクエストを送ります。入力(state)、モデル、質問を、https://api.typesafe.ai/v1/systemone に POST します。答えの読み方も、どのプラットフォームでも同じです。

  • Step Functions では、HTTP Task から送ります。TypeSafe の API キーは、タスクの connection に書いた EventBridge の接続に、ヘッダ Authorization: Bearer <キー> として置きます。HTTP Task が一回のリクエストを待てるのは 60 秒までなので、それを超える timeout はビルドできません(E050)。
  • ほかのプラットフォーム向けに生成したコードは、Transport を通して送ります。キーは TYPESAFE_API_KEY から読むか、Transport の typesafe オプションで渡します。

TypeSafe の API は、エラーを HTTP ステータスで伝えます。レート制限に達すると 429、混み合っていると 529 です。名前で処理したりリトライしたりしたいものは、errors 混雑 = 429, 過負荷 = 529 のように宣言します。宣言していないステータスは failure になります。答えが無いときや、答えが質問に合わないとき(列挙に無い値や、確信度の無い選択)は、結果が型に合わないので、ほかのタスクの型に合わない結果と同じく実行を終えます。

使う前に

  • Jev は 2026 年 9 月の時点で早期アクセスで、API はまだ変わるかもしれません。
  • TypeSafe によれば、Jev がいちばん正確なのは英語です。日本語などほかの言語も扱えますが、精度は落ちます。自分の文章で試してください。2026 年 9 月 29 日に jev-1.13.0 で試したときは、種類のはっきりした問い合わせは、英語でも日本語でも確信度 0.99 以上で正しい種類になりました。一方、「靴のサイズが合わないので、代金を返してほしいです」は 請求 で確信度 0.36(返品 が 0.48)でした。同じ内容の英語は returns で 0.96 です。confidence 0.8 なら、この問い合わせはエージェントが読んだ種類に回ります。
  • Jev は計算、数を数えること、日付の比較が苦手です。それはコードや規則に任せ、Jev には判断だけを尋ねます。
  • テストでは、Jev の呼び出しにテスト用の Transport が TypeSafe の API リファレンスにある形の答えを返し、既定の Transport が送るリクエストはこのマシンの中で確かめます。TYPESAFE_API_KEY があれば、Jev のタスクを一つずつ本物の TypeSafe にも送ります(どうやって確かめているか)。