TypeSafe AI представила модель Jev (System One), которая кардинально отличается от традиционных LLM. Она не генерирует текст. Вместо этого Jev принимает программное состояние (JSON/строку) и набор типизированных вопросов, возвращая структурированные решения, вероятности и оценки уверенности. Это идеальный инструмент для агентов, где критична предсказуемость и интеграция с кодом, а не креативность.
011. Установка и базовый вызов
Для работы требуется Python-SDK версии 0.7.0. Ключ API загружается из переменных окружения или через интерфейс Colab, чтобы избежать утечек в логах. Модель по умолчанию использует алиас jev-latest.
Ключевая особенность — использование вспомогательной функции ask, которая оборачивает вызов system_one, замеряет время отклика и ведет учет токенов (ledger). Тарификация применяется только к входным токенам, тогда как выходные токены предоставляются бесплатно, что делает пакетную обработку экономически выгодной.
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."
}
}022. Три примитива: Choice, Score, Noul
API оперирует тремя типами вопросов, которые можно комбинировать в одном запросе параллельно:
- Choice: Выбор одной метки из списка критериев. Возвращает выбор и вероятность для каждой метки.
- Score: Оценка по упорядоченной шкале (rubric). Возвращает взвешенное среднее значение, которое может быть дробным (между уровнями).
- Noul: Бинарная вероятность истинности утверждения (Yes/No). Возвращает число от 0 до 1.
Имена вопросов (ключи в словаре) не видны модели — смысл передается через поле instructions, где можно ссылаться на поля JSON через обратные кавычки (например, `ticket.messages[0].text`).
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 — максимальная вероятность среди них. Это позволяет разработчикам самостоятельно верифицировать надежность ответа. Если уверенность низкая, можно отправить запрос на повторную проверку или передать его человеку.
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 рекомендуется использовать следующие паттерны:
- Pydantic модели: Парсите ответ Jev в строгие Pydantic-модели для валидации типов.
- Async Fan-out: Используйте
asyncioдля параллельного отправки нескольких независимых запросов к Jev, если логика позволяет. - Retry Policies: Реализуйте повторные попытки при таймаутах, так как Jev — это модель принятия решений, а не генерации, и она должна отвечать быстро.
- Routing: Используйте
confidenceдля маршрутизации. Если уверенность выбора отдела ниже порога, перенаправляйте тикет в общий пул или на модерацию.
06Кому подойдёт / что запустится
<Источник: MarkTechPost ↗
