JEV - Dua demo yang hanya mengembalikan distribusi

Kedua contoh hanya menanyakan pilihan tertutup: apakah dukungan harus putus ke orang, dan apakah sebuah penggabungan harus lolos. Yang kembali adalah distribusi. Latensi yang diterbitkan tetap sekitar 70 sampai 500 milidetik, bukan angka milidetik satu demo.

JEV - Dua demo yang hanya mengembalikan distribusi

Penulis bersama: folkbench.com (Folkbench adalah platform evaluasi dan pemilihan yang dapat ditinjau untuk API AI, layanan model, dan situs terkait. Platform ini memakai informasi layanan yang sudah diterbitkan, harga, ketersediaan, latensi, dan jendela bukti untuk membantu pengguna membandingkan dan memilih jalur.)

Sepuluh tulisan dalam seri ini:

Kedua demo adalah pekerjaan yang sama: tidak ada teks bebas, hanya pertanyaan tertutup, dan cabang diambil dari distribusi. JSON dan kode di bawah adalah bentuk sebuah panggilan, bukan laporan waktu. Rentang ujung ke ujung yang diterbitkan sekitar 70 sampai 500 milidetik. Jangan menuliskan suatu jalan 18 milidetik sebagai angka produk. Yang patut dilihat adalah bahwa jawaban tidak berisi kalimat token demi token.

Dukungan: maksud dan pemutus

Adegan

Dukungan takut pada pengguna yang sudah marah sementara sistem masih mengetik. Memakai model generatif untuk maksud sering berarti menunggu token pertama dan gumpalan JSON yang dihasilkan, demi ketepatan. Ekspresi reguler yang telanjang melewatkan marah yang berbicara memutar. Yang diinginkan adalah klasifikasi tertutup, lalu keputusan segera tentang serah ke orang.

Keadaan dan pilihan

Ini Choice, bukan Noul. Noul menjawab ya atau tidak. Ada tiga pilihan di sini.

[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"}
  ]
}

Yang kembali adalah distribusi

Tidak ada kursor yang memuntahkan karakter. Bentuknya tabel, bukan ulasan.

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

Angka-angka itu adalah distribusi di dalam contoh ini, supaya cabang bisa ditulis. Itu bukan tolok ukur yang diterbitkan. Model memberi probabilitas pada pilihan yang diberikan. Ia tidak meramalkan karakter berikutnya.

Bagaimana kode menerimanya

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");
}

Tidak ada ulang ekstra yang satu-satunya kerja adalah mengurai Markdown. Ambang duduk di kode. 0.85 dan 0.70 adalah kebijakan alur ini. Itu bukan jaminan dari model.

Tinjauan sebelum penggabungan

Adegan

Pemindaian statis bersandar pada pohon sintaksis dan aturan mati. Varian menyelinap, dan alarm palsu biasa terjadi. Meminta model percakapan membaca diff 500 baris dan menulis ulasan sering butuh banyak detik. Saluran tidak bisa menunggu, dan program tidak bisa membaca "lolos" atau "gagal" dari prosa. Perlakukan diff sebagai keadaan, dan tanyakan satu Choice: lolos, orang harus melihat, atau blokir.

Keadaan dan pilihan

[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"}
  ]
}

Awalan test_admin_ yang melewati kedaluwarsa di lingkungan produksi adalah pengelakan autentikasi. Dalam contoh, distribusi menaruh BLOCK dekat 0.98. Hapus klausul itu dan sisakan hanya "lewati di luar lingkungan produksi", dan pertanyaan yang sama berpindah dari blokir ke pandangan manusia. Begitulah pertanyaan dipakai. Itu bukan sekumpulan milidetik yang dijanjikan.

Bagaimana saluran menerimanya

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

Alamat layanan internal sudah cukup. Jangan baca ini sebagai situs publik yang sudah menawarkan Jev atas nama Anda. Saluran membaca pilihan teratas dan nilai-nilainya. Jika seseorang masih butuh ulasan tertulis, tanyakan model yang bisa menulis. Jangan dorong prosa itu kembali ke pertanyaan ini.

Seperti memanggil antarmuka yang mengembalikan angka

Dua jalan membuat satu fakta menjadi konkret: penilaian yang rumit tinggal di dalam model, dan di luar hanya probabilitas yang tinggal. Noul, Choice, dan Score adalah tiga kisi, bukan tiga gaya mengobrol.

Pengarahan, risiko, pemeriksaan sebelum penggabungan, mesin kebijakan, cabang Agent: tanyakan lebih dulu apakah langkah itu bisa ditulis sebagai pertanyaan tertutup. Jika bisa, jangan menunggu sebuah generasi. Jika tidak bisa, jangan mendandaninya sebagai panggilan semacam ini.

Seri