Pular para o conteúdo principal

Provedores Customizados

O AISCouncil suporta qualquer API LLM que implemente o formato de chat completions da OpenAI. Isso permite conectar a modelos auto-hospedados, gateways LLM corporativos, provedores alternativos e servidores de inferência locais.

O Que São Provedores Customizados

Provedores customizados são endpoints LLM definidos pelo usuário que usam o formato de API compatível com OpenAI (/v1/chat/completions com streaming SSE). A maioria dos servidores de inferência modernos e gateways LLM implementam este formato, tornando-o o padrão de fato para APIs LLM.

Casos de Uso

  • Modelos auto-hospedados -- Conecte a vLLM, Text Generation Inference ou LocalAI rodando em seu próprio hardware
  • Gateways LLM corporativos -- Rotear através do proxy de API da sua empresa com autenticação e logging
  • Proxies locais -- Use LiteLLM ou ferramentas similares para unificar múltiplos provedores atrás de um único endpoint
  • Provedores alternativos -- Conecte a qualquer provedor ainda não integrado no app
  • Modelos fine-tuned -- Acesse seus modelos customizados fine-tuned em qualquer plataforma de hospedagem compatível
  • Deploys air-gapped -- Use modelos rodando em uma rede local sem acesso à internet

Adicionando um Provedor Customizado via Configurações

  1. Abra Settings (clique no ícone de engrenagem ou pressione Ctrl+Shift+S)
  2. Vá para a seção API Keys
  3. Role até Custom Providers
  4. Preencha os campos:
CampoObrigatórioDescrição
Provider IDSimUm identificador curto (ex: my-llm). Deve ser único, minúsculas, sem espaços
Display NameSimNome legível por humanos mostrado no dropdown de provedores
Endpoint URLSimURL completa para o endpoint de chat completions (ex: https://my-api.example.com/v1/chat/completions)
API KeyNãoBearer token para autenticação (deixe vazio se não for necessário)
ModelsSimLista separada por vírgulas de IDs de modelos disponíveis neste endpoint
  1. Clique Save
  2. O provedor aparece no dropdown de provedores ao criar ou configurar um bot

Registro Programático

Você pode registrar provedores customizados do console do navegador ou de um script:

AIS.Providers.registerCustom("my-provider", {
name: "Meu Provedor",
endpoint: "https://my-api.example.com/v1/chat/completions",
models: [
{ id: "my-model-7b", name: "Meu Modelo 7B" },
{ id: "my-model-70b", name: "Meu Modelo 70B" },
],
apiStyle: "openai",
});

Opções de Registro

OpçãoTipoPadrãoDescrição
namestringID do ProvedorNome de exibição
endpointstringObrigatórioURL completa para o endpoint de chat completions
modelsarray[{id: 'default', name: id}]Modelos disponíveis
apiStylestring'openai'Formato de API (atualmente apenas 'openai' é suportado)
extraHeadersobject{}Headers HTTP adicionais para incluir em toda requisição
pricingobjectnullInfo de preço (para rastreamento de custos)
maxInputnumber0Comprimento máximo de contexto de entrada (apenas para exibição)

Headers Extras

Se seu endpoint requer headers customizados (ex: para esquemas de autenticação diferentes de Bearer tokens):

AIS.Providers.registerCustom("corp-gateway", {
name: "Gateway Corporativo",
endpoint: "https://llm.corp.internal/v1/chat/completions",
models: [{ id: "gpt-4o", name: "GPT-4o (via gateway)" }],
extraHeaders: {
"X-Corp-Token": "seu-token-interno",
"X-Department": "engineering",
},
});

Persistência

Provedores customizados são automaticamente salvos no localStorage sob a chave ais-custom-providers. Eles são restaurados em todo carregamento de página, então você só precisa registrá-los uma vez.

Gerenciando Provedores Customizados

Listar provedores customizados registrados

const customIds = AIS.Providers.listCustom();
// ['my-provider', 'corp-gateway']

Remover um provedor customizado

AIS.Providers.removeCustom("my-provider");

Isso remove tanto do registro runtime quanto do localStorage.

Listar todos os provedores (integrados + customizados)

const all = AIS.Providers.list();
// [{ name: 'anthropic', models: [...] }, { name: 'my-provider', models: [...] }, ...]

Como Funciona Internamente

Provedores customizados usam a mesma fábrica de streaming SSE openaiCompatible() que alimenta os provedores integrados OpenAI, xAI, OpenRouter, DeepSeek, Groq e outros. Esta fábrica:

  1. Constrói um corpo de requisição padrão no formato OpenAI (model, messages, temperature, max_tokens, stream, etc.)
  2. Envia uma requisição POST com header Authorization: Bearer {apiKey}
  3. Parseia o stream SSE (linhas data: {...}) para deltas de conteúdo
  4. Lida tanto com formatos de resposta streaming (delta) quanto non-streaming (message)
  5. Extrai uso de tokens do campo usage se presente

Todos os campos de config funcionam com provedores customizados: temperature, top_p, frequency_penalty, presence_penalty, sequências de parada, formato de resposta e esforço de raciocínio.

Serviços Compatíveis

Os seguintes serviços implementam o formato de API compatível com OpenAI e funcionam como provedores customizados:

ServiçoEndpointNotas
LiteLLMhttp://localhost:4000/v1/chat/completionsProxy que unifica 100+ provedores
LocalAIhttp://localhost:8080/v1/chat/completionsRode modelos open-source localmente
vLLMhttp://localhost:8000/v1/chat/completionsServidor de inferência de alta performance
Text Generation Inferencehttp://localhost:8080/v1/chat/completionsServidor de inferência Hugging Face
Ollamahttp://localhost:11434/v1/chat/completionsJá integrado, mas pode ser adicionado como customizado também
llama.cpp (modo server)http://localhost:8080/v1/chat/completionsInferência C++ leve
Janhttp://localhost:1337/v1/chat/completionsApp desktop com modelos locais
LM Studiohttp://localhost:1234/v1/chat/completionsApp desktop com gerenciamento de modelos
Cloudflare Workers AIhttps://api.cloudflare.com/client/v4/accounts/{id}/ai/v1/chat/completionsIntegrado, mas pode customizar
Azure OpenAIhttps://{resource}.openai.azure.com/openai/deployments/{deployment}/chat/completions?api-version=2024-02-01Requer header api-key

Solução de Problemas

Erros CORS

CORS (Cross-Origin Resource Sharing)

Quando o navegador chama um endpoint de API diretamente, o servidor deve incluir headers CORS em sua resposta. Sem eles, o navegador bloqueia a requisição por razões de segurança.

Se você ver um erro CORS no console, seu endpoint customizado precisa retornar estes headers:

Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Allow-Methods: POST, OPTIONS

Para serviços locais:

  • Ollama: Defina a variável de ambiente OLLAMA_ORIGINS=* antes de iniciar
  • vLLM: Adicione a flag --allowed-origins '*'
  • LiteLLM: Adicione a flag --cors ou defina LITELLM_ALLOW_ORIGINS=*
  • LocalAI: CORS está habilitado por padrão

Para serviços remotos atrás de reverse proxy (Nginx):

location /v1/ {
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization' always;
add_header 'Access-Control-Allow-Methods' 'POST, OPTIONS' always;

if ($request_method = 'OPTIONS') {
return 204;
}

proxy_pass http://localhost:8000;
}

Conexão Recusada

  • Verifique se a URL do endpoint está correta e o serviço está rodando
  • Para serviços locais, certifique-se de que o servidor está escutando na porta esperada
  • Para serviços localhost, tente 127.0.0.1 em vez (ou vice-versa)
  • Verifique se nenhum firewall está bloqueando a porta

Erros de Autenticação

  • Verifique se sua chave de API está correta
  • Alguns serviços usam headers de auth diferentes -- use extraHeaders se o serviço não usa formato padrão Authorization: Bearer
  • Azure OpenAI usa header api-key em vez de Authorization

Respostas Vazias ou Ilegíveis

  • Confirme que o endpoint retorna formato SSE compatível com OpenAI (data: {"choices":[{"delta":{"content":"..."}}]})
  • Alguns serviços requerem stream: true no corpo da requisição (o app envia isso por padrão)
  • Verifique se o ID do modelo corresponde ao que o serviço espera
  • Abra a aba Network do DevTools do navegador para inspecionar a requisição e resposta brutas