Home / Impara / Claude con Vercel AI SDK: createAnthropic baseURL, streaming e correzioni
Vercel AI SDK. Una struttura triangolare di carta piegata che collega una finestra di codice a un nastro fluido di segni simili al testo di una risposta, rappresentando l'output in streaming dell'applicazione.

Claude con Vercel AI SDK: baseURL di createAnthropic, streaming e soluzioni ai problemi

Il provider Anthropic di AI SDK, @ai-sdk/anthropic, comunica con la Messages API. Il suo baseURL ha come valore predefinito https://api.anthropic.com/v1, quindi per un gateway devi sostituire l'intero prefisso, incluso /v1. OpenCode, Kilo Code e molti framework per agenti usano internamente lo stesso provider, motivo per cui la stessa regola compare nelle loro configurazioni.

Installazione

terminale
npm i ai @ai-sdk/anthropic

Crea il provider

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
});
Non esiste una variabile d'ambiente per l'URL di base in @ai-sdk/anthropic: passa baseURL nel codice. La semplice importazione di anthropic punta sempre all'endpoint di 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);

Entrambe le chiamate accettano maxRetries (2 per impostazione predefinita) per errori transitori come 429 e 5xx.

Ragionamento e memorizzazione dei prompt nella cache

Le opzioni specifiche di Anthropic vanno in providerOptions.anthropic. I modelli attuali usano il ragionamento adattivo:

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.',
});

Memorizza nella cache un prompt di sistema lungo e stabile con cacheControl; le letture dalla cache compaiono poi in usage.inputTokenDetails.cacheReadTokens. I prompt più brevi della lunghezza minima prevista dal modello non vengono memorizzati nella 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 },
  ],
});

L'alternativa compatibile con OpenAI

Il gateway supporta anche il formato OpenAI Chat Completions, quindi @ai-sdk/openai-compatible funziona con lo stesso URL di base /v1 . È la soluzione per usare i modelli GPT con la stessa chiave; per Claude, il provider nativo descritto sopra mantiene il ragionamento e il controllo della 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

Risoluzione dei problemi

Che cosa vedi Causa Soluzione
Un errore di parsing di JSON, con una risposta che inizia con <baseURL senza /v1: la richiesta è arrivata al sito webbaseURL: 'https://aiprimetech.io/v1'
404 page not found/v1 due volteEsattamente un /v1
Invalid API keyprocess.env valore non definito in quell'ambiente di esecuzione (le funzioni serverless ed edge hanno un proprio ambiente), quindi l'SDK ha usato come ripiego ANTHROPIC_API_KEYImposta la variabile nell'ambiente di distribuzione
Modello non supportatoID del modello obsoleto o scritto in modo erratoUsa un ID della tabella seguente
Concurrency limit exceeded for userPromise.all su un array di grandi dimensioniLimita le chiamate parallele, ad esempio con p-limit
No available accounts / 503Capacità temporaneamente limitata del servizio a monteNuovo tentativo automatico; aumenta maxRetries
ID del modello Usalo per
claude-sonnet-5Scelta predefinita per programmazione e attività degli agenti: veloce, potente, di fascia media.
claude-opus-5-5Ragionamenti più complessi, refactoring estesi, esecuzioni prolungate degli agenti.
claude-fable-5-1Il più capace e il più costoso; riservalo alle attività più difficili.
claude-haiku-4-5Economico e rapido: titoli, riepiloghi, classificazione, piccoli passaggi.

Domande frequenti

Qual è il baseURL predefinito di @ai-sdk/anthropic?
https://api.anthropic.com/v1. Un gateway sostituisce l'intero prefisso, quindi deve terminare con /v1, ad esempio https://aiprimetech.io/v1.
Esiste una variabile d'ambiente per l'URL di base del provider Anthropic di AI SDK?
No. Il provider legge ANTHROPIC_API_KEY (o ANTHROPIC_AUTH_TOKEN) dall'ambiente, ma l'URL di base si imposta con createAnthropic({ baseURL }).
Perché AI SDK restituisce un errore di parsing quando chiama Claude?
Di solito manca /v1 nel baseURL, quindi la richiesta raggiunge un sito web e riceve HTML invece di JSON.
Dovrei usare @ai-sdk/anthropic o @ai-sdk/openai-compatible per Claude?
@ai-sdk/anthropic: usa la Messages API nativa, quindi il ragionamento e la memorizzazione dei prompt nella cache funzionano. Usa il provider compatibile con OpenAI per i modelli GPT.
Inizia a usare Claude in pochi minuti

Ottieni una chiave API: non servono un account Anthropic né una lista d'attesa.

Ottieni la tua chiave API

AI Prime Tech è un gateway API indipendente. Non è affiliato ad Anthropic, non è approvato da Anthropic e non è un suo rivenditore. Claude e i nomi dei modelli correlati sono marchi dei rispettivi proprietari.

Altre guide all'API di Claude

Come ottenere una chiave API di ClaudeI prezzi dell'API Claude, spiegatiIl modo più economico per usare l'API ClaudeCursor illimitato con l'API ClaudeAccesso illimitato a Claude CodeGateway API Claude e accesso diretto ad Anthropic a confrontoUsare Claude tramite un'API compatibile con OpenAII modelli Claude spiegati: un confronto tra Claude Opus, Sonnet, Haiku e Fable — tutti i modelli API Claude, i nomi dei modelli Anthropic e i prezzi (2026)Pagare l'API Claude con criptovaluteAccesso all'API Claude senza lista d'attesaCome ridurre l'utilizzo dei token di ClaudeCline illimitato con l'API ClaudeRoo Code illimitato con l'API ClaudeClaude illimitato negli IDE JetBrainsAider senza limiti con l'API di ClaudeClaude illimitato in VS CodeConfigurazione di OpenCode per Claude: impostazione di opencode.json, modelli ed errori comuniEseguire un agente Hermes senza limiti su ClaudeEseguire OpenClaw senza limiti con ClaudeCosa significa un'API compatibile con AnthropicChiave API di Claude Code — ANTHROPIC_API_KEY: come ottenerla, configurarla e quando usare invece claude setup-tokenCosti dell'API di Claude Code — Prezzi e come ridurliGli errori dell'API Claude spiegati: errore del server 500, sovraccarico 529, limite di frequenza 429, richiesta non valida 400 — e la soluzione per ciascunoCome acquistare crediti per l'API di Claude e perché un credito Claude conviene più di qualsiasi offerta per «acquistare un account Claude»API Claude gratuita: esiste una chiave API di Claude gratuita e che cosa è davvero gratuito nel 2026?API Claude e abbonamento Claude Pro/Max a confronto — Quale scegliereEseguire la CLI di Codex su ClaudeCollegare Claude a n8nInstradare LiteLLM verso ClaudeUsare Claude in Kilo CodeIntegrare Claude in GitHub CopilotCollega Zed a Claude tramite il gatewayCollega Cherry Studio a ClaudeChatAnthropic in LangChain: importazione, base_url, streaming, strumenti ed erroriSDK Python di Anthropic: installazione, configurazione di base_url, streaming e gestione degli erroriEsegui Factory Droid con ClaudeL'API di Claude Code spiegataIntegrare l'API di Claude nella tua applicazioneCome ottenere un utilizzo illimitato di Claude e perché non esiste un «Claude Code craccato»