Erro 403: o que fazer quando qwq-plus falha

Um 403 significa que você está autenticado, mas sem permissão: a chave é válida, porém não pode chamar este modelo ou este grupo.

403 Forbidden significa que a identidade foi reconhecida, mas o acesso é negado. A diferença para 401: 401 pergunta quem é você, 403 diz que você não tem permissão. Normalmente é preciso adicionar o modelo à lista permitida ou ao grupo vinculado à sua key.

qwq-plus é fornecido por Alibaba. Tudo nesta página — causas, correções e dados medidos — é compilado a partir do comportamento real deste modelo na camada de gateway.

Neste gateway, o gatilho mais comum é: Esta chave não está autorizada para este modelo. A primeira ação recomendada é: Adicione este modelo à lista permitida da chave na página Tokens.

Causas comuns

  • Esta chave não está autorizada para este modelo
  • O modelo não está no grupo ao qual a chave está vinculada
  • A chave tem uma lista de IPs permitidos que exclui seu IP atual
  • O modelo foi retirado ou exige permissões maiores

Como resolver

  • Adicione este modelo à lista permitida da chave na página Tokens
  • Confirme que o grupo da chave inclui este modelo
  • Revise as configurações da lista de IPs
  • Mude para um modelo que você pode chamar

Nova tentativa com backoff exponencial

O código abaixo tenta novamente quando qwq-plus retorna 403: até 5 tentativas, com espera crescente e jitter aleatório para que chamadas concorrentes não repitam ao mesmo tempo. Leia a URL base e a API key de variáveis de ambiente, nunca as deixe fixas no código.

import os, time, random
import requests

BASE  = os.getenv("OPENAI_BASE_URL")   # e.g. https://<your-gateway>/v1
KEY   = os.getenv("OPENAI_API_KEY")
MODEL = 'qwq-plus'


def chat(messages, retries=5):
    """Retry with exponential backoff + jitter."""
    for i in range(retries):
        try:
            r = requests.post(
                BASE + "/chat/completions",
                headers={"Authorization": "Bearer " + KEY},
                json={"model": MODEL, "messages": messages, "stream": True},
                timeout=60,
            )
            if r.status_code == 429 or r.status_code >= 500:
                time.sleep(min(2 ** i + random.uniform(0, 1), 30))
                continue
            r.raise_for_status()
            return r.json()
        except requests.exceptions.Timeout:
            time.sleep(min(2 ** i + random.uniform(0, 1), 30))
    raise RuntimeError("gave up after " + str(retries) + " retries")


print(chat([{"role": "user", "content": "hello"}]))

Dados-chave deste modelo

Endpoint da APIhttps://api.airai.cc/v1
Compatível com OpenAIOpenAI-compatible
FornecedorAlibaba
Contexto131.1K
RecursosReasoning, Tools
Formatos de APIopenai, openai-response, openai-response-compact, anthropic, gemini, openai-alpha-search
Fórmula de cobrançap * 0.8 + c * 2.4

Perguntas frequentes

Preciso mudar os parâmetros quando qwq-plus retorna 403?

Os parâmetros precisam mudar; só tentar de novo não ajudará. As tags de capacidade são Reasoning, Tools e os limites de parâmetros vêm desse conjunto. A janela de contexto 131.1K define a entrada máxima por requisição; o que passar é rejeitado na hora. Falhe rápido em erros de parâmetro em vez de gastar retentativas com eles.

Requisições concorrentes devem ir para fila ou ser limitadas direto?

Aqui as variáveis reais são concorrência e timeouts, não o modelo. Reduza primeiro a concorrência — a maior parte dos problemas de throughput desaparece. Este modelo tem janela de contexto de 131.1K e é da Alibaba. Um contexto de 131.1K significa que entradas longas aumentam a latência do primeiro token. Para saídas longas, aumente o timeout para 60 segundos ou mais. Adicione uma camada de cache para que requisições repetidas não cheguem todas ao modelo.

403 é mais provável com chamadas diretas do frontend ou via backend?

Um fallback na arquitetura é mais confiável do que remendar cada erro separadamente. Este modelo da Alibaba tem vários nós upstream entre os quais o gateway pode alternar. Coloque o nome do modelo na configuração, assim trocar de upstream não exige mudança de código.

Requisições falhas contam na minha cota de limite de taxa?

Não há cobrança: só conta para o consumo a saída efetivamente gerada. Só é cobrada a saída já produzida; a parte falha não. Com cobrança p * 0.8 + c * 2.4, o custo de saídas longas vem principalmente dos tokens de saída. Com a cobrança p * 0.8 + c * 2.4, requisições falhas não entram no uso. Confira primeiro saldo e limites de taxa no console, depois o código. Ao estimar o custo a partir de p * 0.8 + c * 2.4, inclua também o orçamento de retentativas.

Outros erros deste modelo

Outros modelos com o mesmo erro

Dados atualizados: 2026-10-10 18:30

Suporte técnicoAtendimento online
Voltar ao topo