Source: https://aiprimetech.io/pt/learn/use-claude-api-with-vercel-ai-sdk/ [Início](/pt/) / [Aprenda](/pt/learn/) / Claude com o Vercel AI SDK: createAnthropic baseURL, streaming e correções # 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 terminalCopiar ``` npm i ai @ai-sdk/anthropic ``` ## Crie o provedor lib/anthropic.tsCopiar ``` 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.tsCopiar ``` 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.tsCopiar ``` 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.tsCopiar ``` 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.tsCopiar ``` 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.tsCopiar ``` 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 site | baseURL: 'https://aiprimetech.io/v1' | 404 page not found | /v1 duas vezes | Exatamente um /v1 | Invalid API key | process.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_KEY | Defina a variável no ambiente da implantação | Modelo não compatível | ID do modelo antigo ou digitado incorretamente | Use um ID da tabela abaixo | Concurrency limit exceeded for user | Promise.all sobre uma lista grande | Limite as chamadas paralelas, por exemplo, com p-limit | No available accounts / 503 | Capacidade temporária do serviço de origem | A tentativa é repetida automaticamente; aumente maxRetries | ID do modelo | Use para | claude-sonnet-5 | Padrão para programação e trabalho com agentes: rápido, eficiente e de preço intermediário. | claude-opus-5-5 | Raciocínio mais complexo, grandes refatorações e execuções longas de agentes. | claude-fable-5-1 | O mais capaz e mais caro; reserve-o para as tarefas mais difíceis. | claude-haiku-4-5 | Barato 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](/register) 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 Claude](/pt/learn/how-to-get-a-claude-api-key/)[Preços da API Claude explicados](/pt/learn/claude-api-pricing-explained/)[A maneira mais barata de usar a API do Claude](/pt/learn/cheapest-way-to-use-claude-api/)[Cursor ilimitado com a API do Claude](/learn/use-claude-api-with-cursor/)[Acesso ilimitado ao Claude Code](/pt/learn/use-claude-api-with-claude-code/)[Gateway da API do Claude vs. acesso direto à Anthropic](/pt/learn/claude-api-vs-anthropic-direct/)[Como usar Claude por meio de uma API compatível com OpenAI](/pt/learn/openai-compatible-claude-api/)[Modelos 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)](/pt/learn/claude-api-models-compared/)[Pagamento da API do Claude com criptomoedas](/pt/learn/claude-api-with-crypto-payment/)[Acesso à API do Claude sem lista de espera](/pt/learn/claude-api-without-waitlist/)[Como reduzir o uso de tokens do Claude](/pt/learn/how-to-reduce-claude-token-usage/)[Cline ilimitado com a API do Claude](/pt/learn/use-claude-api-with-cline/)[Roo Code ilimitado com a API do Claude](/pt/learn/use-claude-api-with-roo-code/)[Claude ilimitado nas IDEs da JetBrains](/pt/learn/use-claude-api-with-jetbrains/)[Aider ilimitado com a API do Claude](/pt/learn/use-claude-api-with-aider/)[Claude ilimitado no VS Code](/pt/learn/use-claude-api-with-vscode/)[Configuração do OpenCode para Claude: configuração do opencode.json, modelos e erros comuns](/pt/learn/use-claude-api-with-opencode/)[Como executar um agente Hermes ilimitado no Claude](/pt/learn/run-hermes-agent-with-claude-api/)[Executando OpenClaw ilimitado com Claude](/pt/learn/run-openclaw-with-claude-api/)[O que significa uma API compatível com a Anthropic](/pt/learn/anthropic-compatible-api/)[Chave de API do Claude Code — ANTHROPIC_API_KEY: como obtê-la, configurá-la e quando usar claude setup-token em seu lugar](/pt/learn/claude-code-api-key-setup/)[Custos da API do Claude Code — Preços e como reduzi-los](/pt/learn/claude-code-api-costs/)[Erros 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 um](/pt/learn/claude-api-errors-troubleshooting/)[Como 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"](/pt/learn/buy-claude-api-credits/)[API Claude gratuita: existe uma chave de API Claude gratuita e o que realmente é gratuito em 2026?](/pt/learn/claude-api-free-trial/)[API do Claude vs assinatura Claude Pro/Max — Qual escolher](/pt/learn/claude-api-vs-subscription/)[Como executar a CLI do Codex no Claude](/pt/learn/use-claude-api-with-codex/)[Conectando Claude ao n8n](/pt/learn/use-claude-api-with-n8n/)[Roteando LiteLLM para Claude](/pt/learn/use-claude-api-with-litellm/)[Usando Claude no Kilo Code](/pt/learn/use-claude-api-with-kilo-code/)[Integre Claude ao GitHub Copilot](/pt/learn/use-claude-api-with-github-copilot/)[Conecte o Zed ao Claude por meio do gateway](/pt/learn/use-claude-api-with-zed/)[Conecte o Cherry Studio ao Claude](/pt/learn/use-claude-api-with-cherry-studio/)[ChatAnthropic no LangChain: importação, base_url, streaming, ferramentas e erros](/pt/learn/use-claude-api-with-langchain/)[SDK de Python da Anthropic: instale, defina base_url, use streaming e trate erros](/pt/learn/anthropic-python-sdk/)[Execute o Factory Droid com o Claude](/pt/learn/use-claude-api-with-factory-droid/)[A API do Claude Code, explicada](/pt/learn/claude-code-api/)[Como integrar a API do Claude à sua aplicação](/pt/learn/claude-api-integration/)[Como obter uso ilimitado do Claude — e por que não existe "Claude Code crackeado"](/pt/learn/get-unlimited-claude-usage/)