Пошаговое руководство по TypeSafe Jev. Практическое руководство по TypeSafe Jev — модели System One для типизированных программных решений.
01
Сформулируйте задачу
Решите, подходит ли Джев
Джев не чат-модель. Он превращает существующее состояние в закрытое решение «Выбор», «Очко» или «Ноул» и возвращает распределение вероятностей.
Хорошая посадка
Используйте Jev для ограниченных решений
Направьте один запрос в одну именованную очередь.
Поместите запись на упорядоченную шкалу риска или качества.
Оцените, верно ли одно четко сформулированное условие.
Не подходит
Вместо этого используйте генеративную модель
Напишите, обобщите, переведите или перепишите открытый текст.
Ведите естественный многоходовой разговор.
Создайте ответ, если действительные выходные данные не могут быть названы заранее.
Официальная ментальная модель
STATE
Одно состояние для оценки
Передайте строку, объект или массив, содержащий текст и связанные с ним факты, необходимые для решения. Используйте поля именованных объектов для большинства реальных запросов.
QUESTIONS
Одно мгновенное суждение на каждый вопрос
Каждый вопрос должен задавать одну конкретную вещь, которую знающий человек мог бы быстро оценить по заданному состоянию.
PARALLEL
Самостоятельные вопросы параллельно
Вопросы в одном запросе видят одно и то же состояние, выполняются независимо и не перетекают один ответ в другой.
CODE
Составляйте ответы в коде
Вес, порог, ветвление и объединение типизированных ответов в обычном коде вместо того, чтобы скрывать логику рабочего процесса в одном приглашении.
Тест на разложение: Если суждение учитывает несколько независимых факторов или требует расширенного обоснования, разбейте его на атомарные вопросы и объедините ответы в коде.
После этой главы:Вы можете отделить задачи создания контента от задач структурированного принятия решений.
Используйте «Выбор» для взаимоисключающих меток, «Оценка» для упорядоченных уровней и «Ноул» для одного истинного или ложного суждения.
Тип
Вы поставляете
Вы получаете
Используйте, когда
choice
Именованные опции → описания
Выбранный ключ + вероятности каждого варианта (+ достоверность)
Взаимоисключающие метки/маршруты
score
Упорядоченные уровни (2–10), низкий → высокий.
Вероятностно-взвешенная оценка уровня + пробные ступени
Категории серьезности, качества и риска
noul
Предложение да/нет (+ дополнительные критерии)
Вероятность истинного
Единичные проверки фактов
choiceДо 255 вариантов
Победитель плюс полная раздача
Используйте для неупорядоченных фиксированных альтернатив. Добавьте другое/нет, если список не может охватывать все штаты. Выбранное значение является вариантом с наибольшей вероятностью.
Используйте для четкого суждения «да/нет». Около 0,5 означает неопределенность, а не среднюю величину свойства. У Ноула нет отдельного доверительного поля.
{
"type": "noul",
"noul": 0.95
}
Оценка – это не точность. Оценка 1,5 по шкале 0–2 — это ожидаемый уровень, а не «75% правильных ответов». Не рассматривайте уверенность в очках или выборе как обещание точности.
После этой главы:Вы можете выбрать правильную форму ответа для маршрутизации, модерации и оценки риска.
Сохраняйте неизменными имена вариантов, определяйте взаимоисключающие границы, включайте остаточный путь и дайте каждому вопросу одно решение.
Написание строгих критериев
Непересекающиеся варианты. Если оба ключа выбора могут быть истинными, операторы будут бороться с моделью.
Опишите края. Скажите, что включает в себя buy_intent (запас, доставка) и Price_question.
Остатки оставляйте в последнюю очередь. Используйте других/человека в качестве запасных люков, а не ленивых ловушек.
Заказать Оценка по возрастанию. Массивы критериев: самый низкий → самый высокий.
Одно решение на каждый вопрос. Разделите «маршрут» от «срочности» на отдельные ключи.
Анатомия вопроса
question_id
Ключ поиска ответа для вашего кода. Он не отправляется модели, поэтому инструкция все равно должна содержать полный вопрос.
type
выбор, счет или ноль. Выберите форму, на которую ваш код может воздействовать напрямую.
instructions
Полное, конкретное суждение. Это может быть строка, объект или массив, и он может ссылаться на именованные пути к состоянию.
criteria
Варианты выбора, упорядоченные уровни очков или дополнительные пояснения «верно/неверно» для Ноула.
Пример · одно решение, непересекающиеся границы
route: {
type: 'choice',
instructions: 'Route this ticket to one queue.',
criteria: {
tech: 'Bugs, outages, API failures, or integrations',
sales: 'Pricing, plans, demos, or new-purchase intent',
billing: 'Charges, invoices, receipts, or subscriptions',
human: 'Ambiguous, sensitive, legal, or multi-issue'
}
}
Состояние структуры и ссылки на точные поля
Храните доказательства в именованных полях состояния и указывайте на них инструкции с помощью путей с точками и индексами. Это уменьшает неопределенность относительно того, какой текст, запись или политика должны контролировать ответ.
const state = {
ticket: {
message: 'I was charged twice. Please refund the duplicate.',
orderId: 'A-104'
},
order: { charges: [49, 49] },
refundPolicy: 'Duplicate charges are eligible for a refund.'
};
const questions = {
refund_requested: {
type: 'noul',
instructions: 'Does `ticket.message` request a refund?'
},
policy_supports_refund: {
type: 'noul',
instructions: 'Does `refundPolicy` support the request given `order.charges`?'
}
};
Пакет по умолчанию: Задавайте в одном запросе все вопросы, в которых используется одно и то же состояние, даже умозрительные вопросы. Делайте второй запрос только тогда, когда его состояние или параметры действительно зависят от предыдущего ответа.
После этой главы:Вы можете написать стабильное, тестируемое определение вопроса, которое сможет использовать код.
Вызовите официальную конечную точку System One или SDK со своего сервера, проверьте типизированный ответ и обработайте ошибки проверки, ограничения скорости и перегрузки. Шлюз остается необязательным путем доступа.
Начните с официальной конечной точки HTTP.
Сохраните TYPESAFE_API_KEY на сервере. Отправьте состояние, модель и карту именованных вопросов на POST /v1/systemone..
curl -X POST https://api.typesafe.ai/v1/systemone \
-H "Authorization: Bearer $TYPESAFE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"state": "Stripe has failed for 3 days. I am losing sales.",
"model": "jev-latest",
"questions": {
"department": {
"type": "choice",
"instructions": "Which team should handle this?",
"criteria": {
"billing": "Payment or subscription issues",
"technical": "Bugs or integration problems",
"sales": "Pricing or account questions"
}
},
"is_urgent": {
"type": "noul",
"instructions": "Does this message convey urgency?"
}
}
}'
Используйте официальный SDK для печатных ответов и повторных попыток.
Python SDK считывает TYPESAFE_API_KEY из среды, по умолчанию используется jev-latest, предоставляет типизированные классы вопросов и ответов и применяет политику повтора по умолчанию.
pip install typesafe-sdk
from typesafe_sdk import Choice, Noul, TypeSafeClient
with TypeSafeClient() as client:
response = client.system_one(
state={"message": "Stripe has failed for 3 days.", "impact": "Losing sales"},
questions={
"department": Choice(
instructions="Which team should handle this?",
criteria={
"billing": "Payment or subscription issues",
"technical": "Bugs or integration problems",
"sales": "Pricing or account questions",
},
),
"is_urgent": Noul(
instructions="Does `message` and `impact` convey urgency?"
),
},
)
department = response.answers["department"]
print(department.choice, department.confidence)
print(response.answers["is_urgent"].noul)
Прочитайте каждый ответ под идентификатором вопроса.
Ключ API отсутствует или недействителен. Проверьте токен носителя.
422
Неверная форма запроса. Проверьте ответ на наличие ошибочного поля.
429
Превышен лимит скорости. Отступите, прежде чем повторить попытку.
529
Сервис временно перегружен. Отступите, прежде чем повторить попытку.
Для 429 и 529 используйте экспоненциальную отсрочку, а не немедленную повторную попытку. Официальные SDK делают это автоматически в соответствии со своей политикой повторения по умолчанию.
Альтернатива: Vercel AI Gateway
На этом сайте также описан шлюз как уровень доступа для оценки AI SDK. Это альтернативный путь интеграции, не являющийся частью Jev или TypeSafe.
import { experimental_evaluate as evaluate } from 'ai';
import { gateway } from '@ai-sdk/gateway';
const result = await evaluate({
model: gateway('typesafe-ai/jev'),
state,
questions,
});
После этой главы:Вы можете хранить учетные данные на стороне сервера и получать типизированные ответы с вероятностями.
Не превращайте максимальную вероятность непосредственно в финальное действие. Установите диапазоны для предложений, подтверждений и проверки человеком с учетом бизнес-рисков.
PROBABILITY
Доказательства для каждого варианта или уровня
Выбор и Оценка возвращают полное распределение. Используйте его, когда важны варианты, занявшие второе место, двусмысленность или пользовательские меры неопределенности.
CONFIDENCE
Краткое описание формы распределения
Уверенность сжимает степень концентрации или равномерности распределения до 0–1. Это не то же самое, что вероятность выбранного варианта.
Noul: Noul уже возвращает P(true), поэтому у него нет отдельной уверенности. Значения около 0,5 являются неопределенными; порог как «да», так и «нет» в зависимости от риска.
TypeSafe обеспечивает уверенность в распределении опций. Практическая политика – это:
01
Высокая уверенность
Автоматически предложите выбор (тег, маршрут или вердикт) в вашем пользовательском интерфейсе.
02
Средняя достоверность
Покажите предложение, но попросите оператора подтвердить его, прежде чем продолжить.
03
Низкая достоверность
Отправить в человеческую очередь без каких-либо действий по умолчанию.
Калибруйте обрезки помеченных примеров из вашей ленты или почтового ящика. Пороговые значения зависят от конкретного случая использования. Никогда не переводите предложения в деньги и не возвращайте деньги за побочные эффекты.
Порог действия, а не модели в целом
action = response.answers["action"]
if action.confidence < 0.5:
route_to_human(state) # uncertain: do not guess
elif action.choice == "check_balance":
show_balance(account_id) # reversible, low stakes
elif action.choice == "approve_transfer":
if action.confidence > 0.9:
confirm_then_execute(account_id)
else:
ask_user_to_confirm(account_id) # higher stakes, higher bar
Калибровка перед автоматизацией
Соберите репрезентативные, помеченные примеры из реального рабочего процесса.
Записывайте ответы, распределения, достоверность, задержку и решения человека.
Выбирайте пороговые значения отдельно для обратимых, дорогостоящих и необратимых действий.
Отслеживайте отклонения и проводите повторную оценку после изменения состояния, инструкций, критериев или псевдонима модели.
Государственные советы
Передайте строку, объект или массив как состояние. Предпочитайте структурированные записи (текст комментария + метаданные), а не выгрузку всего журнала чата, когда важно только одно сообщение.
После этой главы:Вы можете разработать резервный вариант с низкой степенью достоверности и откалибровать пороговые значения с помощью помеченных данных.
Создайте единый полный рабочий процесс со структурированным состоянием, параллельными вопросами, политикой, принадлежащей коду, данными аудита, повторными попытками и резервным копированием человеком.
Создайте единый полный рабочий процесс сортировки поддержки
Отправьте одно структурированное состояние заявки и параллельно задайте три независимых вопроса. Сохраняйте политику маршрутизации и безопасности в коде.
STATE→CHOICESCORENOUL→POLICY
const questions = {
department: {
type: 'choice',
instructions: 'Which team should handle `ticket.message`?',
criteria: {
returns: 'Exchanges, wrong or damaged items',
shipping: 'Delivery status, delays, or lost packages',
billing: 'Charges, invoices, or payment problems',
other: 'None of the above'
}
},
frustration: {
type: 'score',
instructions: 'How frustrated is the customer?',
criteria: ['Calm', 'Concerned but civil', 'Very angry']
},
refund_requested: {
type: 'noul',
instructions: 'Does `ticket.message` request money back?'
}
};
Превратите напечатанные ответы в проверяемое решение
Храните учетные данные и вызовы моделей на стороне сервера.
Прежде чем вызывать API, проверьте размер штата, обязательные поля и определения вопросов.
Сохраните версию модели, версию вопроса, вероятности, достоверность и окончательное действие.
Предоставьте явный другой/человеческий путь и никогда не придумывайте неопределенность по умолчанию.
Повторите попытки 429 и 529 с ограниченной экспоненциальной задержкой; не повторяйте ошибки проверки.
Прежде чем включать автоматизацию, протестируйте отмеченные крайние случаи и повторно откалибруйте пороговые значения.
Case index
Six Jev patterns to explore next
These are research paths, not claims that this site built the projects. Each card opens the corresponding category in the open-source radar so you can inspect real implementations and source evidence.