Source: https://ailoot.ai/docs/pt-pt/api/systemone/
Canonical: https://ailoot.ai/docs/pt-pt/api/systemone/
Language: pt-pt

[API](https://ailoot.ai/docs/pt-pt/) 

# Jev — modelo de decisão

[Markdown](https://ailoot.ai/docs/pt-pt/api/systemone/index.md)

O modelo de decisão Jev da TypeSafe responde a perguntas tipadas sobre texto ou JSON: escolha de uma opção, avaliação numa escala ou «sim/não» com probabilidades. Não é um chat nem um gerador de texto.

POST`https://api.ailoot.ai/v1/systemone`

Jev — modelo de decisão

```bash
curl https://api.ailoot.ai/v1/systemone \
  -H "Authorization: Bearer $AILOOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "jev-latest",
    "state": "Socorro! Os meus pagamentos de saída estão a falhar há 3 dias.",
    "questions": {
      "is_urgent": {
        "type": "noul",
        "instructions": "Isto transmite urgência?"
      }
    }
  }' 
```

```python
import json, os, urllib.request

body = {
    "model": "jev-latest",
    "state": "Socorro! Os meus pagamentos de saída estão a falhar há 3 dias.",
    "questions": {
        "is_urgent": {"type": "noul", "instructions": "Isto transmite urgência?"},
    },
}
req = urllib.request.Request(
    "https://api.ailoot.ai/v1/systemone",
    data=json.dumps(body).encode(),
    headers={"Authorization": "Bearer " + os.environ["AILOOT_API_KEY"],
             "Content-Type": "application/json"},
)
with urllib.request.urlopen(req, timeout=60) as resp:
    result = json.load(resp)
print(result["answers"]["is_urgent"]["noul"])  # 0.95
```

```js
const resp = await fetch("https://api.ailoot.ai/v1/systemone", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.AILOOT_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "jev-latest",
    state: "Socorro! Os meus pagamentos de saída estão a falhar há 3 dias.",
    questions: {
      is_urgent: { type: "noul", instructions: "Isto transmite urgência?" },
    },
  }),
});
const result = await resp.json();
if (!resp.ok) throw new Error(`${resp.status} ${JSON.stringify(result)}`);
console.log(result.answers.is_urgent.noul); // 0.95
```

200 OK

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

Jev é um modelo de decisão da classe System One da TypeSafe. Não escreve texto nem mantém conversas: envia-lhe um **estado** (`state`) — texto ou JSON — e um conjunto de **perguntas**, e recebe valores tipados com probabilidades. O código pode usá-los diretamente para escolher ramos, ordenar e encaminhar, sem analisar texto livre.

Todas as perguntas de um pedido são avaliadas em paralelo e de forma independente, com base no mesmo `state`. Segundo a TypeSafe, acrescentar perguntas quase não altera o tempo de resposta, e as perguntas não interferem entre si.

| Aspeto | Descrição breve |
| --- | --- |
| Modelo | `jev-latest` — alias da versão estável mais recente do Jev; [ficha no catálogo](https://ailoot.ai/models/pt-pt/#m=jev-latest) |
| Método | `POST /v1/systemone`. Não é um chat: os formatos OpenAI, Anthropic e Gemini não são adequados para o Jev. A resposta chega integralmente, num único JSON |
| O que aceita | Apenas texto: uma cadeia de caracteres, um objeto JSON ou um array de textos. Converta primeiro as imagens, o áudio e o vídeo em texto |
| Contexto | 64K tokens por pedido — state e todas as perguntas em conjunto; state e a pergunta mais longa — até 32K |
| Idioma | Segundo a TypeSafe, o modelo é mais preciso em inglês; aceita outros idiomas, mas com menor precisão — teste-o com os seus dados |
| Preço | Entrada a $0.084 por 1 milhão de tokens, saída gratuita |

## [](https://ailoot.ai/docs/pt-pt/api/systemone/#request)Pedido

### Autorização

| Parâmetro | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `Authorization` | header | obrigatório | Chave Ailoot no formato `Bearer sk-…`. |

### Corpo do pedido

| Parâmetro | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `model` | string | obrigatório | `jev-latest`. |
| `state` | string \| object \| array | obrigatório | O que avaliar: uma cadeia de texto ou JSON — um pedido de um cliente, um registo da base de dados, uma conversa ou o estado atual da sua aplicação. Um objeto com nomes de campos claros costuma ser mais cómodo do que uma única cadeia de caracteres. |
| `questions` | object | obrigatório | Perguntas. Escolhe as chaves e recebe as respostas com as mesmas chaves; a chave não influencia a resposta — a pergunta propriamente dita é definida em `instructions`. |
| `questions.*.type` | string | obrigatório | `noul`, `choice` ou `score` — ver abaixo. |
| `questions.*.instructions` | string \| object \| array | obrigatório | A pergunta propriamente dita. Pode enviar uma pergunta longa com dados num objeto: a pergunta num campo e os dados noutros; refira os campos pelo nome entre acentos graves. |
| `questions.*.criteria` | object \| array |  | Opções de resposta específicas de cada tipo: descrições de «sim» e «não» em noul (opcionais), um dicionário de opções em choice, uma lista ordenada de níveis em score. |

## [](https://ailoot.ai/docs/pt-pt/api/systemone/#question-types)Tipos de perguntas

| Tipo | O que pergunta | O que devolve |
| --- | --- | --- |
| `noul` | Se uma afirmação é verdadeira: sim ou não | `noul` — probabilidade de «sim» de 0 a 1 |
| `choice` | Qual das opções indicadas é adequada | `choice`, `probabilities`, `confidence` |
| `score` | Em que nível da sua escala se encontra state | `score`, `legend`, `probabilities`, `confidence` |

Pode combinar tipos no mesmo pedido.

### noul — sim ou não

O campo `criteria` é opcional: pode descrever o significado de «sim» (`true`) e «não» (`false`). A resposta `noul` — número de 0 (não) a 1 (sim).

```json
"is_urgent": {
  "type": "noul",
  "instructions": "Isto transmite urgência?",
  "criteria": {
    "true": "Urgência temporal explícita",
    "false": "Nenhuma urgência expressa"
  }
}
```

```json
"is_urgent": {
  "type": "noul",
  "noul": 0.95
}
```

### choice — escolha de uma opção

`criteria` — dicionário «opção → descrição»; se não precisar de descrição, indique `null`. Até 255 opções. Na resposta, `choice` — a opção mais provável, `probabilities` — a probabilidade de cada opção (a soma é 1), `confidence` — a confiança de 0 a 1.

```json
"department": {
  "type": "choice",
  "instructions": "Que equipa deve tratar disto?",
  "criteria": {
    "billing": "Pagamentos, faturação, reembolsos",
    "technical": "Erros, indisponibilidades, integrações",
    "sales": "Preços, passagens para planos superiores, novos clientes"
  }
}
```

```json
"department": {
  "type": "choice",
  "choice": "billing",
  "probabilities": { "billing": 0.88, "technical": 0.12, "sales": 0.0 },
  "confidence": 0.81
}
```

### score — avaliação numa escala

`criteria` — níveis do mais baixo ao mais alto, no máximo 10 (a TypeSafe recomenda pelo menos dois). Na resposta, `score` — valor ponderado pelas probabilidades dos níveis (pode situar-se entre níveis), `legend` — número e descrição do nível, `probabilities` e `confidence`. Segundo a TypeSafe, `score` é adequado para comparar com um limiar, mas não para obter um número exato entre níveis.

```json
"frustration": {
  "type": "score",
  "instructions": "Qual é o nível de frustração do cliente?",
  "criteria": ["Calmo", "Frustrado", "Muito zangado"]
}
```

```json
"frustration": {
  "type": "score",
  "score": 1.05,
  "legend": { "0": "Calmo", "1": "Frustrado", "2": "Muito zangado" },
  "probabilities": { "0": 0.0, "1": 0.95, "2": 0.05 },
  "confidence": 0.92
}
```

## [](https://ailoot.ai/docs/pt-pt/api/systemone/#response)Resposta

| Parâmetro | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `model` | string |  | Versão do modelo que respondeu. O alias jev-latest passa para novas versões ao longo do tempo: se ajustou os limiares `confidence` para uma versão específica, acompanhe este campo. |
| `answers` | object |  | Uma resposta por pergunta, com as mesmas chaves. Cada resposta tem `type`; em choice e score, tem também `confidence`. |
| `usage` | object |  | `input_tokens` e `output_tokens`. Apenas os tokens de entrada são cobrados. |

`confidence` é útil como limiar: com uma resposta confiante, aja automaticamente; caso contrário, envie-a para revisão por uma pessoa ou por um modelo grande. A resposta indica o que escolher, enquanto `confidence` indica se deve agir.

## [](https://ailoot.ai/docs/pt-pt/api/systemone/#many-questions)Várias perguntas num único pedido

Envie todas as perguntas sobre o mesmo state num único pedido: são avaliadas em paralelo e state é transmitido uma única vez. Segundo a TypeSafe, no seu exemplo com 13 perguntas, um pedido conjunto foi 12,2 vezes mais barato e 10 vezes mais rápido do que 13 pedidos separados enviados sequencialmente, com as mesmas respostas.

É melhor dividir um julgamento complexo em perguntas simples e combinar as respostas no código: por exemplo, em vez de «avalia esta candidatura», obtenha avaliações separadas do mercado, da viabilidade e das diferenças face à concorrência. Assim, os pesos são alterados no código e não no texto da pergunta.

```json
{
  "model": "jev-latest",
  "state": "Socorro! Os meus pagamentos de saída estão a falhar há 3 dias.",
  "questions": {
    "department": {
      "type": "choice",
      "instructions": "Que equipa deve tratar disto?",
      "criteria": {
        "billing": "Pagamentos, faturação, reembolsos",
        "technical": "Erros, indisponibilidades, integrações",
        "sales": "Preços, passagens para planos superiores, novos clientes"
      }
    },
    "frustration": {
      "type": "score",
      "instructions": "Qual é o nível de frustração do cliente?",
      "criteria": ["Calmo", "Frustrado", "Muito zangado"]
    },
    "is_urgent": {
      "type": "noul",
      "instructions": "Isto transmite urgência?"
    }
  }
}
```

## [](https://ailoot.ai/docs/pt-pt/api/systemone/#use-cases)Quando é adequado

- **Encaminhamento.** Enviar um pedido de apoio para o departamento certo e um pedido para o processador certo: código simples, um modelo grande ou uma pessoa.
- **Ordenação e prioridade.** Urgência, tom, risco — numa escala, com limiares no código.
- **Moderação e verificações.** Verificar se uma mensagem viola as regras, se a fonte confirma uma citação ou se um documento contém a resposta a uma pergunta — antes de o texto seguir para a etapa seguinte.
- **Pontuação e classificação.** Avaliar documentos, candidatos ou excertos encontrados segundo os seus critérios e decidir no código o que segue para a etapa seguinte.
- **Em vez de um frágil «devolve JSON».** Uma chamada que devolve valores tipados por construção, em vez de texto que tem de ser analisado.

## [](https://ailoot.ai/docs/pt-pt/api/systemone/#not-for)Quando não é adequado

- **Chat, respostas ao utilizador, geração de texto ou código.** O Jev não escreve texto — para isso existem os [modelos de texto](https://ailoot.ai/models/pt-pt/?kind=text).
- **Modelo para Claude Code, Cursor e outros agentes.** Não pode substituir o modelo de um agente por jev-latest: o agente precisa de um modelo que escreva texto e chame ferramentas. O Jev pode ser chamado a partir do código que o agente escreve para si.
- **Aritmética, contagem, comparação de datas.** Segundo a TypeSafe, é mais fiável fazer estas operações no código e perguntar ao modelo apenas a parte semântica — por exemplo, extrair partes de uma data através de choice.
- **Imagens, áudio e vídeo.** O modelo aceita apenas texto — converta estes dados em texto antecipadamente.

O modelo funciona melhor quando cada pergunta corresponde a um único julgamento concreto e restrito. Escreva a condição diretamente: segundo a TypeSafe, o modelo interpreta a pergunta literalmente, e um state grande com dados desnecessários reduz a precisão — filtre-o no código.

## [](https://ailoot.ai/docs/pt-pt/api/systemone/#price)Preço

Apenas os tokens de entrada são cobrados — campo `usage.input_tokens` da resposta: **$0.084 por 1 milhão**. Os tokens de saída são gratuitos.

O pedido do exemplo desta página (296 tokens de entrada) custa menos de $0.0001.

Antes do pedido, o Ailoot reserva o valor no saldo e, após a resposta, debita uma única vez pelo consumo efetivo — [como funciona](https://ailoot.ai/docs/pt-pt/billing/reserve/).

## [](https://ailoot.ai/docs/pt-pt/api/systemone/#limits)Limites

| Aspeto | Limite |
| --- | --- |
| Pedido completo: state e todas as perguntas | 64K tokens |
| state e a pergunta mais longa em conjunto | 32K tokens |
| Opções num único choice | até 255 |
| Níveis num único score | de 2 a 10 |
| Entrada | apenas texto: cadeia de caracteres, objeto JSON ou array de textos |

Limites do modelo — segundo a TypeSafe. Os limites da sua chave e do seu saldo aplicam-se como a qualquer modelo Ailoot: [Erros e limites](https://ailoot.ai/docs/pt-pt/errors/).

## [](https://ailoot.ai/docs/pt-pt/api/systemone/#errors)Erros

Os erros chegam no formato geral da API Ailoot: código, texto claro e Request ID. Os mais frequentes neste método são:

| Código | Quando | O que fazer |
| --- | --- | --- |
| **400** `invalid_request` | O corpo não passou a validação: falta state, model ou questions, type desconhecido, mais de 255 opções em choice ou mais de 10 níveis em score | Corrija o pedido de acordo com o texto do erro: sem alterações, voltará a falhar |
| **400** `context_length_exceeded` | state e as perguntas, em conjunto, excedem o limite do modelo | Filtre state no código, deixando apenas o que é necessário para as perguntas |
| **401** `invalid_api_key` | A chave está em falta ou é inválida | Envie a chave no cabeçalho Authorization |
| **402** `insufficient_balance` | O saldo disponível não é suficiente para a reserva | Carregue o saldo |
| **404** `model_not_found`, `unsupported_endpoint` | ID incorreto ou modelo chamado através do método errado, por exemplo, /v1/chat/completions | Chame jev-latest apenas através de POST /v1/systemone |
| **429** `rate_limit_exceeded` | Demasiados pedidos | Aguarde o número de segundos indicado no cabeçalho Retry-After e tente novamente |
| **503** `model_overloaded`, `model_unavailable` | O modelo está temporariamente sobrecarregado ou indisponível | Se X-Should-Retry: true — tente novamente após o número de segundos de Retry-After; se false — consulte primeiro o Request ID no histórico |
| **504** `model_timeout` | O modelo não respondeu a tempo | Não volte a enviar o pedido antes de consultar o Request ID no histórico |

A lista completa de códigos está na página [Erros e limites](https://ailoot.ai/docs/pt-pt/errors/).

Ainda tem dúvidas? Envie o Request ID e uma descrição — ajudamos a esclarecer.[Contactar o suporte](mailto:support@ailoot.ai)

## Ailoot · A empresa e a sua carteira de projetos





A Ailoot assenta numa experiência operacional consolidada, numa ampla base de clientes, num serviço estável e no acompanhamento contínuo dos KPI.





A empresa e a sua carteira de projetos: milhões de clientes; vendas mensais na ordem dos milhares de milhões.





A Ailoot aplica essa experiência operacional ao acesso por API a funcionalidades de IA nos produtos dos clientes, agentes, aplicações e automatizações.
