Documentação

Referência da API

Referência completa da API HTTP para o endpoint de avaliação da TypeSafe.

Avalia um state em relação a um mapa de questions tipadas e recebe answers estruturadas, uma por pergunta. Para uma introdução guiada, começa pelas primitivas.

Endpoint de avaliação

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

Corpo do pedido

A estrutura de nível superior de cada pedido. Cada entrada no mapa questions é uma pergunta tipada com o nome que escolheres.

statestring | object | array · required

O conteúdo a avaliar. Uma string simples para texto, ou dados estruturados (objeto/array) para coisas como registos de conversas, registos ou o estado atual da tua aplicação. Vê Estado para formatos e boas práticas.

modelstring · required

O modelo que trata do pedido. Usa "jev-latest", o modelo principal da TypeSafe. Vê Modelos para os modelos e alias disponíveis.

questionsmap<string, Question> · required

Um mapa de objetos Question tipados. Escolhes cada chave; as respostas voltam sob as mesmas chaves.

entradas do mapa

‹question id›Question

Uma chave que escolhes. A Answer correspondente é devolvida sob este mesmo id. A chave não é enviada ao modelo subjacente nem usada na inferência.

{
  "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 pergunta

Uma Question é um de três tipos, definido pelo seu campo type. Os três partilham type e instructions; cada um acrescenta os seus próprios criteria.

A propriedade instructions pode ser uma string, um objeto ou um array. Podes dividir uma pergunta longa que tenha contexto extra, ou dados a que precise de fazer referência, num objeto estruturado. Coloca a pergunta num campo e os dados nos outros e refere-te aos campos de dados pelo nome entre acentos graves, tal como apontas uma pergunta a um valor state aninhado:

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

Vê Usa estrutura nas perguntas para saber mais.

Noul

Uma pergunta de sim ou não. Devolve a probabilidade de a resposta ser sim.

type"noul" · required

instructionsstring | object | array · required

A pergunta de sim ou não a avaliar. Um objeto pode conter a pergunta num campo e os dados a que se refere noutros; vê Usa estrutura nas perguntas.

criteriaobject

Descrições opcionais do que significam um sim e um não.

propriedades

truestring | object | array

O que significa um sim (valor próximo de 1).

falsestring | object | array

O que significa um não (valor próximo de 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

Escolhe uma opção de um conjunto que defines. Devolve a opção escolhida e a distribuição de probabilidade completa.

type"choice" · required

instructionsstring | object | array · required

O que o modelo deve decidir. Um objeto pode conter a pergunta num campo e os dados a que se refere noutros; vê Instruções e criteria estruturados.

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

Um mapa de opção para descrição da rubrica; usa null quando uma opção não precisa de detalhe extra. Podes ter no máximo 255 opções por Choice.

entradas do mapa

‹option›string | object | array | null

Uma chave que escolhes. Uma descrição desta opção.

{
  "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

Avalia o estado ao longo de uma rubrica que defines. Devolve um valor ponderado pela probabilidade pelos teus níveis.

type"score" · required

instructionsstring | object | array · required

O que o modelo deve avaliar. Um objeto pode conter a pergunta num campo e os dados a que se refere noutros; vê Usa estrutura nas perguntas.

criteriaarray<string | object | array> · required

Um array ordenado de descrições de níveis. Um Score deve ter pelo menos dois níveis; a API aceita até 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"]
    }
  }
}

Corpo da resposta

Uma resposta por pergunta, devolvida sob os mesmos ids que forneceu.

modelstring · required

O modelo que realizou a avaliação.

answersmap<string, Answer> · required

Uma Answer por pergunta, com chave pelos mesmos ids que usaste nas perguntas.

entradas do mapa

‹question id›Answer

O mesmo id que escolheste nas perguntas.

usageobject · required

Utilização de tokens do pedido.

propriedades

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 resposta

Cada resposta traz um type que corresponde à sua pergunta. As respostas Choice e Score também trazem uma confidence entre 0 e 1, derivada da distribuição de probabilidade da resposta. Vê Confiança.

Resposta Noul

type"noul" · required

noulnumber · required

A resposta de sim ou não numa escala de 0 (não) a 1 (sim).

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

Resposta Choice

type"choice" · required

choicestring · required

A opção com maior probabilidade.

probabilitiesmap<string, number> · required

Cada opção mapeada para a sua probabilidade (floats que somam 1).

entradas do mapa

‹option›number

Uma opção que definiste em criteria.

confidencenumber · required

Quão certo o modelo está, derivado das 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 }
}

Resposta Score

type"score" · required

scorenumber · required

A resposta ponderada pela probabilidade pelos níveis; pode cair entre níveis.

legendmap<string, string> · required

Cada número de nível mapeado de volta à sua descrição.

probabilitiesmap<string, number> · required

Cada nível (chave de string) mapeado para a sua probabilidade (floats que somam 1).

entradas do mapa

‹level›number

Um índice de nível, como chave de string correspondente ao legend.

confidencenumber · required

Quão certo o modelo está, derivado das 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 }
}

Erros

Os erros usam códigos de estado HTTP padrão com um corpo JSON que descreve o que correu mal.

Estado Significado
401 Unauthorized Chave de API em falta ou inválida. Verifica o cabeçalho Authorization.
422 Unprocessable Entity O corpo do pedido falhou a validação — por exemplo, um campo obrigatório em falta ou uma pergunta malformada. O corpo detalha o campo em falta.
429 Too Many Requests Excedeste o teu limite de taxa. Recua e tenta de novo após um curto atraso.
529 Overloaded A TypeSafe está temporariamente sobrecarregada. Tenta de novo após um curto atraso.

Como lidar com os limites de taxa

Quando recebes uma resposta 429 Too Many Requests ou 529 Overloaded, tenta novamente o pedido com retrocesso exponencial em vez de tentar imediatamente. Os nossos SDKs de cliente tratam disto automaticamente, por isso não é preciso tratamento extra se usares um dos nossos SDKs com a sua política de repetição predefinida.