Pular para o conteúdo
CRBRASIL

Notícia · Dados e Analytics

OpenRouter permite acessar vários modelos de IA em apps Python com uma única API

O KDnuggets publicou um tutorial sobre como usar a API do OpenRouter para acessar vários modelos de IA em aplicações Python por uma única API, comparando respostas, trocando de modelo com uma linha de código e configurando fallbacks automáticos. Abaixo, os principais pontos traduzidos e adaptados para a comunidade CRO Brasil. O problema que o

Redação CRO Brasil

· 7 min de leitura

Neste artigo · 8 seções
  1. O problema que o OpenRouter resolve
  2. Pré-requisitos e criação da conta
  3. Preparando o projeto
  4. Enviando a primeira requisição
  5. Trocando de modelo sem mudar o código
  6. Deixando o OpenRouter escolher um modelo gratuito
  7. Adicionando modelos de fallback para confiabilidade
  8. Resumo

O KDnuggets publicou um tutorial sobre como usar a API do OpenRouter para acessar vários modelos de IA em aplicações Python por uma única API, comparando respostas, trocando de modelo com uma linha de código e configurando fallbacks automáticos. Abaixo, os principais pontos traduzidos e adaptados para a comunidade CRO Brasil.

O problema que o OpenRouter resolve

Imagine a construção de um assistente de tickets de suporte em que é preciso comparar como GPT, Claude e Llama respondem à mesma mensagem de cliente antes de escolher um deles. No caminho tradicional, isso exige conta em três provedores diferentes, três esquemas de autenticação e a reescrita do código de requisição três vezes para rodar uma única comparação.

O OpenRouter elimina essa repetição. Ele fica na frente de dezenas de provedores e os expõe por uma API única, de modo que trocar de modelo vira a alteração de uma linha, e não uma nova integração. O código Python permanece o mesmo, independente de qual provedor responde à requisição.

O tutorial cobre quatro pontos:

  • Criação de conta no OpenRouter e geração da API key
  • Envio da primeira requisição a um modelo com Python puro e a biblioteca requests
  • Troca de modelo alterando apenas uma string, sem outras mudanças no código
  • Seleção automática de modelo pelo OpenRouter e configuração de modelos de backup para confiabilidade

Pré-requisitos e criação da conta

Não é necessário conhecimento de IA ou machine learning para acompanhar. Basta familiaridade com Python básico, instalação de pacotes via pip e definição de variáveis de ambiente no terminal. O OpenRouter cuida da integração com os modelos; o código apenas envia texto e lê a resposta.

O primeiro passo é criar uma conta gratuita no OpenRouter e, na seção Keys do menu da conta, gerar uma nova API key. A recomendação é guardá-la como variável de ambiente para não correr o risco de commitar a chave em um repositório:

export OPENROUTER_API_KEY="sua-chave-aqui"

Alguns modelos no OpenRouter são gratuitos para teste, marcados com o sufixo :free, sem necessidade de cadastrar meio de pagamento. Todos os exemplos do tutorial usam esses modelos, então é possível rodar tudo a custo zero. Se um ID de modelo parar de responder, a lista atualizada está em openrouter.ai/models filtrada por modelos gratuitos — ou basta usar openrouter/free, que sempre resolve para o modelo gratuito disponível no momento.

Preparando o projeto

O tutorial sugere criar uma pasta para o projeto com um ambiente virtual e instalar a única dependência necessária, a biblioteca requests. Por ser uma API HTTP simples, não é preciso nenhum SDK especial:

mkdir support-bot-demo
cd support-bot-demo
python -m venv .venv
source .venv/bin/activate
pip install requests

Existe também um SDK oficial do OpenRouter, instalável via pip, que oferece objetos de cliente tipados em vez de dicionários brutos. O tutorial usa apenas requests para manter cada requisição visível como JSON puro, facilitando entender o que está sendo enviado e recebido.

Enviando a primeira requisição

Toda requisição ao OpenRouter tem o mesmo formato, qualquer que seja o modelo: um POST para um único endpoint, com a API key nos headers e uma lista de mensagens no corpo. O script de exemplo envia uma mensagem de suporte ao cliente e imprime a resposta:

import os
import requests

API_URL = "https://openrouter.ai/api/v1/chat/completions"
API_KEY = os.getenv("OPENROUTER_API_KEY")

customer_message = (
    "My order #48213 arrived with the wrong charger. "
    "I need the correct one before Friday, can you help?"
)

payload = {
    "model": "meta-llama/llama-3.2-3b-instruct:free",
    "messages": [
        {"role": "system", "content": "You are a concise, polite customer support agent."},
        {"role": "user", "content": customer_message},
    ],
}

headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json",
}

response = requests.post(API_URL, headers=headers, json=payload)
data = response.json()

print(f"Model used: {data['model']}")
print(f"Reply: {data['choices'][0]['message']['content']}")

O dicionário payload é a requisição inteira: o campo model indica ao OpenRouter qual modelo usar, no formato provedor/nome-do-modelo, e messages segue o mesmo padrão role/content de qualquer API de chat. A mensagem de sistema define o tom uma única vez e a mensagem de usuário é o texto real do ticket. A resposta volta em JSON, com o texto em data["choices"][0]["message"]["content"] — o mesmo formato da maioria das APIs de chat completion, já que o OpenRouter normaliza a resposta de todos os provedores no formato compatível com o da OpenAI.

Trocando de modelo sem mudar o código

Como o modelo é apenas uma string no payload, comparar provedores significa mudar uma linha. O tutorial encapsula a lógica numa função que recebe o nome do modelo como argumento:

def ask_model(model_name, message):
    payload = {
        "model": model_name,
        "messages": [
            {"role": "system", "content": "You are a concise, polite customer support agent."},
            {"role": "user", "content": message},
        ],
    }
    response = requests.post(API_URL, headers=headers, json=payload)
    return response.json()

ticket = "My order #48213 arrived with the wrong charger. I need the correct one before Friday."

for model in ["meta-llama/llama-3.2-3b-instruct:free", "qwen/qwen3-4b:free", "mistralai/mistral-7b-instruct:free"]:
    result = ask_model(model, ticket)
    reply = result["choices"][0]["message"]["content"]
    print(f"--- {model} ---")
    print(reply, "\n")

O loop chama a mesma função três vezes com três modelos diferentes e imprime cada resposta ao lado do modelo que a produziu. Esse é o benefício central do OpenRouter na prática: uma função chamada três vezes, em vez de três APIs distintas.

Deixando o OpenRouter escolher um modelo gratuito

Quando o modelo específico não importa, definir "model": "openrouter/free" passa a decisão ao Free Models Router do OpenRouter, que sempre seleciona entre os modelos gratuitos disponíveis:

payload = {
    "model": "openrouter/free",
    "messages": [{"role": "user", "content": ticket}],
}
response = requests.post(API_URL, headers=headers, json=payload)
data = response.json()

print(f"OpenRouter picked: {data['model']}")

É o default mais seguro para prototipagem: qualquer que seja o modelo gratuito disponível no dia, nunca há cobrança. É uma configuração diferente de openrouter/auto, que escolhe o modelo mais adequado ao prompt e pode incluir modelos pagos.

Além disso, quando um modelo é especificado pelo nome, o OpenRouter costuma ter mais de um provedor hospedando-o, e é possível escolher qual usar com o campo provider. Por exemplo, payload["provider"] = {"sort": "price"} favorece o provedor mais barato, e {"sort": "latency"} o mais rápido. Isso faz diferença principalmente em modelos pagos com volume real; em modelos :free o efeito é pequeno, já que não há custo por token a otimizar.

Adicionando modelos de fallback para confiabilidade

Um único modelo pode falhar por indisponibilidade do provedor, rate limit, filtro de conteúdo e outros motivos. Para qualquer coisa além de um projeto pequeno, o ideal é ter um backup automático em vez de ver a aplicação quebrar na primeira falha. O OpenRouter aceita uma lista de modelos em vez de um só:

payload = {
    "models": [
        "qwen/qwen3-4b:free",
        "meta-llama/llama-3.2-3b-instruct:free",
        "mistralai/mistral-7b-instruct:free",
    ],
    "messages": [{"role": "user", "content": ticket}],
}
response = requests.post(API_URL, headers=headers, json=payload)
data = response.json()

print(f"Answered by: {data['model']}")
print(data["choices"][0]["message"]["content"])

A chave muda de model (singular) para models (uma lista). O OpenRouter tenta cada entrada em ordem e retorna a primeira que funciona, sem exigir lógica de retry no próprio código. A lista deve ser ordenada conforme a prioridade da aplicação — por exemplo, a maior qualidade primeiro com backups mais baratos, ou o mais rápido primeiro com backups mais confiáveis em seguida.

Resumo

O tutorial fecha com um quadro dos recursos e de quando usar cada um:

  • String única de modelo com tag :free — mira um modelo gratuito específico; quando é preciso um modelo previsível a custo zero
  • Troca do valor de model — compara modelos sem outras mudanças de código; ao testar qual modelo se encaixa melhor no caso de uso
  • “model”: “openrouter/free” — o OpenRouter escolhe qualquer modelo gratuito disponível; prototipagem rápida com custo zero garantido
  • “provider”: {“sort”: “price”} ou {“sort”: “latency”} — escolhe o provedor do modelo por custo ou velocidade; trabalho com modelos pagos em volume considerável
  • “models”: […] (lista) — tenta cada modelo em ordem até um funcionar; aplicações que precisam continuar no ar se um modelo falhar

Com esses fundamentos, é possível construir desde um script pontual até um bot de suporte que permanece online mesmo quando um provedor sai do ar. Como referências adicionais, o artigo indica o guia Quickstart da API do OpenRouter e a documentação de roteamento de provedores.

Artigo original: https://www.kdnuggets.com/access-multiple-ai-models-in-your-python-apps-using-openrouter

Traduzido e adaptado pela Equipe CRO Brasil

Notícia · Dados e Analytics

Vulnerabilidades críticas no PHP exigem atualização imediata de servidores com Matomo

Redação CRO Brasil · 27 de out de 2026 · 3 min

Notícia · Dados e Analytics

Economia digital do Sudeste Asiático deve chegar a US$ 368 bilhões em 2026, impulsionada pela IA

Taciana Serafim · 21 de out de 2026 · 4 min

Notícia · Dados e Analytics

Criar ou comprar feature flags: o que considerar além do óbvio

Taciana Serafim · 19 de out de 2026 · 7 min