Skip to content

Geração de Texto Avançada com Modelos de Linguagem Grandes (LLMs)

Os Modelos de Linguagem Grandes (LLMs) são sofisticadas redes neurais treinadas com vastos volumes de dados textuais. Essa arquitetura permite que gerem respostas coesas, contextualmente relevantes e criativas a partir de instruções textuais (prompts). Na plataforma SipPulse AI, oferecemos acesso a uma seleção diversificada de LLMs dos principais desenvolvedores globais, como OpenAI, Google, Anthropic, Meta, Qwen, Deepseek, entre outros. Cada modelo possui características distintas de desempenho, custo e especialização.

Para uma visão completa de todos os modelos, suas especificações técnicas detalhadas e a estrutura de preços, consulte nossa página oficial de Pricing.

Playground Interativo

O Playground de Geração de Texto (acessar aqui) é uma interface web amigável, projetada para facilitar a experimentação e avaliação do comportamento de cada LLM.

Playground de Geração de Texto

Seleção do Modelo

  • Navegue e escolha qualquer LLM listado no seletor.

Configuração de Parâmetros

  • Controle parâmetros como temperature, max_tokens, top_p e outros. Veja o Guia de Parâmetros para detalhes.
  • Importante: Cada modelo suporta parâmetros diferentes. O Playground exibe automaticamente apenas os controles relevantes para o modelo selecionado.

Parâmetros Dinâmicos por Modelo

Modelos de raciocínio (como GPT-5, o1) usam parâmetros especiais como reasoning_effort em vez de temperature. Modelos tradicionais (GPT-4o, Claude) usam temperature, top_p, max_tokens. Selecione um modelo no Playground para ver seus parâmetros disponíveis.

Criação de Prompts e Mensagens

  • Defina uma Mensagem de Sistema (System Message) para instruir o LLM sobre o tom, estilo, persona ou regras específicas que deve seguir nas respostas.
  • Insira uma sequência de mensagens de usuário e assistente para simular conversas complexas e testar a capacidade do modelo de manter o contexto.
  • Para aprender a criar prompts e mensagens de sistema eficazes, consulte nosso Guia de Engenharia de Prompts para LLMs.

Execução e Visualização

  • Obtenha feedback instantâneo. As respostas do modelo são exibidas imediatamente após cada envio de prompt.

Geração de Código

  • Com um clique em "Ver Código", o Playground gera automaticamente trechos de código em cURL, Python e JavaScript.
  • Esses exemplos incluem o modelo e os parâmetros exatos que você configurou, prontos para serem copiados e colados em seus projetos.
  • Selecione facilmente a linguagem desejada utilizando as abas na parte superior do modal de código.
Modal Ver Código do Playground

Atalhos de Teclado

AtalhoAção
Cmd/Ctrl + EnterEnviar mensagem
Shift + EnterNova linha (sem enviar)

Gerenciamento de Conversas

O Playground oferece controles para gerenciar sua conversa de teste:

  • Editar mensagens: Clique no ícone de lápis para editar qualquer mensagem enviada
  • Alternar role: Troque entre "user" e "assistant" para simular diferentes cenários
  • Limpar conversa: Use o botão "Clear" para reiniciar a conversa
  • Múltiplas mensagens: Adicione várias mensagens antes de executar para testar contextos complexos

Informações do Modelo

O card do modelo selecionado exibe informações úteis:

  • Context window: Tamanho máximo do contexto em tokens
  • Pricing: Custo por milhão de tokens (input/output)
  • Badge "Agent": Indica que o modelo suporta tool calling

O Playground é uma ferramenta valiosa tanto para usuários sem experiência em programação, que desejam entender o potencial dos LLMs, quanto para desenvolvedores experientes que buscam validar rapidamente diferentes configurações e modelos antes da implementação.

Consumo via API REST

Integre o poder dos LLMs diretamente em suas aplicações, scripts personalizados e fluxos de trabalho automatizados através de chamadas ao nosso endpoint RESTful.

Para detalhes sobre como usar a API, consulte a documentação da REST API.

bash
# Exemplo de requisição para completar um texto
# Substitua $SIPPULSE_API_KEY pela sua chave de API.
curl -X POST 'https://api.sippulse.ai/v1/llms/completion' \
  -H 'Content-Type: application/json' \
  -H 'api-key: $SIPPULSE_API_KEY' \
  -d '{
  "model": "gpt-4o-mini",
  "messages": [
    { "role": "system", "content": "Você é um assistente de IA especializado em história espacial." },
    { "role": "user",   "content": "Descreva em detalhes a importância da missão Apollo 11." }
  ],
  "temperature": 0.7,
  "max_tokens": 250,
  "stream": false # Defina como true para receber a resposta em partes (streaming)
  }'
python
import os
import requests
import json

def generate_text_completion(messages: list, model: str = "gpt-4o-mini", temperature: float = 0.7, max_tokens: int = 250, stream: bool = False) -> dict:
  """
  Chama o endpoint /v1/llms/completion para gerar texto com um LLM.

  Args:
    messages: Lista de mensagens (histórico da conversa).
    model: Identificador do modelo a ser usado.
    temperature: Controla a aleatoriedade da saída.
    max_tokens: Número máximo de tokens a serem gerados.
    stream: Se true, a resposta será enviada em partes.

  Returns:
    Dicionário contendo a resposta da API.
  """
  api_url = "https://api.sippulse.ai/v1/llms/completion"
  api_key = os.getenv("SIPPULSE_API_KEY")

  if not api_key:
    raise ValueError("A variável de ambiente SIPPULSE_API_KEY não está definida.")

  headers = {
    "Content-Type": "application/json",
    "api-key": api_key
  }
  payload = {
    "model": model,
    "messages": messages,
    "temperature": temperature,
    "max_tokens": max_tokens,
    "stream": stream
  }

  try:
    response = requests.post(api_url, headers=headers, json=payload)
    response.raise_for_status()  # Lança uma exceção para respostas de erro (4xx ou 5xx)
    return response.json()
  except requests.exceptions.RequestException as e:
    print(f"Erro na requisição API: {e}")
    if response is not None:
      print(f"Detalhes do erro: {response.text}")
    return None

if __name__ == "__main__":
  convo_messages = [
    {"role": "system", "content": "Você é um assistente de IA especializado em história espacial."},
    {"role": "user", "content": "Descreva em detalhes a importância da missão Apollo 11."}
  ]
  completion_result = generate_text_completion(convo_messages, model="gpt-4o-mini")

  if completion_result:
    # A estrutura da resposta pode variar dependendo do modelo e se stream=true
    # Geralmente, o conteúdo gerado está em completion_result['choices'][0]['message']['content']
    print(json.dumps(completion_result, indent=2, ensure_ascii=False))
javascript
// Exemplo usando a Fetch API no Node.js ou navegador
async function getTextCompletion(messages, model = "gpt-4o-mini", temperature = 0.7, maxTokens = 250, stream = false) {
  const apiUrl = "https://api.sippulse.ai/v1/llms/completion";
  const apiKey = process.env.SIPPULSE_API_KEY; // Certifique-se que SIPPULSE_API_KEY está no ambiente

  if (!apiKey) {
  throw new Error("A variável de ambiente SIPPULSE_API_KEY não está definida.");
  }

  try {
  const response = await fetch(apiUrl, {
    method: "POST",
    headers: {
    "Content-Type": "application/json",
    "api-key": apiKey
    },
    body: JSON.stringify({
    model,
    messages,
    temperature,
    max_tokens: maxTokens,
    stream
    })
  });

  if (!response.ok) {
    const errorBody = await response.text();
    throw new Error(`Erro na API: ${response.status} ${response.statusText} - ${errorBody}`);
  }
  return response.json();
  } catch (error) {
  console.error("Falha ao chamar a API de completion:", error);
  throw error;
  }
}

// Exemplo de uso
const conversationMessages = [
  { role: "system", content: "Você é um assistente de IA especializado em história espacial." },
  { role: "user",   content: "Descreva em detalhes a importância da missão Apollo 11." }
];

getTextCompletion(conversationMessages)
  .then(result => console.log(JSON.stringify(result, null, 2)))
  .catch(error => console.error(error));

Estrutura da Resposta

A API retorna um objeto com a resposta gerada, informações de uso e métricas de desempenho:

json
{
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": "A missão Apollo 11 foi um marco histórico..."
      },
      "finish_reason": "stop"
    }
  ],
  "created": 1704067200000,
  "model": "gpt-4o-mini",
  "usage": {
    "input_tokens": 45,
    "output_tokens": 120,
    "total_tokens": 165
  },
  "performance": {
    "delay": 150,
    "execution_time": 1200,
    "relative_execution_time": 100.0
  }
}
CampoDescrição
choicesArray de respostas geradas pelo modelo
choices[].messageMensagem do assistente com role e content
choices[].finish_reasonMotivo do término: stop, length, tool_calls
usage.input_tokensTokens consumidos pelo prompt de entrada
usage.output_tokensTokens gerados na resposta
performance.execution_timeTempo de execução em milissegundos

Streaming de Respostas

Para respostas em tempo real conforme são geradas, defina stream: true. A API retorna chunks no formato Server-Sent Events (SSE), ideal para interfaces de chat.

Quando Usar Streaming

CenárioRecomendação
Chat interativo✅ Usar streaming
Processamento em batch❌ Não usar
Respostas longas✅ Usar streaming
Integração simples❌ Não usar

Formato dos Chunks

Cada chunk segue o formato SSE:

data: {"choices":[{"delta":{"content":"texto"}}]}
data: {"choices":[{"delta":{"content":" parcial"}}]}
data: [DONE]
CampoDescrição
delta.contentFragmento de texto gerado
delta.rolePresente apenas no primeiro chunk
delta.tool_callsPresente quando há tool calls em streaming

Exemplos Completos

javascript
async function streamCompletion(messages) {
  const response = await fetch('https://api.sippulse.ai/v1/llms/completion', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'api-key': process.env.SIPPULSE_API_KEY
    },
    body: JSON.stringify({
      model: 'gpt-4o-mini',
      messages,
      stream: true
    })
  });

  const reader = response.body.getReader();
  const decoder = new TextDecoder();
  let fullContent = '';

  while (true) {
    const { done, value } = await reader.read();
    if (done) break;

    const chunk = decoder.decode(value);
    const lines = chunk.split('\n');

    for (const line of lines) {
      if (line.startsWith('data: ') && line !== 'data: [DONE]') {
        try {
          const data = JSON.parse(line.slice(6));
          const content = data.choices[0]?.delta?.content || '';
          fullContent += content;
          process.stdout.write(content); // Exibe em tempo real
        } catch (e) {
          // Ignora linhas mal formatadas
        }
      }
    }
  }

  return fullContent;
}
python
import requests
import json
import os

def stream_completion(messages):
    response = requests.post(
        'https://api.sippulse.ai/v1/llms/completion',
        headers={
            'Content-Type': 'application/json',
            'api-key': os.environ['SIPPULSE_API_KEY']
        },
        json={
            'model': 'gpt-4o-mini',
            'messages': messages,
            'stream': True
        },
        stream=True
    )

    full_content = ''

    for line in response.iter_lines():
        if line:
            line_text = line.decode('utf-8')
            if line_text.startswith('data: ') and line_text != 'data: [DONE]':
                try:
                    data = json.loads(line_text[6:])
                    content = data['choices'][0]['delta'].get('content', '')
                    full_content += content
                    print(content, end='', flush=True)
                except json.JSONDecodeError:
                    pass

    return full_content

Streaming com Tool Calls

Em streaming, tool calls são enviados incrementalmente:

data: {"choices":[{"delta":{"tool_calls":[{"index":0,"id":"call_abc","function":{"name":"get_weather"}}]}}]}
data: {"choices":[{"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"ci"}}]}}]}
data: {"choices":[{"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ty\": \"SP\"}"}}]}}]}
data: [DONE]

Você deve acumular os fragmentos de arguments até receber [DONE].

Chunk Final com Uso de Tokens

O último chunk antes de [DONE] inclui informações de uso:

json
{
  "choices": [{"delta": {}, "finish_reason": "stop"}],
  "usage": {
    "input_tokens": 45,
    "output_tokens": 120
  }
}

Tool Calling (Function Calling)

Modelos com a capability tools: true suportam chamadas de ferramentas, permitindo que o modelo solicite a execução de funções externas e use os resultados para gerar respostas.

Verificar Compatibilidade

Verifique se o modelo suporta tools consultando o array resources na resposta de /v1/llms/models. Se resources contém "tools", o modelo suporta tool calling.

Definindo Ferramentas

json
{
  "model": "gpt-4o",
  "messages": [
    { "role": "user", "content": "Qual a previsão do tempo em São Paulo?" }
  ],
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "get_weather",
        "description": "Obtém a previsão do tempo para uma cidade",
        "parameters": {
          "type": "object",
          "properties": {
            "city": {
              "type": "string",
              "description": "Nome da cidade"
            }
          },
          "required": ["city"]
        }
      }
    }
  ]
}

Resposta com Tool Call

Quando o modelo decide usar uma ferramenta, a resposta inclui tool_calls:

json
{
  "choices": [{
    "message": {
      "role": "assistant",
      "content": null,
      "tool_calls": [{
        "id": "call_abc123",
        "type": "function",
        "function": {
          "name": "get_weather",
          "arguments": "{\"city\": \"São Paulo\"}"
        }
      }]
    },
    "finish_reason": "tool_calls"
  }]
}

Enviando Resultado da Ferramenta

Após executar a ferramenta em seu sistema, envie o resultado de volta:

json
{
  "model": "gpt-4o",
  "messages": [
    { "role": "user", "content": "Qual a previsão do tempo em São Paulo?" },
    {
      "role": "assistant",
      "tool_calls": [{
        "id": "call_abc123",
        "type": "function",
        "function": { "name": "get_weather", "arguments": "{\"city\": \"São Paulo\"}" }
      }]
    },
    {
      "role": "tool",
      "tool_call_id": "call_abc123",
      "content": "{\"temperature\": 25, \"condition\": \"ensolarado\", \"humidity\": 60}"
    }
  ]
}

O modelo então gera uma resposta usando os dados da ferramenta:

json
{
  "choices": [{
    "message": {
      "role": "assistant",
      "content": "Em São Paulo, a temperatura está em 25°C com céu ensolarado e umidade de 60%."
    },
    "finish_reason": "stop"
  }]
}

Modelos Disponíveis

Para manter sua aplicação atualizada com os LLMs habilitados para sua organização, utilize o endpoint /v1/llms/models. Isso permite que sua aplicação se adapte dinamicamente aos modelos disponíveis sem necessidade de atualizações manuais de código.

bash
# Lista todos os modelos de LLM disponíveis para sua chave de API
curl -X GET 'https://api.sippulse.ai/v1/llms/models' \
  -H 'api-key: $SIPPULSE_API_KEY'
python
import os
import requests
import json

def list_available_models() -> dict:
  """
  Recupera a lista de LLMs disponíveis para a organização associada à chave API.
  """
  api_url = "https://api.sippulse.ai/v1/llms/models"
  api_key = os.getenv("SIPPULSE_API_KEY")

  if not api_key:
    raise ValueError("A variável de ambiente SIPPULSE_API_KEY não está definida.")

  headers = { "api-key": api_key }

  try:
    response = requests.get(api_url, headers=headers)
    response.raise_for_status()
    return response.json()
  except requests.exceptions.RequestException as e:
    print(f"Erro na requisição API para listar modelos: {e}")
    if response is not None:
      print(f"Detalhes do erro: {response.text}")
    return None

if __name__ == "__main__":
  models_data = list_available_models()
  if models_data:
    print("Modelos Disponíveis:")
    print(json.dumps(models_data, indent=2, ensure_ascii=False))
javascript
// Exemplo usando a Fetch API para listar modelos
async function listAvailableModels() {
  const apiUrl = "https://api.sippulse.ai/v1/llms/models";
  const apiKey = process.env.SIPPULSE_API_KEY;

  if (!apiKey) {
  throw new Error("A variável de ambiente SIPPULSE_API_KEY não está definida.");
  }

  try {
  const response = await fetch(apiUrl, {
    method: "GET",
    headers: { "api-key": apiKey }
  });

  if (!response.ok) {
    const errorBody = await response.text();
    throw new Error(`Erro na API ao listar modelos: ${response.status} ${response.statusText} - ${errorBody}`);
  }
  return response.json();
  } catch (error) {
  console.error("Falha ao chamar a API para listar modelos:", error);
  throw error;
  }
}

listAvailableModels()
  .then(models => console.log("Modelos Disponíveis:", JSON.stringify(models, null, 2)))
  .catch(error => console.error(error));

Exemplo de Resposta

json
[
  {
    "name": "gpt-4o",
    "status": "active",
    "execution_type": "cloud",
    "resources": ["tools", "json_schema"]
  },
  {
    "name": "gpt-4o-mini",
    "status": "active",
    "execution_type": "cloud",
    "resources": ["tools", "json_schema"]
  },
  {
    "name": "claude-sonnet-4-20250514",
    "status": "active",
    "execution_type": "cloud",
    "resources": ["tools", "json_schema"]
  }
]
CampoDescrição
nameIdentificador do modelo para uso na API
statusStatus do modelo: active, inactive, deprecated
execution_typeTipo de execução (sempre cloud)
resourcesArray de capabilities: tools, json_schema

Campo Resources

O campo resources indica capabilities suportadas pelo modelo:

  • "tools" - Suporta tool calling (function calling)
  • "json_schema" - Suporta structured output com JSON Schema

Para informações detalhadas sobre cada modelo (context window, pricing, parâmetros), consulte a página de Pricing.

SDK da OpenAI

Para desenvolvedores familiarizados com o SDK oficial da OpenAI, o SipPulse AI oferece uma integração simplificada. Basta configurar o baseURL do cliente OpenAI para apontar para o nosso endpoint compatível: https://api.sippulse.ai/v1/openai.

Isso permite que você utilize todas as funcionalidades e convenções do SDK da OpenAI, enquanto as requisições são processadas pela infraestrutura do SipPulse AI, aproveitando nossa seleção de modelos e otimizações.

python
# Exemplo de uso com o SDK Python da OpenAI
import os
from openai import OpenAI

# Configura o cliente OpenAI para usar o endpoint do SipPulse AI
client = OpenAI(
  api_key=os.environ.get("SIPPULSE_API_KEY"),
  base_url="https://api.sippulse.ai/v1/openai"
)

try:
  chat_completion = client.chat.completions.create(
    model="gpt-4o-mini", # Ou qualquer outro modelo compatível disponível no SipPulse AI
    messages=[
      {"role": "system", "content": "Você é um assistente prestativo que adora trocadilhos."},
      {"role": "user", "content": "Conte uma piada sobre programação."}
    ],
    temperature=0.6,
    max_tokens=100
  )
  print(chat_completion.choices[0].message.content)
except Exception as e:
  print(f"Ocorreu um erro: {e}")
javascript
// Exemplo de uso com o SDK JavaScript da OpenAI
import OpenAI from "openai";

const openai = new OpenAI({
  apiKey: process.env.SIPPULSE_API_KEY, // Sua chave SipPulse AI
  baseURL: "https://api.sippulse.ai/v1/openai" // Endpoint compatível do SipPulse AI
});

async function main() {
  try {
  const response = await openai.chat.completions.create({
    model: "gpt-4o-mini", // Ou qualquer outro modelo compatível
    messages: [
    { role: "system", content: "Você é um assistente prestativo que adora trocadilhos." },
    { role: "user",   content: "Conte uma piada sobre programação." }
    ],
    temperature: 0.6,
    max_tokens: 100
  });

  console.log(response.choices[0].message.content);
  } catch (error) {
  console.error("Ocorreu um erro:", error);
  }
}

main();

Benefício: Esta abordagem permite que você mantenha a familiaridade e as conveniências do SDK da OpenAI, como tipagem e métodos específicos, enquanto suas chamadas são roteadas e executadas através da plataforma SipPulse AI. Você pode alternar entre modelos da OpenAI e outros modelos oferecidos pelo SipPulse AI, se suportado pelo endpoint de compatibilidade.

Tratamento de Erros

Códigos HTTP

CódigoErroDescrição
400bad_requestRequisição malformada ou parâmetros inválidos
401unauthorizedAPI key inválida ou ausente
404model_not_foundModelo não existe ou não disponível
429rate_limit_exceededLimite de requisições excedido
500internal_errorErro interno do servidor
503service_unavailableServiço temporariamente indisponível
504timeoutTempo limite excedido

Estrutura de Erro

json
{
  "error": {
    "code": "model_not_found",
    "message": "The model 'gpt-99' does not exist or is not available for your organization."
  }
}

Erros Comuns e Soluções

CódigoCausa ComumSolução
invalid_api_keyChave API incorretaVerifique a chave em Configurações > API Keys
model_does_not_support_json_schemaModelo incompatível com structured outputUse modelo com structured_output: true
context_length_exceededPrompt muito longoReduza o tamanho das mensagens ou use modelo com context maior
rate_limit_exceededMuitas requisiçõesAguarde ou integre sua própria chave API

Integração de Chave API Própria

Se você frequentemente atinge limites de taxa, considere integrar sua própria chave API de provedores como OpenAI ou Anthropic. Isso permite usar seus próprios limites e faturamento direto.

Exemplo de Tratamento

javascript
try {
  const response = await fetch('https://api.sippulse.ai/v1/llms/completion', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json', 'api-key': apiKey },
    body: JSON.stringify({ model, messages })
  });

  if (!response.ok) {
    const error = await response.json();

    switch (error.error?.code) {
      case 'rate_limit_exceeded':
        // Implementar retry com backoff
        await sleep(5000);
        return retry();
      case 'context_length_exceeded':
        // Truncar mensagens
        return retryWithShorterContext();
      default:
        throw new Error(error.error?.message || 'Unknown error');
    }
  }

  return response.json();
} catch (e) {
  console.error('API Error:', e.message);
}
python
import time

def call_with_retry(messages, max_retries=3):
    for attempt in range(max_retries):
        try:
            response = requests.post(
                'https://api.sippulse.ai/v1/llms/completion',
                headers={'api-key': api_key, 'Content-Type': 'application/json'},
                json={'model': 'gpt-4o-mini', 'messages': messages}
            )

            if response.status_code == 429:
                # Rate limited - esperar e tentar novamente
                time.sleep(2 ** attempt)
                continue

            response.raise_for_status()
            return response.json()

        except requests.exceptions.RequestException as e:
            if attempt == max_retries - 1:
                raise
            time.sleep(2 ** attempt)

Guia de Parâmetros

Os parâmetros de geração variam de acordo com o modelo selecionado. O Playground exibe automaticamente apenas os controles relevantes para o modelo escolhido.

Parâmetros por Tipo de Modelo

  • Modelos de raciocínio (GPT-5, o1): usam reasoning_effort em vez de temperature
  • Modelos tradicionais (GPT-4o, Claude): usam temperature, top_p, max_tokens

Parâmetros Comuns

ParâmetroFaixaDescrição
temperature0-2Controla aleatoriedade. Baixo = focado, alto = criativo
max_tokens1-128kLimite máximo de tokens na resposta
top_p0-1Amostragem nucleus. Alternativa ao temperature
top_k1-100Limita seleção aos K tokens mais prováveis
frequency_penalty-2 a 2Penaliza repetição de tokens
presence_penalty-2 a 2Incentiva novos tópicos

Dicas de Uso

  • Tarefas precisas (código, extração): use temperature baixo (0.0-0.3)
  • Tarefas criativas (escrita, brainstorming): use temperature mais alto (0.7-1.0)
  • Ajuste temperature ou top_p, não ambos ao mesmo tempo
  • O max_tokens total (prompt + resposta) não pode exceder o limite do modelo

A melhor forma de entender esses parâmetros é experimentar no Playground.