Главная/Блог/Обзор/TypeSafe AI Jev: Структурированный ИИ…
Обзор3 мин чтения · 24 сентября 2026 г.

TypeSafe AI Jev: Структурированный ИИ без генерации текста

Разбор SDK TypeSafe AI Jev: как использовать Choice, Score и Noul для детерминированных решений, калибровки уверенности и маршрутизации в Python.

TypeSafe AI Jev: Структурированный ИИ без генерации текста

TypeSafe AI представила модель Jev (System One), которая кардинально отличается от традиционных LLM. Она не генерирует текст. Вместо этого Jev принимает программное состояние (JSON/строку) и набор типизированных вопросов, возвращая структурированные решения, вероятности и оценки уверенности. Это идеальный инструмент для агентов, где критична предсказуемость и интеграция с кодом, а не креативность.

011. Установка и базовый вызов

Для работы требуется Python-SDK версии 0.7.0. Ключ API загружается из переменных окружения или через интерфейс Colab, чтобы избежать утечек в логах. Модель по умолчанию использует алиас jev-latest.

Ключевая особенность — использование вспомогательной функции ask, которая оборачивает вызов system_one, замеряет время отклика и ведет учет токенов (ledger). Тарификация применяется только к входным токенам, тогда как выходные токены предоставляются бесплатно, что делает пакетную обработку экономически выгодной.

terminalpython
import subprocess
import sys

# Установка SDK
subprocess.run([sys.executable, "-m", "pip", "install", "-q", "typesafe-sdk==0.7.0"], check=True)

from typesafe_sdk import TypeSafeClient

# Инициализация клиента (ключ берется из TYPESAFE_API_KEY)
client = TypeSafeClient()

# Пример структуры данных для запроса
ticket_state = {
    "ticket": {
        "subject": "Duplicate charge",
        "messages": [
            {"from": "customer", "text": "I was charged twice for order A-104."}
        ],
        "order": {"id": "A-104", "charges": [{"amount_usd": 49, "status": "captured"}]},
        "refund_policy": "Duplicate charges are eligible for a full refund within 30 days."
    }
}
💡
Важно про токены. В Jev тарификация идет только за входные токены. Выходные данные (выборы, оценки) бесплатны, что делает пакетную обработку десятков вопросов в одном запросе экономически выгодной.

022. Три примитива: Choice, Score, Noul

API оперирует тремя типами вопросов, которые можно комбинировать в одном запросе параллельно:

  • Choice: Выбор одной метки из списка критериев. Возвращает выбор и вероятность для каждой метки.
  • Score: Оценка по упорядоченной шкале (rubric). Возвращает взвешенное среднее значение, которое может быть дробным (между уровнями).
  • Noul: Бинарная вероятность истинности утверждения (Yes/No). Возвращает число от 0 до 1.

Имена вопросов (ключи в словаре) не видны модели — смысл передается через поле instructions, где можно ссылаться на поля JSON через обратные кавычки (например, `ticket.messages[0].text`).

terminalpython
from typesafe_sdk import Choice, Score, Noul

questions = {
    "department": Choice(
        instructions="Which team should handle this ticket?",
        criteria={
            "billing": "Payment, refund or subscription issues",
            "technical": "Bugs, outages or integration problems"
        }
    ),
    "frustration": Score(
        instructions="How frustrated the customer appears?",
        criteria=["Calm", "Frustrated but civil", "Very angry"]
    ),
    "refund_requested": Noul(
        instructions="The customer is explicitly asking for a refund"
    )
}

response = client.system_one(state=ticket_state, questions=questions)

print(f"Department: {response.choices['department'].choice}")
print(f"Frustration Score: {response.scores['frustration'].score}")
print(f"Refund Prob: {response.nouls['refund_requested'].noul}")

033. Влияние состояния (State) на результат

Модель Jev «знает» только то, что передано в поле state. Форма данных критически важна. Если передать только текст жалобы, модель не увидит политику возврата. Если передать полный JSON с объектами order и refund_policy, вероятность одобрения возврата вырастет, так как модель учитывает контекст.

Рекомендуется всегда передавать структурированный JSON с именованными полями, а не сырые строки, чтобы инструкции могли точно ссылаться на нужные данные.

044. Калибровка уверенности (Confidence)

Поле confidence в ответе — это не просто метрика, а вычисляемая статистика распределения вероятностей. Формула TypeSafe:

Confidence = (count * peak_prob - 1) / (count - 1)

Где count — количество вариантов ответа, а peak_prob — максимальная вероятность среди них. Это позволяет разработчикам самостоятельно верифицировать надежность ответа. Если уверенность низкая, можно отправить запрос на повторную проверку или передать его человеку.

terminalpython
def calculate_confidence(probabilities: dict) -> float:
    probs = list(probabilities.values())
    count = len(probs)
    if count <= 1: return 0.0
    peak = max(probs)
    return (count * peak - 1) / (count - 1)

# Пример использования
dept_choice = response.choices["department"]
conf = calculate_confidence(dept_choice.probabilities)
print(f"Calibrated Confidence: {conf:.3f}")

055. Паттерны продакшена

Для интеграции в production рекомендуется использовать следующие паттерны:

  1. Pydantic модели: Парсите ответ Jev в строгие Pydantic-модели для валидации типов.
  2. Async Fan-out: Используйте asyncio для параллельного отправки нескольких независимых запросов к Jev, если логика позволяет.
  3. Retry Policies: Реализуйте повторные попытки при таймаутах, так как Jev — это модель принятия решений, а не генерации, и она должна отвечать быстро.
  4. Routing: Используйте confidence для маршрутизации. Если уверенность выбора отдела ниже порога, перенаправляйте тикет в общий пул или на модерацию.

06Кому подойдёт / что запустится

<

Источник: MarkTechPost ↗