
Claude con Vercel AI SDK: baseURL de createAnthropic, streaming y soluciones
El proveedor Anthropic de AI SDK, @ai-sdk/anthropic, se comunica con la Messages API. Su baseURL tiene como valor predeterminado https://api.anthropic.com/v1, así que, para una pasarela, debes sustituir todo ese prefijo, incluido /v1. OpenCode, Kilo Code y muchos frameworks de agentes utilizan este mismo proveedor internamente, por lo que la misma regla aparece en sus configuraciones.
Instalación
npm i ai @ai-sdk/anthropicCrear el proveedor
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
});@ai-sdk/anthropic: pasa baseURL en el código. La importación directa de anthropic siempre apunta al endpoint propio de Anthropic.generateText y streamText
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);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 llamadas aceptan maxRetries (2 de forma predeterminada) para fallos transitorios como 429 y 5xx.
Razonamiento y almacenamiento de prompts en caché
Las opciones específicas de Anthropic se incluyen en providerOptions.anthropic. Los modelos actuales utilizan razonamiento adaptativo:
const { text } = await generateText({
model: anthropic('claude-sonnet-5'),
providerOptions: { anthropic: { thinking: { type: 'adaptive' } } },
prompt: 'Plan a zero-downtime database migration in five steps.',
});Almacena en caché un prompt del sistema largo y estable con cacheControl; las lecturas de caché aparecerán entonces en usage.inputTokenDetails.cacheReadTokens. Los prompts que no alcanzan la longitud mínima del modelo no se almacenan en caché.
const result = await generateText({
model: anthropic('claude-sonnet-5'),
messages: [
{
role: 'system',
content: longStableInstructions,
providerOptions: { anthropic: { cacheControl: { type: 'ephemeral' } } },
},
{ role: 'user', content: question },
],
});La alternativa compatible con OpenAI
La pasarela también ofrece el formato de Chat Completions de OpenAI, por lo que @ai-sdk/openai-compatible funciona con la misma URL base /v1 . Es la vía para los modelos GPT con la misma clave; para Claude, el proveedor nativo anterior conserva el razonamiento y el control de la caché.
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 IDResolución de problemas
| Lo que ves | Causa | Solución |
|---|---|---|
Un error de análisis de JSON, con una respuesta que empieza por < | baseURL sin /v1: la solicitud llegó al sitio web | baseURL: 'https://aiprimetech.io/v1' |
404 page not found | /v1 dos veces | Exactamente un /v1 |
Invalid API key | process.env valor no definido en ese entorno de ejecución (las funciones serverless y edge tienen su propio entorno), por lo que el SDK recurrió a ANTHROPIC_API_KEY | Configura la variable en el entorno del despliegue |
| Modelo no compatible | ID de modelo antiguo o mal escrito | Utiliza un ID de la tabla siguiente |
Concurrency limit exceeded for user | Promise.all sobre una matriz grande | Limita las llamadas en paralelo, por ejemplo, con p-limit |
No available accounts / 503 | Limitación temporal de capacidad del proveedor | Se reintenta automáticamente; aumenta maxRetries |
| ID del modelo | Úsalo para |
|---|---|
claude-sonnet-5 | Opción predeterminada para programación y trabajo con agentes: rápida, potente y de precio intermedio. |
claude-opus-5-5 | Razonamiento más complejo, refactorizaciones grandes y ejecuciones largas de agentes. |
claude-fable-5-1 | El más capaz y el más caro; resérvalo para las tareas más difíciles. |
claude-haiku-4-5 | Económico y rápido: títulos, resúmenes, clasificación y pasos pequeños. |
Preguntas frecuentes
¿Cuál es el valor predeterminado de baseURL en @ai-sdk/anthropic?
¿Hay una variable de entorno para la URL base del proveedor Anthropic de AI SDK?
¿Por qué AI SDK falla con un error de análisis al llamar a Claude?
¿Debería usar @ai-sdk/anthropic o @ai-sdk/openai-compatible para Claude?
Obtén una clave de API: no necesitas una cuenta de Anthropic ni estar en una lista de espera.
Obtén tu clave de APIAI Prime Tech es una pasarela de API independiente. No está afiliada a Anthropic, no cuenta con su respaldo ni es un distribuidor de Anthropic. Claude y los nombres de los modelos relacionados son marcas comerciales de sus respectivos propietarios.