Documentação

Referência da API

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

Avalie um state contra um mapa de questions tipadas e receba answers estruturadas, uma por pergunta. Para uma introdução guiada, comece pelas primitivas.

Endpoint de avaliação

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

Corpo da requisição

O formato de nível superior de cada requisição. Cada entrada do mapa questions é uma pergunta tipada à qual você dá um nome.

statestring | object | array · required

O conteúdo a ser avaliado. Uma string simples para texto, ou dados estruturados (objeto/array) para coisas como históricos de chat, registros ou o estado atual do seu aplicativo. Consulte Estado para ver formatos e boas práticas.

modelstring · required

O modelo que atende à requisição. Use "jev-latest", o modelo carro-chefe da TypeSafe. Consulte Modelos para ver os modelos e aliases disponíveis.

questionsmap<string, Question> · required

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

entradas do mapa

‹question id›Question

Uma chave que você escolhe. 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 compartilham type e instructions; cada um adiciona o seu próprio criteria.

A propriedade instructions pode ser uma string, um objeto ou um array. Você pode dividir uma pergunta longa que tenha contexto extra, ou dados aos quais ela precise se referir, em um objeto estruturado. Coloque a pergunta em um campo e os dados nos outros, e refira-se aos campos de dados pelo nome entre crases, da mesma forma que você aponta uma pergunta para um valor aninhado 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`?"
}

Consulte Use estrutura nas perguntas para saber mais.

Noul

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

type"noul" · required

instructionsstring | object | array · required

A pergunta de sim/não a ser avaliada. Um objeto pode conter a pergunta em um campo e os dados aos quais ela se refere em outros; consulte Use 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 você define. 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 em um campo e os dados aos quais ela se refere em outros; consulte Instruções e criteria estruturados.

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

Um mapa de opção para descrição de rubrica; use null quando uma opção não precisar de detalhe extra. Você pode ter no máximo 255 opções por Choice.

entradas do mapa

‹option›string | object | array | null

Uma chave que você escolhe. 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 segundo uma rubrica que você define. Devolve um valor ponderado pela probabilidade entre os seus níveis.

type"score" · required

instructionsstring | object | array · required

O que o modelo deve avaliar. Um objeto pode conter a pergunta em um campo e os dados aos quais ela se refere em outros; consulte Use 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 você forneceu.

modelstring · required

O modelo que realizou a avaliação.

answersmap<string, Answer> · required

Uma Answer por pergunta, indexada pelos mesmos ids que você usou em questions.

entradas do mapa

‹question id›Answer

O mesmo id que você escolheu em questions.

usageobject · required

Uso de tokens da requisição.

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 correspondente à sua pergunta. As respostas de Choice e Score também trazem uma confidence entre 0 e 1, derivada da distribuição de probabilidade da resposta. Consulte Confiança.

Resposta Noul

type"noul" · required

noulnumber · required

A resposta de sim/não em uma 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 de 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 você definiu 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 entre os níveis; pode cair entre níveis.

legendmap<string, string> · required

Cada número de nível mapeado de volta para a 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 a 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 status HTTP padrão com um corpo JSON que descreve o que deu errado.

Status Significado
401 Unauthorized Chave de API ausente ou inválida. Verifique o cabeçalho Authorization.
422 Unprocessable Entity O corpo da requisição falhou na validação — por exemplo, um campo obrigatório ausente ou uma pergunta malformada. O corpo detalha o campo problemático.
429 Too Many Requests Você excedeu o seu limite de taxa. Recue e tente de novo após uma breve espera.
529 Overloaded A TypeSafe está temporariamente sobrecarregada. Tente de novo após uma breve espera.

Como lidar com limites de taxa

Quando você receber uma resposta 429 Too Many Requests ou 529 Overloaded, repita a requisição com backoff exponencial em vez de tentar de novo imediatamente. Os nossos SDKs de cliente tratam isso automaticamente, então nenhum tratamento extra é necessário se você usar um dos nossos SDKs com a sua política de retentativas padrão.