Source: https://aiprimetech.io/it/learn/use-claude-api-with-vercel-ai-sdk/ [Home](/it/) / [Impara](/it/learn/) / Claude con Vercel AI SDK: createAnthropic baseURL, streaming e correzioni # 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 terminaleCopia ``` npm i ai @ai-sdk/anthropic ``` ## Crea il provider lib/anthropic.tsCopia ``` 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.tsCopia ``` 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.tsCopia ``` 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.tsCopia ``` 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.tsCopia ``` 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.tsCopia ``` 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 web | baseURL: 'https://aiprimetech.io/v1' | 404 page not found | /v1 due volte | Esattamente un /v1 | Invalid API key | process.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_KEY | Imposta la variabile nell'ambiente di distribuzione | Modello non supportato | ID del modello obsoleto o scritto in modo errato | Usa un ID della tabella seguente | Concurrency limit exceeded for user | Promise.all su un array di grandi dimensioni | Limita le chiamate parallele, ad esempio con p-limit | No available accounts / 503 | Capacità temporaneamente limitata del servizio a monte | Nuovo tentativo automatico; aumenta maxRetries | ID del modello | Usalo per | claude-sonnet-5 | Scelta predefinita per programmazione e attività degli agenti: veloce, potente, di fascia media. | claude-opus-5-5 | Ragionamenti più complessi, refactoring estesi, esecuzioni prolungate degli agenti. | claude-fable-5-1 | Il più capace e il più costoso; riservalo alle attività più difficili. | claude-haiku-4-5 | Economico 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](/register) 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 Claude](/it/learn/how-to-get-a-claude-api-key/)[I prezzi dell'API Claude, spiegati](/it/learn/claude-api-pricing-explained/)[Il modo più economico per usare l'API Claude](/it/learn/cheapest-way-to-use-claude-api/)[Cursor illimitato con l'API Claude](/learn/use-claude-api-with-cursor/)[Accesso illimitato a Claude Code](/it/learn/use-claude-api-with-claude-code/)[Gateway API Claude e accesso diretto ad Anthropic a confronto](/it/learn/claude-api-vs-anthropic-direct/)[Usare Claude tramite un'API compatibile con OpenAI](/it/learn/openai-compatible-claude-api/)[I 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)](/it/learn/claude-api-models-compared/)[Pagare l'API Claude con criptovalute](/it/learn/claude-api-with-crypto-payment/)[Accesso all'API Claude senza lista d'attesa](/it/learn/claude-api-without-waitlist/)[Come ridurre l'utilizzo dei token di Claude](/it/learn/how-to-reduce-claude-token-usage/)[Cline illimitato con l'API Claude](/it/learn/use-claude-api-with-cline/)[Roo Code illimitato con l'API Claude](/it/learn/use-claude-api-with-roo-code/)[Claude illimitato negli IDE JetBrains](/it/learn/use-claude-api-with-jetbrains/)[Aider senza limiti con l'API di Claude](/it/learn/use-claude-api-with-aider/)[Claude illimitato in VS Code](/it/learn/use-claude-api-with-vscode/)[Configurazione di OpenCode per Claude: impostazione di opencode.json, modelli ed errori comuni](/it/learn/use-claude-api-with-opencode/)[Eseguire un agente Hermes senza limiti su Claude](/it/learn/run-hermes-agent-with-claude-api/)[Eseguire OpenClaw senza limiti con Claude](/it/learn/run-openclaw-with-claude-api/)[Cosa significa un'API compatibile con Anthropic](/it/learn/anthropic-compatible-api/)[Chiave API di Claude Code — ANTHROPIC_API_KEY: come ottenerla, configurarla e quando usare invece claude setup-token](/it/learn/claude-code-api-key-setup/)[Costi dell'API di Claude Code — Prezzi e come ridurli](/it/learn/claude-code-api-costs/)[Gli errori dell'API Claude spiegati: errore del server 500, sovraccarico 529, limite di frequenza 429, richiesta non valida 400 — e la soluzione per ciascuno](/it/learn/claude-api-errors-troubleshooting/)[Come acquistare crediti per l'API di Claude e perché un credito Claude conviene più di qualsiasi offerta per «acquistare un account Claude»](/it/learn/buy-claude-api-credits/)[API Claude gratuita: esiste una chiave API di Claude gratuita e che cosa è davvero gratuito nel 2026?](/it/learn/claude-api-free-trial/)[API Claude e abbonamento Claude Pro/Max a confronto — Quale scegliere](/it/learn/claude-api-vs-subscription/)[Eseguire la CLI di Codex su Claude](/it/learn/use-claude-api-with-codex/)[Collegare Claude a n8n](/it/learn/use-claude-api-with-n8n/)[Instradare LiteLLM verso Claude](/it/learn/use-claude-api-with-litellm/)[Usare Claude in Kilo Code](/it/learn/use-claude-api-with-kilo-code/)[Integrare Claude in GitHub Copilot](/it/learn/use-claude-api-with-github-copilot/)[Collega Zed a Claude tramite il gateway](/it/learn/use-claude-api-with-zed/)[Collega Cherry Studio a Claude](/it/learn/use-claude-api-with-cherry-studio/)[ChatAnthropic in LangChain: importazione, base_url, streaming, strumenti ed errori](/it/learn/use-claude-api-with-langchain/)[SDK Python di Anthropic: installazione, configurazione di base_url, streaming e gestione degli errori](/it/learn/anthropic-python-sdk/)[Esegui Factory Droid con Claude](/it/learn/use-claude-api-with-factory-droid/)[L'API di Claude Code spiegata](/it/learn/claude-code-api/)[Integrare l'API di Claude nella tua applicazione](/it/learn/claude-api-integration/)[Come ottenere un utilizzo illimitato di Claude e perché non esiste un «Claude Code craccato»](/it/learn/get-unlimited-claude-usage/)