JEV - Два demo, которые возвращают только распределение
Оба примера спрашивают только закрытый выбор: передавать ли поддержку человеку, и пропускать ли слияние. Назад приходит распределение. Опубликованная задержка остаётся около 70 до 500 миллисекунд, а не цифра миллисекунд одного demo.

Соавтор: folkbench.com (Folkbench — проверяемая платформа оценки и выбора для API ИИ, модельных сервисов и связанных сайтов. Она опирается на опубликованные сведения о сервисе, цены, доступность, задержку и окна доказательств, чтобы помочь пользователям сравнить варианты и выбрать путь.)
Десять текстов в этой серии:
- JEV - Суставу не нужен мозг
- JEV - Смазка на узлах управления
- JEV - От BERT обратно к одному распределению
- JEV - Проектировать закрытый вопрос, не заклинание
- JEV - Анти-token книга не выпустит это первой
- JEV - Два demo, которые возвращают только распределение
- JEV - Выйти из цикла: уверенность пишется в код
- JEV - За чертой умнее уже не продукт
- JEV - Интуиция и разум: вопросы, которые ему не задают
- JEV - От экрана к голой вероятности
Оба demo — одна и та же работа: никакого свободного текста, только закрытый вопрос, и ветка берётся из распределения. JSON и код ниже — это форма вызова, а не отчёт о времени. Опубликованный интервал от конца до конца — около 70 до 500 миллисекунд. Не записывайте какой-нибудь прогон в 18 миллисекунд как цифру продукта. Смотреть стоит на то, что в ответе нет предложения token за 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 — политика этого потока. Это не гарантия модели.
Разбор перед слиянием
Сцена
Статические проверки опираются на синтаксическое дерево и на мёртвые правила. Варианты проскакивают, и ложные срабатывания часты. Просить модель беседы прочитать diff в 500 строк и написать отзыв часто занимает много секунд. Конвейер ждать не может, и программа не может прочитать из прозы «прошёл» или «не прошёл». Считайте 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: сначала спросите, можно ли записать шаг как закрытый вопрос. Если можно, не ждите порождения. Если нельзя, не наряжайте это в вызов такого рода.
Серия
- Предыдущая: JEV - Анти-token книга не выпустит это первой
- Следующая: JEV - Выйти из цикла: уверенность пишется в код