Skip to Content

Decisions API

La Decisions API permite que un modelo tome decisiones tipadas sobre un contenido en lugar de generar texto. Usted proporciona el contenido que se debe evaluar y un conjunto de preguntas, y el modelo devuelve una respuesta estructurada para cada una: la probabilidad de sí o no, una única elección entre una lista de opciones o una puntuación en una escala graduada, junto con las probabilidades de cada opción y un valor de confianza.

Está pensada para clasificación, enrutamiento, moderación, puntuación, filtrado y cualquier otro caso en el que su código deba bifurcarse directamente según el resultado. El modelo solo puede responder con las opciones y los niveles que usted define, nunca con nada fuera de ellos, por lo que no hay texto libre que analizar.

Si es la primera vez que utiliza un modelo de decisión, se recomienda leer primero la guía de uso de Jev, que incluye el inicio rápido, el diseño de preguntas, la interpretación de los resultados y ejemplos de escenarios. Esta página es la referencia a nivel de campos.

Endpoints

Los tres endpoints sirven los mismos modelos con la misma facturación; solo cambia el formato de la petición y de la respuesta. Elija el que corresponda a su cliente:

EndpointFormatoAdecuado para
POST https://api.ofox.ai/v1/decisionsFormato unificado de OfoxAI (preguntas como array)cURL, cualquier cliente HTTP, el SDK de OpenAI
POST https://api.ofox.ai/openai/v1/decisionsIgual que el anteriorProyectos que ya tienen el base_url del SDK de OpenAI configurado como https://api.ofox.ai/openai/v1
POST https://api.ofox.ai/typesafe/v1/systemoneFormato oficial TypeSafe System One (preguntas como objeto)El SDK oficial de TypeSafe, o código escrito a partir de la documentación oficial de TypeSafe

La autenticación es la misma que en los demás endpoints: Authorization: Bearer <su OFOXAI_API_KEY>. Solo se admiten peticiones sin streaming; cada petición devuelve todas las respuestas de forma síncrona.

Modelos disponibles

ID de modeloDescripción
typesafe/jev-latestTypeSafe Jev, un modelo dedicado a la decisión. Solo entrada de texto o JSON, contexto de 64K. Puede abreviarse como jev-latest
openai/gpt-6-lunaFunciona en los tres endpoints; puede leer imágenes (pase input_image en el array de mensajes)

La lista completa de modelos compatibles con esta API está en la página de modelos . Una llamada con un modelo de chat convencional (como openai/gpt-4o) devuelve endpoint_not_supported.

Formato unificado: /v1/decisions

Parámetros de la petición

ParámetroTipoObligatorioDescripción
modelstring✅ID del modelo, por ejemplo typesafe/jev-latest
inputstring | object | array✅El contenido que se debe evaluar; véase Formato de entrada
questionsarray✅Lista de preguntas, cada una un objeto de pregunta. Las respuestas se devuelven en el mismo orden
safety_identifierstring—Un ID estable del usuario final; solo se aplica a los modelos de OpenAI

Formato de entrada

input admite tres formas:

  • Texto: una única cadena.
    "input": "Customer message: I was charged twice, nobody has answered my two emails, and I need a refund today."
  • Datos estructurados: un objeto JSON que se pasa al modelo tal cual. Las preguntas pueden referirse a nombres de campo entre comillas invertidas, como `message`.
    "input": { "ticket_id": 4812, "message": "I was charged twice.", "plan": "pro" }
  • Array de mensajes: [{ "role", "content" }], donde content es una cadena o una lista de bloques de contenido. Solo se admiten los bloques input_text e input_image. Las imágenes solo funcionan con modelos capaces de leerlas. Jev no lee imágenes; enviar una devuelve 400.

Objeto de pregunta

CampoSe aplica aDescripción
typeTodospredicate (sí/no), choice (opción única) o score (puntuación graduada)
nameTodosOpcional, pero recomendado. Se devuelve tal cual en la respuesta para poder asociarlas. Debe ser único dentro de una petición
instructionsTodosLa pregunta en sí. Una cadena, o un objeto JSON que contiene la pregunta y datos de referencia
criteriapredicateOpcional. { "true": "...", "false": "..." } describe qué significan el sí y el no
choiceschoiceObligatorio. Array de opciones, cada una { "value": "billing", "description": "Charges, refunds" }; description es opcional. Hasta 255 opciones
levelsscoreObligatorio. Array de niveles ordenados de menor a mayor, cada uno { "label": "low", "description": "..." }. De 2 a 10 niveles

Ejemplos de petición

Terminal
curl https://api.ofox.ai/v1/decisions \ -H "Authorization: Bearer $OFOX_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "typesafe/jev-latest", "input": "Customer message: I was charged twice, nobody has answered my two emails, and I need a refund today.", "questions": [ { "type": "predicate", "name": "is_frustrated", "instructions": "Is the customer frustrated?" }, { "type": "choice", "name": "category", "instructions": "Which category does this ticket belong to?", "choices": [ { "value": "billing", "description": "Charges and refunds" }, { "value": "bug", "description": "Product issue" }, { "value": "other", "description": "Other" } ] }, { "type": "score", "name": "urgency", "instructions": "How quickly does a human need to respond?", "levels": [ { "label": "low", "description": "Within a week is fine" }, { "label": "medium", "description": "Should respond soon" }, { "label": "high", "description": "Must respond today" } ] } ] }'

Formato de la respuesta

{ "model": "typesafe/jev-latest", "answers": [ { "type": "predicate", "name": "is_frustrated", "probability": 0.97 }, { "type": "choice", "name": "category", "choice": "billing", "confidence": 1, "probabilities": [ { "value": "billing", "probability": 1 }, { "value": "bug", "probability": 0 }, { "value": "other", "probability": 0 } ] }, { "type": "score", "name": "urgency", "score": 2, "confidence": 1, "legend": { "0": "low: Within a week is fine", "1": "medium: Should respond soon", "2": "high: Must respond today" }, "probabilities": [ { "value": 0, "label": "low", "probability": 0 }, { "value": 1, "label": "medium", "probability": 0 }, { "value": 2, "label": "high", "probability": 1 } ] } ], "usage": { "prompt_tokens": 407, "completion_tokens": 72, "total_tokens": 479 } }

answers se corresponde uno a uno con questions, en el mismo orden. Campos de cada tipo de respuesta:

TipoCampoDescripción
predicateprobabilityProbabilidad de que la respuesta sea sí, de 0 a 1
choicechoiceLa opción con mayor probabilidad
probabilitiesProbabilidad de cada opción; suman 1
confidenceGrado de seguridad del modelo en esta decisión, de 0 a 1; véase Probabilidad y confianza
scorescoreValor de nivel ponderado por probabilidad, empezando en 0. Puede quedar entre dos niveles (por ejemplo, 1.43)
legendCorrespondencia entre el índice de nivel y su descripción
probabilitiesProbabilidad de cada nivel
confidenceIgual que el anterior

Formato nativo de TypeSafe: /typesafe/v1/systemone

Los formatos de petición y respuesta coinciden con los de la API oficial de TypeSafe , por lo que puede usar directamente el SDK de TypeSafe o migrar código existente. Respecto al formato unificado, las diferencias son:

Formato unificado /v1/decisionsFormato nativo de TypeSafe
Contenido que se evalúainputstate
PreguntasArray, identificadas por nameObjeto, en el que cada clave es el ID de la pregunta
Preguntas de sí/notype: "predicate", campo de respuesta probabilitytype: "noul", campo de respuesta noul
Opciones y nivelesArrays choices / levelsAmbos van en criteria: un objeto {opción: descripción} para choice y un array de cadenas de descripción para score
Campos de usoprompt_tokens / completion_tokensinput_tokens / output_tokens
Terminal
curl https://api.ofox.ai/typesafe/v1/systemone \ -H "Authorization: Bearer $OFOX_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "jev-latest", "state": "Help! My payouts have been failing for 3 days.", "questions": { "is_urgent": { "type": "noul", "instructions": "Does this convey urgency?" }, "department": { "type": "choice", "instructions": "Which team should handle this?", "criteria": { "billing": "Payments, invoicing, refunds", "technical": "Bugs, outages, integrations", "sales": "Pricing, upgrades" } }, "frustration": { "type": "score", "instructions": "How frustrated is the customer?", "criteria": ["Calm", "Frustrated", "Very angry"] } } }'
{ "model": "typesafe/jev-latest", "answers": { "is_urgent": { "type": "noul", "noul": 0.95 }, "department": { "type": "choice", "choice": "billing", "confidence": 0.85, "probabilities": { "billing": 0.9, "technical": 0.1, "sales": 0 } }, "frustration": { "type": "score", "score": 1.03, "confidence": 0.95, "legend": { "0": "Calm", "1": "Frustrated", "2": "Very angry" }, "probabilities": { "0": 0, "1": 0.97, "2": 0.03 } } }, "usage": { "input_tokens": 399, "output_tokens": 73 } }

Integración con SDK

SDK de OpenAI

El SDK oficial de OpenAI ofrece client.decisions.create(). Configure base_url como https://api.ofox.ai/v1 y use el formato unificado para el cuerpo de la petición. Hay un ejemplo en la pestaña Python de más arriba. Necesita una versión del SDK que incluya la Decisions API (probado con openai Python 3.31.0).

SDK de TypeSafe

Con el SDK oficial de TypeSafe, configure base_url como https://api.ofox.ai/typesafe y sustituya api_key por su API Key de OfoxAI. El resto del código no cambia:

typesafe_sdk.py
# pip install typesafe-sdk import os from typesafe_sdk import TypeSafeClient, Noul, Choice, Score with TypeSafeClient(base_url="https://api.ofox.ai/typesafe", api_key=os.environ["OFOX_API_KEY"]) as client: r = client.system_one( model="jev-latest", state={"message": "I was charged twice, nobody has answered my two emails, and I need a refund today."}, questions={ "urgent": Noul(instructions="Is the customer asking for this to be handled today?"), "dept": Choice( instructions="Which team should handle this?", criteria={"billing": "Charges, invoices, refunds", "technical": "Bugs, integrations", "sales": "Pricing, upgrades"}, ), "anger": Score(instructions="How upset is the customer?", criteria=["Calm", "Upset but polite", "Very angry"]), }, ) print(r.nouls["urgent"].noul) # 0.98 print(r.choices["dept"].choice) # billing print(r.scores["anger"].score) # 1.56

Probabilidad y confianza

  • La probabilidad responde a «cuál es la respuesta»: probability y probabilities son las probabilidades calibradas del modelo para cada respuesta posible.
  • La confianza responde a «se puede confiar en esta decisión»: confidence se deriva de la distribución de probabilidades y es más alta cuanto más concentrada está la distribución. Si dos opciones quedan cada una en 0.5, choice devuelve igualmente una de ellas, pero confidence será baja.

Una práctica habitual es fijar un umbral en el código: actuar automáticamente cuando la confianza es alta, y derivar a una persona o a un modelo más potente para su revisión cuando es baja.

Facturación

La facturación es por token; las tarifas están en la página del modelo . typesafe/jev-latest solo factura los tokens de entrada; la salida no se factura (completion_tokens / output_tokens se siguen devolviendo).

Todas las preguntas de una petición comparten la misma entrada, por lo que incluir varias preguntas en una sola petición es mucho más barato y rápido que repartirlas en llamadas separadas.

Límites

ElementoLímite
Cuerpo de la peticiónHasta 32 MiB
Contexto64K tokens en Jev; si se supera, devuelve 400
Opciones de choiceHasta 255
Niveles de scoreDe 2 a 10
Anidamiento JSONHasta 64 niveles para cada uno de input/state, instructions y criteria
StreamingNo admitido

Errores habituales

HTTP · typeMensaje de error originalCausaSolución
400 invalid_request_errorquestion "a" has kind choice and requires criteria optionsUna pregunta choice no tiene choicesAñada el array de opciones
400 invalid_request_errorquestion name "a" is used more than onceDos preguntas comparten el mismo nameUse nombres únicos
400 invalid_request_errorToo many score levels. Must have at most 10 levels.Una pregunta score tiene más de 10 nivelesFusione niveles o divídala en varias preguntas
400 invalid_request_errordecision input carries an "input_image" part, which Typesafe cannot readSe envió una imagen a JevQuite la imagen o use un modelo que pueda leer imágenes
400 invalid_request_errorInvalid request payloadSe envió el formato nativo de TypeSafe (state + questions como objeto) a /v1/decisionsCambie al formato unificado o llame a /typesafe/v1/systemone
400 endpoint_not_supportedModel 'openai/gpt-4o' does not support the /v1/decisions endpoint on this platform.El modelo no es un modelo de decisiónUse uno de los modelos disponibles
404 model_not_foundModel 'typesafe/jev-9' not foundID de modelo incorrectoUse typesafe/jev-latest
404 invalid_request_errorUnsupported API endpoint.La ruta se escribió como /v1/systemoneEl endpoint del formato nativo de TypeSafe es /typesafe/v1/systemone

Para otros errores generales, consulte Gestión de errores.

Última actualización: