Início / Aprenda / Claude com o Vercel AI SDK: createAnthropic baseURL, streaming e correções
Vercel AI SDK. Uma estrutura triangular de papel dobrado conectando uma janela de código a uma fita fluida de marcas semelhantes a texto de resposta, representando a saída da aplicação em streaming.

Claude com o Vercel AI SDK: baseURL de createAnthropic, streaming e correções

O provedor Anthropic do AI SDK, @ai-sdk/anthropic, comunica-se com a Messages API. Seu baseURL tem como valor padrão https://api.anthropic.com/v1, então, para um gateway, você substitui todo esse prefixo, incluindo /v1. OpenCode, Kilo Code e muitos frameworks de agentes usam esse mesmo provedor internamente, por isso a mesma regra aparece em suas configurações.

Instalação

terminal
npm i ai @ai-sdk/anthropic

Crie o provedor

lib/anthropic.ts
import { createAnthropic } from '@ai-sdk/anthropic';

export const anthropic = createAnthropic({
  baseURL: 'https://aiprimetech.io/v1',                 // replaces https://api.anthropic.com/v1
  apiKey: process.env.AIPRIME_API_KEY,  // sent as x-api-key; defaults to ANTHROPIC_API_KEY
});
Não há variável de ambiente para a URL base em @ai-sdk/anthropic: passe baseURL no código. A importação simples de anthropic sempre aponta para o endpoint da própria Anthropic.

generateText e streamText

generate.ts
import { generateText } from 'ai';
import { anthropic } from './lib/anthropic';

const { text, usage } = await generateText({
  model: anthropic('claude-sonnet-5'),
  prompt: 'Explain idempotency keys in two sentences.',
});
console.log(text, usage);
stream.ts
import { streamText } from 'ai';
import { anthropic } from './lib/anthropic';

const result = streamText({
  model: anthropic('claude-sonnet-5'),
  prompt: 'Write a haiku about load balancers.',
});

for await (const chunk of result.textStream) process.stdout.write(chunk);

Ambas as chamadas aceitam maxRetries (2 por padrão) para falhas transitórias, como 429 e 5xx.

Raciocínio e cache de prompts

As opções específicas da Anthropic ficam em providerOptions.anthropic. Os modelos atuais usam raciocínio adaptativo:

thinking.ts
const { text } = await generateText({
  model: anthropic('claude-sonnet-5'),
  providerOptions: { anthropic: { thinking: { type: 'adaptive' } } },
  prompt: 'Plan a zero-downtime database migration in five steps.',
});

Armazene em cache um prompt de sistema longo e estável com cacheControl; as leituras do cache passam então a aparecer em usage.inputTokenDetails.cacheReadTokens. Prompts abaixo do comprimento mínimo do modelo não são armazenados em cache.

cache.ts
const result = await generateText({
  model: anthropic('claude-sonnet-5'),
  messages: [
    {
      role: 'system',
      content: longStableInstructions,
      providerOptions: { anthropic: { cacheControl: { type: 'ephemeral' } } },
    },
    { role: 'user', content: question },
  ],
});

A alternativa compatível com OpenAI

O gateway também oferece o formato OpenAI Chat Completions, então @ai-sdk/openai-compatible funciona com a mesma /v1 URL base. Essa é a opção para modelos GPT com a mesma chave; para Claude, o provedor nativo acima preserva o raciocínio e o controle de cache.

lib/gateway.ts
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';

const gateway = createOpenAICompatible({
  name: 'aiprime',
  baseURL: 'https://aiprimetech.io/v1',
  apiKey: process.env.AIPRIME_API_KEY,
});

// gateway('claude-sonnet-5') or a GPT model ID

Solução de problemas

O que você vê Causa Correção
Um erro de análise de JSON, com a resposta começando por <baseURL sem /v1: a solicitação chegou ao sitebaseURL: 'https://aiprimetech.io/v1'
404 page not found/v1 duas vezesExatamente um /v1
Invalid API keyprocess.env com valor indefinido nesse ambiente de execução (funções serverless e de borda têm suas próprias variáveis de ambiente), então o SDK recorreu a ANTHROPIC_API_KEYDefina a variável no ambiente da implantação
Modelo não compatívelID do modelo antigo ou digitado incorretamenteUse um ID da tabela abaixo
Concurrency limit exceeded for userPromise.all sobre uma lista grandeLimite as chamadas paralelas, por exemplo, com p-limit
No available accounts / 503Capacidade temporária do serviço de origemA tentativa é repetida automaticamente; aumente maxRetries
ID do modelo Use para
claude-sonnet-5Padrão para programação e trabalho com agentes: rápido, eficiente e de preço intermediário.
claude-opus-5-5Raciocínio mais complexo, grandes refatorações e execuções longas de agentes.
claude-fable-5-1O mais capaz e mais caro; reserve-o para as tarefas mais difíceis.
claude-haiku-4-5Barato e rápido: títulos, resumos, classificação e pequenas etapas.

Perguntas frequentes

Qual é a baseURL padrão de @ai-sdk/anthropic?
https://api.anthropic.com/v1. Um gateway substitui todo o prefixo, portanto ele deve terminar em /v1, por exemplo, https://aiprimetech.io/v1.
Existe uma variável de ambiente para a URL base do provedor Anthropic do AI SDK?
Não. O provedor lê ANTHROPIC_API_KEY (ou ANTHROPIC_AUTH_TOKEN) do ambiente, mas a URL base é definida com createAnthropic({ baseURL }).
Por que o AI SDK falha com um erro de análise ao chamar o Claude?
Geralmente falta /v1 na baseURL, então a solicitação chega a um site e recebe HTML em vez de JSON.
Devo usar @ai-sdk/anthropic ou @ai-sdk/openai-compatible para Claude?
@ai-sdk/anthropic: ele se comunica pela Messages API nativa, portanto o raciocínio e o cache de prompts funcionam. Use o provedor compatível com OpenAI para modelos GPT.
Comece a usar o Claude em minutos

Obtenha uma chave de API — sem precisar de conta na Anthropic nem de lista de espera.

Obtenha sua chave de API

AI Prime Tech é um gateway de API independente. Não tem afiliação com a Anthropic, não é endossado por ela e não é seu revendedor. Claude e os nomes dos modelos relacionados são marcas comerciais de seus respectivos proprietários.

Mais guias da API do Claude

Como obter uma chave de API do ClaudePreços da API Claude explicadosA maneira mais barata de usar a API do ClaudeCursor ilimitado com a API do ClaudeAcesso ilimitado ao Claude CodeGateway da API do Claude vs. acesso direto à AnthropicComo usar Claude por meio de uma API compatível com OpenAIModelos Claude explicados: uma comparação entre Claude Opus, Sonnet, Haiku e Fable — todos os modelos da API Claude, nomes e preços dos modelos Anthropic (2026)Pagamento da API do Claude com criptomoedasAcesso à API do Claude sem lista de esperaComo reduzir o uso de tokens do ClaudeCline ilimitado com a API do ClaudeRoo Code ilimitado com a API do ClaudeClaude ilimitado nas IDEs da JetBrainsAider ilimitado com a API do ClaudeClaude ilimitado no VS CodeConfiguração do OpenCode para Claude: configuração do opencode.json, modelos e erros comunsComo executar um agente Hermes ilimitado no ClaudeExecutando OpenClaw ilimitado com ClaudeO que significa uma API compatível com a AnthropicChave de API do Claude Code — ANTHROPIC_API_KEY: como obtê-la, configurá-la e quando usar claude setup-token em seu lugarCustos da API do Claude Code — Preços e como reduzi-losErros da API Claude explicados: erro de servidor 500, sobrecarga 529, limite de requisições 429, requisição inválida 400 — e a correção para cada umComo comprar créditos da API do Claude — e por que um crédito do Claude é melhor do que qualquer oferta de "comprar conta do Claude"API Claude gratuita: existe uma chave de API Claude gratuita e o que realmente é gratuito em 2026?API do Claude vs assinatura Claude Pro/Max — Qual escolherComo executar a CLI do Codex no ClaudeConectando Claude ao n8nRoteando LiteLLM para ClaudeUsando Claude no Kilo CodeIntegre Claude ao GitHub CopilotConecte o Zed ao Claude por meio do gatewayConecte o Cherry Studio ao ClaudeChatAnthropic no LangChain: importação, base_url, streaming, ferramentas e errosSDK de Python da Anthropic: instale, defina base_url, use streaming e trate errosExecute o Factory Droid com o ClaudeA API do Claude Code, explicadaComo integrar a API do Claude à sua aplicaçãoComo obter uso ilimitado do Claude — e por que não existe "Claude Code crackeado"