Ir para o conteúdo
KeuralDocs
Desenvolvedores

API do Keural

Envie requisições no formato OpenAI Chat Completions com uma chave de API.

Chame os modelos cadastrados no Keural no formato OpenAI Chat Completions.

A URL base tem o formato https://<seu domínio público de API>/llm/v1. O domínio público da API varia de acordo com o ambiente; confirme com o seu administrador.

MétodoCaminhoDescrição
POST/llm/v1/chat/completionsCria uma conclusão de chat (com suporte a streaming)
GET/llm/v1/modelsLista os modelos conectados à chave
GET/llm/v1/models/{model}Obtém informações sobre um modelo conectado à chave

Embeddings, geração de imagens, voz e a API Responses não são suportados, e as requisições para esses caminhos retornam 404.

Fluxo de uso

EtapaO que fazer
1. Emitir a chaveEm Configurações → API, escolha um modelo e obtenha uma chave. Copie o ID do modelo e a chave.
2. Conectar o clienteInforme a URL base, a chave de API e o ID do modelo no aplicativo ou no código.
3. Usar e gerenciarNa mesma tela, consulte o uso e, se necessário, emita novamente ou revogue a chave.

Pré-requisitos

ItemDetalhes
Conta do KeuralConta do Keural com login
Menu de APISe API não aparecer em Configurações, solicite ao administrador a ativação do recurso.
Permissão de membro da organizaçãoPara emitir chaves em um workspace da organização, o administrador da organização precisa permitir. Consulte Permissão de API dos membros da organização.
URL baseEndereço público da API informado pelo administrador
ClienteAplicativo ou SDK compatível com OpenAI API

Emitir uma chave de API

  1. No menu da conta, abra Configurações → API. Nos apps de desktop e celular, o item fica na seção Ferramentas.
  2. Na aba API keys, escolha o workspace ao qual a chave pertence (pessoal ou da organização) e o Model ID.
  3. Se necessário, defina a New key expiration (optional, Korea time). Se deixar em branco, a chave não expira até ser revogada.
  4. Clique em Issue key e use Copy key para copiar a chave e guardá-la. O texto completo da chave é exibido somente nesse momento.
  • A chave fica vinculada ao workspace escolhido e a um modelo. O uso é atribuído a quem emitiu a chave.
  • Cada combinação de workspace e modelo tem apenas uma chave. Para obter uma nova, reemita (Rotate) ou revogue (Revoke) a chave existente.
  • Se perder a chave, reemita-a. Ao reemitir, a chave anterior deixa de funcionar imediatamente.
  • Se não houver modelos disponíveis para emissão, verifique com o administrador a configuração de publicação dos modelos, o plano e a permissão de API da organização.

Permissão de API dos membros da organização

Esta permissão é destinada a proprietários e administradores da organização. Para que um membro emita chaves em um workspace da organização, o administrador precisa liberá-la antes. Para todos os membros, o padrão é bloqueado.

Gerenciamento da organização → Organization API é composto pelas três seções a seguir. Se o menu não aparecer, a função de API está desativada ou a sua conta não tem permissão de administração da organização.

SeçãoO que faz
API permissions by userAtiva ou desativa a permissão de API de cada membro.
Issued keysMostra o estado das chaves emitidas na organização e permite revogá-las. Não é possível ver o texto das chaves.
API usageMostra as requisições e o uso de tokens das chaves emitidas na organização.
AçãoResultado
Ativar Allow API accessO membro pode emitir chaves no workspace da organização.
Desativar Allow API accessBloqueia novas emissões e as chamadas com chaves existentes. As chaves emitidas não são excluídas automaticamente; se necessário, revogue-as em Issued keys.

Quando um membro sai ou é removido da organização, as chaves que recebeu nela são revogadas automaticamente.

Conectar a um cliente

Informe os três valores a seguir em aplicativos compatíveis com OpenAI API (clientes de chat, extensões de IDE, ferramentas de automação etc.).

ValorO que informarNome do campo por aplicativo
Base URLO endereço público da API informado pelo administrador (…/llm/v1)Base URL, API Base, Endpoint, Host
API KeyA chave emitida (sem espaços no início ou no fim)API Key, Token, Secret Key, Authorization
ModelO Model ID da tela de emissão. Deve ser exatamente igual ao modelo conectado à chaveModel, Model ID, Model Name
  1. Nas configurações do aplicativo, adicione uma conexão compatível com OpenAI (Connection).
  2. Informe a Base URL e a API Key e salve.
  3. Escolha um modelo na lista. A lista mostra somente o modelo conectado à chave.
  4. Envie uma mensagem curta e confirme a resposta.

O formato das requisições é o seguinte.

TipoConteúdo
Requisição de chatPOST <Base URL>/chat/completions
Consulta de modelosGET <Base URL>/models
Cabeçalho de autenticaçãoAuthorization: Bearer <chave emitida>
Cabeçalho de conteúdoContent-Type: application/json

Primeira requisição

export KEURAL_API_KEY='sua_chave_emitida'
export KEURAL_BASE_URL='https://<seu-domínio-de-api>/llm/v1'
export MODEL_ID='ID_do_modelo_na_tela_de_emissão'

curl "$KEURAL_BASE_URL/chat/completions" \
  -H "Authorization: Bearer $KEURAL_API_KEY" \
  -H 'Content-Type: application/json' \
  -d "{\"model\":\"$MODEL_ID\",\"messages\":[{\"role\":\"user\",\"content\":\"Olá.\"}]}"

O model do corpo da requisição deve ser o mesmo modelo conectado à chave. Se houver prefixo de caminho, como provider/ID_do_modelo, compara-se o trecho após a última /. Se for diferente, a API retorna 403. A resposta sempre traz no campo model o ID do modelo da chave.

from openai import OpenAI
import os

client = OpenAI(
    api_key=os.environ["KEURAL_API_KEY"],
    base_url=os.environ["KEURAL_BASE_URL"],
)
res = client.chat.completions.create(
    model=os.environ["MODEL_ID"],
    messages=[{"role": "user", "content": "Olá."}],
)
print(res.choices[0].message.content)

Campos de requisição aceitos

A API aceita somente os 18 campos de nível superior abaixo. Se você enviar outros campos, a resposta é 400. Campos opcionais com valor null são tratados como não enviados.

CampoRegra
modelObrigatório. O ID do modelo da chave
messagesObrigatório. De 1 a 4.096 itens
stream · stream_optionsstream_options só é enviado com stream: true. Suporta include_usage.
toolsAté 128. O nome da função usa [A-Za-z0-9_-], de 1 a 64 caracteres
tool_choicenone · auto · required · uma função específica. required exige que haja tools.
parallel_tool_callsSe o modelo não suportar, a resposta é 400
response_formattext · json_object · json_schema
max_tokens · max_completion_tokensEnvie apenas um dos dois. Se não enviar, o valor é 4.096 (ou o limite do modelo, se for menor). Se ultrapassar o limite do modelo, a resposta é 400.
temperatureDe 0 a 2. Se o modelo não suportar, a resposta é 400
top_pDe 0 a 1
frequency_penalty · presence_penaltyDe -2 a 2
stopUma string ou um array de até 4 itens
seedInteiro
userAté 256 caracteres
nSomente 1

Mensagens

PapelCampos aceitos
system · developercontent, name
usercontent (string ou array de partes de texto e imagem), name
assistantcontent, name, refusal, tool_calls
toolcontent, tool_call_id
  • Uma mensagem tool responde uma única vez a cada id dos tool_calls anteriores.
  • Partes de imagem (image_url) só são incluídas em mensagens user de modelos que aceitam imagens. Use um endereço http ou https, ou um data URI base64 de PNG, JPEG, GIF ou WebP. O detail pode ser auto, low ou high.

Corpo

ItemLimite
Content-Typeapplication/json
Tamanho1 MiB
Estrutura JSONUm único objeto de nível superior, profundidade de aninhamento de até 64, sem chaves duplicadas
Tempo da requisiçãoMáximo de 600 segundos

Se você descumprir as regras do corpo, a resposta é 400 e param é body.

Streaming

Com "stream": true na requisição, a resposta é enviada por SSE. Os fragmentos são enviados como eventos data: ..., e no final é enviado data: [DONE]. Com "stream_options": {"include_usage": true}, um fragmento com o uso de tokens é enviado adicionalmente logo antes de [DONE].

Com include_usage, todos os fragmentos trazem usage: null, e o último fragmento de uso tem choices como array vazio. Respostas sem streaming só trazem usage quando os tokens de entrada e de saída foram confirmados.

O id da resposta tem o formato chatcmpl-<x-request-id>. Todas as respostas incluem o cabeçalho x-request-id.

Se houver erro durante o streaming, um evento data: com o JSON do erro é enviado e a conexão é encerrada sem [DONE]. Se um fragmento ultrapassar 1 MiB ou a resposta ultrapassar 16 MiB, a conexão termina com 503.

curl -N "$KEURAL_BASE_URL/chat/completions" \
  -H "Authorization: Bearer $KEURAL_API_KEY" \
  -H 'Content-Type: application/json' \
  -d "{\"model\":\"$MODEL_ID\",\"messages\":[{\"role\":\"user\",\"content\":\"Olá.\"}],\"stream\":true,\"stream_options\":{\"include_usage\":true}}"

Limites de uso

As requisições têm limites por usuário, organização e modelo: número de requisições simultâneas, requisições por minuto (RPM) e tokens por minuto (TPM). Os valores reais variam conforme o ambiente.

Os tokens por minuto são descontados antecipadamente ao receber a requisição. A entrada é calculada em 1 token a cada 4 caracteres em inglês, 1 token por caractere nos demais casos, e 2.000 tokens por imagem. A saída é descontada conforme max_tokens (máximo de 4.096), então definir o limite de saída apenas no necessário aumenta a folga dentro do limite.

Código 429CausaRetry-After
rate_limit_exceededRPM, TPM ou número de requisições simultâneas excedido60 segundos para RPM e TPM; 1 segundo para simultâneas
api_busyCapacidade de processamento do servidor excedidaNão há. Aguarde um pouco e tente novamente.
upstream_rate_limitLimite do provedor do modelo excedidoNão há

Gerenciamento de chaves

Em Configurações → API → API keys, consulte o estado das chaves (válida · expirada · revogada) e reemita ou revogue.

As chaves são strings de 51 caracteres que começam com krl_llm_. Em cada workspace de emissão, só há uma chave; se já houver uma, ela é reemitida. A data de expiração só pode ser definida a partir de hoje.

AçãoResultadoO que considerar
Reemitir (Rotate)Uma nova chave é gerada.A chave anterior fica inválida imediatamente. Atualize também a chave nos aplicativos conectados.
Revogar (Revoke)A chave é bloqueada imediatamente.Use quando houver suspeita de exposição da chave. Uma chave revogada não pode ser restaurada.

Consulta de uso

As requisições da API e o uso de tokens podem ser consultados nos dois locais a seguir.

LocalConteúdo
Configurações → API → API usageUso das chaves emitidas por você no workspace atual
Gerenciamento da organização → Organization API, seção API usageUso de todas as chaves emitidas na organização (proprietários e administradores da organização)

Condições da consulta

CondiçãoDescrição
Hora de início · Hora de fimHorário de Coreia. A hora de início é incluída e a de fim não. Se deixadas em branco, são exibidos os últimos 7 dias. A consulta abrange no máximo 90 dias por vez.
Model IDConsulta somente as requisições de um modelo específico. Se deixado em branco, consulta todos.
Status da requisiçãoEscolha entre Todos · Em andamento · Concluída · Com falha · Interrompida · Não confirmada.

Defina as condições e clique em Consultar. Para incluir requisições recentes, clique em Atualizar.

Valores exibidos na tela

  • Período de consulta aplicado: o período que foi realmente consultado. Se a hora de início ou de fim ficou em branco, ou se o período passou de 90 dias, é exibido o período ajustado.
  • Número de requisições e os totais de tokens de entrada · tokens de saída · tokens totais: somam apenas valores confirmados. Tokens não confirmados são exibidos como Não confirmado.
  • Lista de requisições: cada requisição exibe horário, Model ID, status e tokens de entrada, saída e totais. São exibidas 20 por página, navegáveis com Anterior e Próximo.

Ao clicar em Detalhes da requisição em uma linha, são exibidos os valores a seguir.

ItemDescrição
ID da requisiçãoValor informado ao entrar em contato com o suporte
Modo de respostaStreaming ou resposta comum
Status de confirmação do usoConfirmado · Parcialmente confirmado · Não confirmado
Horário de término · Tempo de resposta (ms)Quando a requisição terminou e quanto tempo levou
Leitura de cache · Criação de cache · Tokens de raciocínioExibidos somente quando o modelo retorna esses valores

Requisições em streaming registram o uso mesmo sem stream_options.include_usage. Se uma requisição for interrompida no meio, ela pode ficar como Parcialmente confirmado ou Não confirmado.

Formato de erro

Os erros são retornados no formato compatível com OpenAI.

{
  "error": {
    "message": "Descrição do erro legível para pessoas",
    "type": "authentication_error",
    "code": "invalid_api_key",
    "param": null
  }
}

O type é definido pelo código de status, e o code indica a causa.

StatustypecodeCausa
400invalid_request_errorinvalid_requestCampo, valor ou regra do corpo inválidos. param indica o campo com problema
400invalid_request_errorupstream_rejected_requestO provedor do modelo rejeitou a requisição
401authentication_errorinvalid_api_keyFormato de chave inválido, chave ausente, expirada, revogada ou reemitida, ou mais de um cabeçalho Authorization
403permission_errorapi_disabledA função de API do Keural está desativada
403permission_errormodel_api_disabledA publicação do modelo para API está desativada
403permission_errormodel_not_allowedmodel diferente do modelo da chave, ou membro sem permissão de API
404invalid_request_errornot_foundCaminho inexistente
405invalid_request_errormethod_not_allowedMétodo incorreto. O cabeçalho Allow indica os métodos permitidos
429rate_limit_errorTabela de Limites de usoLimite excedido
503server_errorupstream_timeoutA resposta não foi concluída em 600 segundos
503server_errorinvalid_upstream_responseFormato de resposta anormal do provedor, ou fluxo acima do tamanho permitido
503server_errordependency_unavailable · unsupported_providerProblema interno temporário. Entre em contato com o suporte informando o x-request-id

Solução de problemas

SintomaCódigo de respostaO que verificar
A lista de modelos está vazia ou a conexão falha404 · 405Se a Base URL termina em …/llm/v1
A autenticação falha401Erros de digitação ou espaços na chave; se a chave expirou, foi revogada ou reemitida
A conexão funciona, mas o modelo não pode ser usado403Se o Model ID é igual ao da chave e a permissão de API da organização
A resposta demora ou falha de vez em quando429Limites de uso
Não há resposta por um momento5xxTente novamente mais tarde
O uso não aparece ou não confere com o real—O período da consulta e o workspace ao qual a chave pertence

Se o problema não for resolvido, entre em contato com o administrador e informe os dados a seguir. Não envie o texto da chave nem o conteúdo dos prompts.

  • Horário da ocorrência
  • ID do modelo usado
  • Nome e versão do aplicativo cliente
  • Valor de x-request-id do cabeçalho de resposta
  • Mensagem de erro exibida na tela

Nesta página