Documentación

Referencia de la API

Referencia completa de la API HTTP del endpoint de evaluación de TypeSafe.

Evalúa un state contra un mapa de questions tipadas y recibe answers estructuradas, una por pregunta. Para una introducción guiada, empieza por las primitivas.

Endpoint de evaluación

POST https://api.typesafe.ai/v1/systemone
Authorization: Bearer <API_KEY>
Content-Type: application/json

Cuerpo de la solicitud

La forma de nivel superior de cada solicitud. Cada entrada del mapa questions es una pregunta tipada a la que tú pones nombre.

statestring | object | array · required

El contenido que se va a evaluar. Una cadena simple para texto, o datos estructurados (objeto/array) para cosas como registros de chat, expedientes o el estado actual de tu aplicación. Consulta State para conocer los formatos y las buenas prácticas.

modelstring · required

El modelo que atiende la solicitud. Usa "jev-latest", el modelo insignia de TypeSafe. Consulta Models para ver los modelos y alias disponibles.

questionsmap<string, Question> · required

Un mapa de objetos Question tipados. Tú eliges cada clave; las respuestas vuelven bajo las mismas claves.

entradas del mapa

‹question id›Question

Una clave que eliges tú. La Answer correspondiente se devuelve bajo este mismo id. La clave no se envía al modelo subyacente ni se usa en la inferencia.

{
  "state": "Help! My payouts have been failing for 3 days.",
  "model": "jev-latest",
  "questions": {
    "is_urgent": {
      "type": "noul",
      "instructions": "Does this convey urgency?"
    }
  }
}

Tipos de pregunta

Un Question es uno de tres tipos, definido por su campo type. Los tres comparten type e instructions; cada uno añade su propio criteria.

La propiedad instructions puede ser una cadena, un objeto o un array. Puedes dividir una pregunta larga que tenga contexto adicional, o datos a los que necesite referirse, en un objeto estructurado. Pon la pregunta en un campo y los datos en los demás, y refiérete a los campos de datos por su nombre entre comillas invertidas, igual que apuntas una pregunta a un valor anidado de state:

"instructions": {
  "potential_duplicate": {
    "name": "John Smith",
    "location": "Oakland, California",
    "last_employer": "Google"
  },
  "question": "Is the resume for the same person as `potential_duplicate`?"
}

Consulta Usar estructura en las preguntas para saber más.

Noul

Una pregunta de sí/no. Devuelve la probabilidad de que la respuesta sea sí.

type"noul" · required

instructionsstring | object | array · required

La pregunta de sí/no que se va a evaluar. Un objeto puede contener la pregunta en un campo y los datos a los que se refiere en otros; consulta Usar estructura en las preguntas.

criteriaobject

Descripciones opcionales de lo que significan un sí y un no.

propiedades

truestring | object | array

Qué significa un sí (valor cercano a 1).

falsestring | object | array

Qué significa un no (valor cercano a 0).

{
  "state": "Help! My payouts have been failing for 3 days.",
  "model": "jev-latest",
  "questions": {
    "is_urgent": {
      "type": "noul",
      "instructions": "Does this convey urgency?",
      "criteria": {
        "true": "Explicitly time-sensitive",
        "false": "No urgency expressed"
      }
    }
  }
}

Choice

Elige una opción de un conjunto que tú defines. Devuelve la opción elegida y la distribución de probabilidad completa.

type"choice" · required

instructionsstring | object | array · required

Lo que el modelo debe decidir. Un objeto puede contener la pregunta en un campo y los datos a los que se refiere en otros; consulta Instrucciones y criterios estructurados.

criteriamap<string, string | object | array | null> · required

Un mapa de opción a descripción de rúbrica; usa null cuando una opción no necesite detalle adicional. Puedes tener un máximo de 255 opciones por Choice.

entradas del mapa

‹option›string | object | array | null

Una clave que eliges tú. Una descripción de esta opción.

{
  "state": "Help! My payouts have been failing for 3 days.",
  "model": "jev-latest",
  "questions": {
    "department": {
      "type": "choice",
      "instructions": "Which team should handle this?",
      "criteria": {
        "billing": "Payments, invoicing, refunds",
        "technical": "Bugs, outages, integrations",
        "sales": "Pricing, upgrades, new accounts"
      }
    }
  }
}

Score

Puntúa el estado según una rúbrica que tú defines. Devuelve un valor ponderado por probabilidad a través de tus niveles.

type"score" · required

instructionsstring | object | array · required

Lo que el modelo debe puntuar. Un objeto puede contener la pregunta en un campo y los datos a los que se refiere en otros; consulta Usar estructura en las preguntas.

criteriaarray<string | object | array> · required

Un array ordenado de descripciones de niveles. Un Score debe tener al menos dos niveles; la API acepta hasta 10.

{
  "state": "Help! My payouts have been failing for 3 days.",
  "model": "jev-latest",
  "questions": {
    "frustration": {
      "type": "score",
      "instructions": "How frustrated is the customer?",
      "criteria": ["Calm", "Frustrated", "Very angry"]
    }
  }
}

Cuerpo de la respuesta

Una respuesta por pregunta, devuelta bajo los mismos ids que proporcionaste.

modelstring · required

El modelo que realizó la evaluación.

answersmap<string, Answer> · required

Una Answer por pregunta, indexada por los mismos ids que usaste en questions.

entradas del mapa

‹question id›Answer

El mismo id que elegiste en questions.

usageobject · required

Uso de tokens de la solicitud.

propiedades

input_tokensinteger

output_tokensinteger

{
  "model": "jev-1.13.0",
  "answers": {
    "is_urgent": {
      "type": "noul",
      "noul": 0.95
    }
  },
  "usage": { "input_tokens": 296, "output_tokens": 20 }
}

Tipos de respuesta

Cada respuesta lleva un type que coincide con su pregunta. Las respuestas de Choice y Score también llevan una confidence entre 0 y 1, derivada de la distribución de probabilidad de la respuesta. Consulta Confidence.

Respuesta Noul

type"noul" · required

noulnumber · required

La respuesta de sí/no en una escala de 0 (no) a 1 (sí).

{
  "model": "jev-1.13.0",
  "answers": {
    "is_urgent": {
      "type": "noul",
      "noul": 0.95
    }
  },
  "usage": { "input_tokens": 307, "output_tokens": 20 }
}

Respuesta Choice

type"choice" · required

choicestring · required

La opción de mayor probabilidad.

probabilitiesmap<string, number> · required

Cada opción asignada a su probabilidad (flotantes que suman 1).

entradas del mapa

‹option›number

Una opción que definiste en criteria.

confidencenumber · required

Cuán seguro está el modelo, derivado de las probabilidades.

{
  "model": "jev-1.13.0",
  "answers": {
    "department": {
      "type": "choice",
      "choice": "billing",
      "probabilities": { "billing": 0.88, "technical": 0.12, "sales": 0.0 },
      "confidence": 0.81
    }
  },
  "usage": { "input_tokens": 318, "output_tokens": 34 }
}

Respuesta Score

type"score" · required

scorenumber · required

La respuesta ponderada por probabilidad entre los niveles; puede caer entre niveles.

legendmap<string, string> · required

Cada número de nivel asignado de vuelta a su descripción.

probabilitiesmap<string, number> · required

Cada nivel (clave de cadena) asignado a su probabilidad (flotantes que suman 1).

entradas del mapa

‹level›number

Un índice de nivel, como clave de cadena que coincide con legend.

confidencenumber · required

Cuán seguro está el modelo, derivado de las probabilidades.

{
  "model": "jev-1.13.0",
  "answers": {
    "frustration": {
      "type": "score",
      "score": 1.05,
      "legend": { "0": "Calm", "1": "Frustrated", "2": "Very angry" },
      "probabilities": { "0": 0.0, "1": 0.95, "2": 0.05 },
      "confidence": 0.92
    }
  },
  "usage": { "input_tokens": 304, "output_tokens": 18 }
}

Errores

Los errores usan códigos de estado HTTP estándar con un cuerpo JSON que describe qué salió mal.

Estado Significado
401 Unauthorized Falta la clave de API o no es válida. Comprueba la cabecera Authorization.
422 Unprocessable Entity El cuerpo de la solicitud no pasó la validación — por ejemplo, un campo obligatorio ausente o una pregunta mal formada. El cuerpo detalla el campo problemático.
429 Too Many Requests Has superado tu límite de solicitudes. Retrocede y vuelve a intentarlo tras una breve espera.
529 Overloaded TypeSafe está sobrecargado temporalmente. Vuelve a intentarlo tras una breve espera.

Cómo manejar los límites de uso

Cuando recibas una respuesta 429 Too Many Requests o 529 Overloaded, reintenta la solicitud con retroceso exponencial en lugar de reintentar de inmediato. Nuestros SDK de cliente lo manejan automáticamente, así que no hace falta ningún manejo adicional si usas uno de nuestros SDK con su política de reintentos predeterminada.