JEV - 返るのは分布だけ、二つの demo

二つの例は閉じた選択だけを問います。サポートを人へ切るかどうか、そして結合を通すかどうかです。戻るのは分布です。公開されている遅延は約 70 から 500 ミリ秒のままで、ある一回のデモのミリ秒数ではありません。

JEV - 返るのは分布だけ、二つの demo

共著者:folkbench.com (Folkbench は、AI API、モデルサービス、関連サイト向けの、検証できる評価・選定プラットフォームです。公開されたサービス情報、価格、可用性、レイテンシ、証拠の期間をもとに、利用者が経路を比較して選べるようにします。)

この一連は、十篇です。

二つのデモは同じ仕事です。自由なテキストはなく、閉じた問いだけで、分岐は分布から取ります。下の JSON とコードは呼び出しの形であり、計時の報告ではありません。公開されている端から端までは約 70 から 500 ミリ秒です。ある 18 ミリ秒の実行を製品の数字として書き残さないでください。見る価値があるのは、応答に token ごとの文がないことです。

サポート:意図と遮断

場面

サポートが恐れるのは、システムがまだ打っているあいだに、すでに怒っている利用者です。意図に生成モデルを使うと、正確さの名のもとに、最初の token と生成された JSON の塊を待つことが多くなります。裸の正規表現は、要点の周りを話す怒りを読み落とします。欲しいのは閉じた分類であり、そのあとすぐ、人へ渡すかどうかの決定です。

状態と選択肢

これは Choice であり、Noul ではありません。Noul は、はいか否かに答えます。ここには三つの選択肢があります。

[State]
scene: live support entry
rule: assign probability across the given options from the message text

[user]
I have waited three days. The shipment has not moved. Are you even alive? Refund me now, or I escalate.
{
  "question": "choice",
  "options": [
    {"id": "GENERAL", "description": "ordinary question or tracking, no strong emotion"},
    {"id": "REFUND", "description": "a clear return or refund, stated flatly"},
    {"id": "BREAKER", "description": "insult, threat, or a complaint that should break to a person"}
  ]
}

戻るのは分布です

文字を吐くカーソルはありません。形は表であり、評ではありません。

{
  "top": "BREAKER",
  "scores": [
    {"choice": "BREAKER", "score": 0.9241},
    {"choice": "REFUND", "score": 0.0715},
    {"choice": "GENERAL", "score": 0.0044}
  ]
}

数字はこの例の中の分布であり、分岐を書くためのものです。公開された基準ではありません。モデルは与えられた選択肢の上に確率を割り当てます。次の文字を予測しているのではありません。

コードがどう受け取るか

async function handleIncomingCustomerMessage(userMessage: string) {
  const res = await jev.choice("cs_intent_v1", { input: userMessage });
  const breaker = scoreOf(res, "BREAKER");
  if (breaker > 0.85) {
    return triggerHumanOverride({ priority: "CRITICAL", queue: "RETENTION" });
  }
  if (scoreOf(res, "REFUND") > 0.70) {
    return launchWorkflow("AUTOMATED_REFUND_FLOW");
  }
  return launchWorkflow("DEFAULT_FAQ_BOT");
}

Markdown を解析することだけが仕事の、余分な再試行はありません。閾値はコードの中にあります。0.85 と 0.70 はこの流れ自身の方針です。モデルからの保証ではありません。

結合前の点検

場面

静的な走査は構文木と死んだ規則に寄りかかります。変種はすり抜け、誤報もよくあります。対話のモデルに 500 行の diff を読ませて評を書かせると、しばしば何秒もかかります。管路は待てず、プログラムは散文から「通る」も「落ちる」も読めません。diff を状態として扱い、Choice を一つ問ってください。通す、人が見る、または止める、です。

状態と選択肢

[Git diff]
PR #1042
file: src/auth/session.ts

+  // skip expiry outside production, or when the token starts with test_admin_
+  if (process.env.NODE_ENV !== 'production' || token.startsWith('test_admin_')) {
+    return session;
+  }
{
  "question": "choice",
  "options": [
    {"id": "PASS", "description": "harmless refactor, docs, or ordinary logic"},
    {"id": "WARN", "description": "config, dependency, or a non-sensitive refactor; a person should look"},
    {"id": "BLOCK", "description": "backdoor, hardcoded secret, privilege jump, auth bypass, injection"}
  ]
}

本番で期限を飛ばす test_admin_ 接頭辞は、認証の回避です。例では、分布が BLOCK を 0.98 の近くに置きます。その節を消し、「本番の外でのみ飛ばす」だけを残すと、同じ問いは阻止から人の目へ移ります。問いはそう使います。約束されたミリ秒の組ではありません。

管路がどう受け取るか

def audit_pr_diff(diff_text: str) -> int:
    result = jev.choice(
        question="pr_security_v2",
        state=diff_text,
        options=["PASS", "WARN", "BLOCK"],
    )
    scores = result.scores
    if result.top == "BLOCK" and scores["BLOCK"] > 0.80:
        print("high-risk auth change")
        return 1
    if result.top == "WARN":
        mark_review_required()
        return 0
    return 0

内部サービスのアドレスで足ります。これを、公開の場がすでにあなたの代わりに Jev を出しているとは読まないでください。管路が読むのは最上の選択肢と点数です。人がまだ書かれた評を必要とするなら、書けるモデルに問ってください。その散文をこの問いへ押し戻さないでください。

数を返すインターフェースを呼ぶように

二回の実行は、一つの事実を具体にします。複雑な判断はモデルの内部に残り、外に残るのは確率だけです。Noul、Choice、Score は三つの格子であり、三つの雑談の型ではありません。

経路、リスク、結合前の点検、方針の機械、Agent の分岐。まずその段が閉じた問いとして書けるかを問ってください。書けるなら、生成を待たないでください。書けないなら、この種の呼び出しに装わないでください。

シリーズ