Convidar amigos e ganhar tokens grátis!Saiba mais

Criar Chat com Reconhecimento de Imagem (Streaming) Base64

Descrição do Endpoint: Dado um prompt, este modelo retornará uma ou mais opções de conclusão e também pode retornar as probabilidades de tokens alternativos em cada posição. Este endpoint é usado principalmente para criar conclusões de chat que contêm reconhecimento de imagem (baseado em Base64) e prompts de texto.

Referência Oficial: Documentação da API OpenAI


Detalhes do Endpoint

  • Método da Requisição: POST
  • URL da Requisição: https://api.codingplanx.ai/v1/chat/completions
  • Formato dos Dados: application/json

Cabeçalhos da Requisição (Request Headers)

Nome do ParâmetroObrigatórioTipoValor de ExemploDescrição
Content-TypeSimstringapplication/jsonFormato dos dados
AcceptSimstringapplication/jsonFormato aceito
AuthorizationNãostringBearer {{SUA_API_KEY}}Token de autenticação

Corpo da Requisição (Request Body)

Nome do CampoTipoObrigatórioDescrição
modelstringSimO ID do modelo a ser utilizado (ex: gpt-4o-mini).
messagesarraySimLista de mensagens que compõem a conversa até o momento. Contém role e content. Para reconhecimento de imagem, content pode ser um array contendo texto e image_url (Base64).
toolsarraySimUma lista de ferramentas que o modelo pode chamar. Atualmente, suporta apenas funções como ferramentas. Usado para fornecer uma lista de funções para as quais o modelo pode gerar entradas JSON.
tool_choiceobjectSimControla qual função o modelo irá chamar. none significa não chamar nenhuma; auto significa seleção automática; também é possível forçar a chamada de uma função específica.
temperatureintegerNãoTemperatura de amostragem, entre 0 e 2. Valores mais altos (como 0.8) tornam a saída mais aleatória, enquanto valores mais baixos (como 0.2) a tornam mais determinística. Recomenda-se não modificar simultaneamente com top_p.
top_pintegerNãoParâmetro de amostragem de núcleo (Nucleus sampling). 0.1 significa que apenas os tokens que compõem os top 10% da probabilidade de massa são considerados. Recomenda-se não modificar simultaneamente com temperature.
nintegerNãoQuantas opções de conclusão de chat gerar para cada mensagem de entrada. O padrão é 1.
streambooleanNãoInterruptor de saída em streaming. O padrão é false. Se definido como true, enviará deltas parciais de mensagens como Eventos Enviados pelo Servidor (SSE) e será encerrado com a mensagem data: [DONE].
stopstringNãoSequência onde a API parará de gerar novos tokens (máximo de 4 sequências). O padrão é null.
max_tokensintegerNãoO número máximo de tokens a serem gerados na conclusão do chat. O padrão é inf (infinito).
presence_penaltynumberNãoPenalidade de presença (-2.0 a 2.0). Valores positivos penalizam novos tokens com base no fato de já terem aparecido no texto, aumentando a probabilidade de o modelo falar sobre novos tópicos.
frequency_penaltynumberNãoPenalidade de frequência (-2.0 a 2.0). Valores positivos penalizam tokens com base em sua frequência atual no texto, diminuindo a probabilidade de o modelo repetir o mesmo conteúdo. O padrão é 0.
logit_biasobjectNãoModifica a probabilidade de tokens especificados aparecerem na conclusão. Aceita um objeto JSON que mapeia IDs de tokens para valores de viés (-100 a 100).
userstringNãoIdentificador único que representa o usuário final, ajudando a monitorar e detectar abusos do sistema.
response_formatobjectNãoEspecifica o formato que o modelo deve gerar. Passar { "type": "json_object" } ativa o modo JSON. Ao usar isso, é necessário instruir o modelo a gerar JSON no prompt.
seed (seen)integerNãoFuncionalidade Beta. Semente de amostragem determinística. Repetir requisições com a mesma semente (seed) e parâmetros deve retornar os mesmos resultados (o determinismo absoluto não é garantido).

Exemplo de Requisição

{
  "model": "gpt-4o-mini",
  "messages": [
    {
      "role": "system",
      "content": "You are a helpful assistant."
    },
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "O que há nesta imagem? Por favor, descreva em detalhes."
        },
        {
          "type": "image_url",
          "image_url": {
            "url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAiEAAAIhCAYAAACYF2qHAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nOy9ebxtWVXf+x1zrrX2Pud2VRQUjUVf0glIYvOJLdJ8iCagIor... (string base64 omitida devido ao tamanho)"
          }
        }
      ]
    }
  ]
}

Parâmetros da Resposta (Response Body)

Nome do CampoTipoDescrição
idstringIdentificador único da conclusão do chat.
objectstringTipo de objeto, geralmente chat.completion (ou chat.completion.chunk em casos de streaming).
createdintegerTimestamp Unix do momento da criação.
choicesarrayLista de opções de conclusão.
└─ indexintegerÍndice da opção na lista.
└─ messageobjectObjeto da mensagem gerada pelo modelo, contendo role e content.
└─ finish_reasonstringMotivo pelo qual o modelo parou de gerar (exemplo: stop representa um término normal, length representa que o limite de max_tokens foi atingido).
usageobjectEstatísticas de consumo de tokens desta requisição.
└─ prompt_tokensintegerQuantidade de Tokens consumidos pelo prompt (incluindo os tokens calculados a partir da imagem).
└─ completion_tokensintegerQuantidade de Tokens consumidos pelo conteúdo gerado.
└─ total_tokensintegerQuantidade total de Tokens consumidos nesta requisição.

Exemplo de Resposta (Sucesso 200 OK)

{
    "id": "chatcmpl-123",
    "object": "chat.completion",
    "created": 1677652288,
    "choices": [
        {
            "index": 0,
            "message": {
                "role": "assistant",
                "content": "\r
\r
Hello there, how may I assist you today?"
            },
            "finish_reason": "stop"
        }
    ],
    "usage": {
        "prompt_tokens": 9,
        "completion_tokens": 12,
        "total_tokens": 21
    }
}

Perguntas Frequentes (FAQs)

Q1: Como ativar a saída em Streaming? A: Defina o parâmetro stream como true no corpo da requisição. Quando ativado, o endpoint não esperará a resposta inteira ser gerada para retornar; em vez disso, ele retornará fragmentos de dados no formato data: {...} em tempo real, via Eventos Enviados pelo Servidor (Server-Sent Events - SSE), até receber o marcador data: [DONE], que indica o fim da geração.

Q2: Quais são os requisitos para a codificação Base64 de imagens? A: A string Base64 da imagem deve conter o prefixo do tipo MIME correto, por exemplo, data:image/png;base64, ou data:image/jpeg;base64,. Recomenda-se comprimir adequadamente as dimensões da imagem antes de convertê-la para Base64 para reduzir a latência de transmissão de rede e diminuir o consumo de prompt_tokens (imagens muito grandes consumirão uma quantidade enorme de Tokens, podendo exceder o limite de contexto).

Q3: Por que a resposta do modelo foi cortada (truncada)? A: Por favor, verifique o valor de choices[0].finish_reason no corpo da resposta. Se for length, significa que o texto gerado atingiu o limite de max_tokens que você definiu, ou a conversa inteira ultrapassou a janela máxima de contexto do modelo. Você pode resolver este problema aumentando o valor de max_tokens.

Q4: Como forçar o modelo a retornar dados no formato JSON? A: Primeiro, é necessário definir "response_format": { "type": "json_object" } no corpo da requisição. Aviso Importante: Além de configurar este parâmetro, você deve exigir explicitamente que o modelo gere JSON usando linguagem natural no prompt do sistema (system prompt) ou no prompt do usuário dentro de messages (por exemplo: "Por favor, retorne o resultado no formato JSON"). Se isso não for feito, o modelo pode entrar em um ciclo infinito gerando espaços em branco até esgotar seus Tokens.

Q5: O que fazer se eu encontrar o erro 401 Unauthorized? A: Por favor, verifique se o parâmetro Authorization no cabeçalho da requisição contém corretamente a sua API Key. O formato deve ser estritamente Bearer SUA_API_KEY (certifique-se de que há um espaço entre a palavra "Bearer" e a "Key").