Documentação Oficial da API de Function Calling
Este endpoint é usado para criar um Chat Completion (Preenchimento de Chat). Ao fornecer uma lista de mensagens e uma lista opcional de ferramentas (Functions), o modelo pode gerar uma resposta em texto ou gerar argumentos que correspondam a um esquema JSON específico para chamar uma função externa.
1. Informações da API
- URL do Endpoint:
https://api.codingplanx.ai/v1/chat/completions - Método HTTP:
POST - Content-Type:
application/json - Autenticação:
Authorization: Bearer {{YOUR_API_KEY}}
2. Parâmetros da Requisição
2.1 Cabeçalhos (Headers)
| Parâmetro | Tipo | Obrigatório | Exemplo | Descrição |
|---|---|---|---|---|
| Content-Type | string | Sim | application/json | Fixo como application/json |
| Accept | string | Sim | application/json | Recomendado manter como application/json |
| Authorization | string | Sim | Bearer sk-xxxxxx | Autenticação por chave de API |
2.2 Corpo da Requisição (Body)
| Parâmetro | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
| model | string | Sim | - | O ID do modelo a ser usado (ex: gpt-4o, gpt-3.5-turbo, etc.). |
| messages | array | Sim | - | A lista de mensagens da conversa até o momento. Cada objeto contém role ("system", "user", "assistant", "tool") e content. |
| tools | array | Sim | - | Uma lista de ferramentas que o modelo pode chamar. Atualmente, apenas type: "function" é suportado. Usado para definir o nome, a descrição e os parâmetros da função. |
| tool_choice | object/str | Não | auto | Controla qual função o modelo chama. none: não chama nenhuma; auto: seleciona automaticamente; {"type": "function", "function": {"name": "xxx"}}: força a chamada de uma função específica. |
| temperature | number | Não | 1 | Temperatura de amostragem (0 a 2). Valores mais altos tornam a saída mais aleatória, enquanto valores mais baixos a tornam mais determinística. |
| top_p | number | Não | 1 | Probabilidade de amostragem de núcleo (nucleus sampling). |
| n | integer | Não | 1 | O número de opções de chat completion a serem geradas para cada mensagem de entrada. |
| stream | boolean | Não | false | Se os resultados devem ser transmitidos (streaming). Se definido como true, os tokens serão enviados como Server-Sent Events (SSE). |
| stop | string/array | Não | null | Sequência(s) de parada onde a API interromperá a geração de tokens. |
| max_tokens | integer | Não | inf | O número máximo de tokens a serem gerados. |
| presence_penalty | number | Não | 0 | Um valor entre -2.0 e 2.0. Aumenta a probabilidade de o modelo falar sobre novos tópicos. |
| frequency_penalty | number | Não | 0 | Um valor entre -2.0 e 2.0. Diminui a probabilidade de o modelo repetir exatamente o mesmo conteúdo. |
| response_format | object | Não | - | Especifica o formato de saída. Ex: {"type": "json_object"} ativa o modo JSON. |
| seed | integer | Não | - | Se especificado, o sistema fará o possível para amostrar de forma determinística, de modo que requisições com a mesma seed e parâmetros retornem os mesmos resultados. |
| user | string | Não | - | Um identificador exclusivo que representa o usuário final, usado para monitorar abusos. |
3. Exemplo de Requisição
{
"model": "gpt-4o",
"messages": [
{
"role": "user",
"content": "Como está o clima em Pequim hoje?"
}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Obtém o clima atual de um local especificado",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "Nome da cidade, por exemplo: Pequim"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["location"]
}
}
}
],
"tool_choice": "auto",
"temperature": 0.8
}
4. Parâmetros de Resposta
4.1 Estrutura do Corpo da Resposta
| Parâmetro | Tipo | Descrição |
|---|---|---|
| id | string | O identificador exclusivo para esta requisição. |
| object | string | O tipo de objeto, geralmente chat.completion. |
| created | integer | Carimbo de data/hora Unix (em segundos). |
| choices | array | Contém a lista de respostas geradas. |
| └ message | object | Contém o role, o content e possíveis tool_calls. |
| └ finish_reason | string | O motivo da parada. stop (parada natural), length (atingiu max_tokens), tool_calls (precisa chamar uma ferramenta). |
| usage | object | Resumo de uso: prompt_tokens, completion_tokens, total_tokens. |
4.2 Exemplo de Resposta (Texto Normal)
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "O clima em Pequim está ensolarado hoje, com temperatura de 25 graus Celsius."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 12,
"total_tokens": 21
}
}
5. FAQs (Perguntas Frequentes)
Q1: O que é Function Calling (Chamada de Função)? R: É uma maneira de dar ao modelo a capacidade de acessar recursos externos. O modelo não executa o código diretamente; em vez disso, com base na sua descrição, ele gera um objeto JSON contendo o nome da função e os argumentos necessários. Você precisa extrair este JSON, executar a função localmente ou no seu servidor e, em seguida, retornar o resultado para o modelo.
Q2: Por que configurei as ferramentas (tools), mas o modelo não retornou tool_calls?
R: Pode haver os seguintes motivos:
- O modelo considera que a pergunta do usuário não requer a chamada da função.
- A descrição da sua função (
description) não é clara o suficiente, fazendo com que o modelo não consiga corresponder à intenção. - O
tool_choicefoi definido explicitamente comonone. - Limitações do modelo (recomenda-se priorizar modelos como
gpt-4oougpt-3.5-turboque suportam nativamente a chamada de funções).
Q3: Como forçar o modelo a chamar uma função específica?
R: Você pode definir tool_choice para um objeto específico, por exemplo:
"tool_choice": {"type": "function", "function": {"name": "get_current_weather"}}. Dessa forma, mesmo que o modelo ache desnecessário, ele tentará gerar os argumentos para essa função.
Q4: O que devo fazer se o finish_reason for length?
R: Isso significa que a resposta gerada excedeu o limite de max_tokens ou o limite da janela de contexto (context window) do modelo. Você pode tentar aumentar o parâmetro max_tokens ou reduzir o tamanho do histórico das messages.
Q5: Quais são os cuidados ao usar o Modo JSON (JSON Mode)?
R: Ao definir response_format: { "type": "json_object" }, é obrigatório instruir explicitamente o modelo na mensagem do tipo System ou User para produzir conteúdo no formato JSON (por exemplo, incluindo "responda em formato JSON"). Caso contrário, o modelo pode entrar em um loop infinito produzindo espaços em branco.
Q6: Como lidar com múltiplas chamadas de ferramentas (Multiple Tool Calls)?
R: Em uma única requisição, o modelo pode gerar várias chamadas de ferramentas simultaneamente (por exemplo, consultar o clima em Pequim e Xangai ao mesmo tempo). Você precisa iterar sobre o array choices[0].message.tool_calls e executar a lógica local correspondente para cada chamada.