
Claude с Vercel AI SDK: baseURL в createAnthropic, потоковая передача и устранение проблем
Провайдер Anthropic в AI SDK, @ai-sdk/anthropic, обращается к Messages API. Его baseURL по умолчанию имеет значение https://api.anthropic.com/v1, поэтому для шлюза нужно заменить весь этот префикс, включая /v1. OpenCode, Kilo Code и многие агентные фреймворки используют этот же провайдер внутри, поэтому то же правило встречается и в их конфигурациях.
Установка
npm i ai @ai-sdk/anthropicСоздайте провайдер
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: передайте baseURL в коде. Обычный импорт anthropic всегда обращается к собственному эндпоинту Anthropic.generateText и 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);Оба вызова принимают maxRetries (по умолчанию 2) для временных сбоев, таких как 429 и 5xx.
Рассуждения и кеширование промптов
Параметры, специфичные для Anthropic, задаются в providerOptions.anthropic. Актуальные модели используют адаптивные рассуждения:
const { text } = await generateText({
model: anthropic('claude-sonnet-5'),
providerOptions: { anthropic: { thinking: { type: 'adaptive' } } },
prompt: 'Plan a zero-downtime database migration in five steps.',
});Кешируйте длинный, стабильный системный промпт с помощью cacheControl; чтения из кеша затем отображаются в usage.inputTokenDetails.cacheReadTokens. Промпты короче минимальной длины, установленной для модели, не кешируются.
const result = await generateText({
model: anthropic('claude-sonnet-5'),
messages: [
{
role: 'system',
content: longStableInstructions,
providerOptions: { anthropic: { cacheControl: { type: 'ephemeral' } } },
},
{ role: 'user', content: question },
],
});Альтернатива, совместимая с OpenAI
Шлюз также поддерживает формат OpenAI Chat Completions, поэтому @ai-sdk/openai-compatible работает с тем же /v1 базовым URL. Этот вариант используется для моделей GPT с тем же ключом; для Claude нативный провайдер, описанный выше, сохраняет поддержку рассуждений и управления кешированием.
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Устранение неполадок
| Что вы видите | Причина | Решение |
|---|---|---|
Ошибка разбора JSON, ответ начинается с < | baseURL без /v1: запрос попал на веб-сайт | baseURL: 'https://aiprimetech.io/v1' |
404 page not found | /v1 дважды | Ровно один /v1 |
Invalid API key | process.env имеет значение undefined в этой среде выполнения (у бессерверных и периферийных функций собственное окружение), поэтому SDK использовал значение по умолчанию ANTHROPIC_API_KEY | Задайте переменную в окружении развёртывания |
| Модель не поддерживается | Устаревший идентификатор модели или опечатка в нём | Используйте ID из таблицы ниже |
Concurrency limit exceeded for user | Promise.all для большого массива | Ограничьте параллельные вызовы, например с помощью p-limit |
No available accounts / 503 | Временная нехватка ресурсов у вышестоящего сервиса | Повторная попытка выполняется автоматически; увеличьте maxRetries |
| Идентификатор модели | Для каких задач |
|---|---|
claude-sonnet-5 | Основной выбор для программирования и работы с агентами: быстрая, мощная, со средней стоимостью. |
claude-opus-5-5 | Более сложные рассуждения, масштабный рефакторинг, длительная работа агентов. |
claude-fable-5-1 | Самая мощная и дорогая; используйте её для наиболее сложных задач. |
claude-haiku-4-5 | Недорогая и быстрая: заголовки, краткие изложения, классификация, небольшие шаги. |
Часто задаваемые вопросы
Каково значение baseURL по умолчанию в @ai-sdk/anthropic?
Есть ли переменная окружения для базового URL Anthropic в AI SDK?
Почему при вызове Claude через AI SDK возникает ошибка разбора?
Что использовать для Claude: @ai-sdk/anthropic или @ai-sdk/openai-compatible?
Получите ключ API — учётная запись Anthropic и запись в лист ожидания не нужны.
Получить ключ APIAI Prime Tech — независимый API-шлюз. Он не связан с Anthropic, не одобрен этой компанией и не является её реселлером. Claude и названия связанных моделей — товарные знаки их соответствующих владельцев.