← Главная

Claude API на TypeScript и Node.js

Рабочий серверный пример с официальным пакетом @anthropic-ai/sdk для Node.js и TypeScript.

Проверено: 1 августа 2026 года.

Короткий ответ

Установите @anthropic-ai/sdk, задайте ключ в переменной окружения и создайте клиент с baseURL: "https://api.llm-gate.tech". Не включайте dangerouslyAllowBrowser: API-ключ должен оставаться на сервере.

Установка

bash
npm install @anthropic-ai/sdk
export ANTHROPIC_API_KEY="sk-cs2-YOUR_API_KEY"

Текущий официальный SDK поддерживает Node.js 20 LTS и более новые поддерживаемые версии. Зафиксируйте dependency lockfile и обновляйте пакет после проверки тестов.

Первый запрос

TypeScript
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  apiKey: process.env.ANTHROPIC_API_KEY,
  baseURL: "https://api.llm-gate.tech",
});

const message = await client.messages.create({
  model: "claude-sonnet-4-6",
  max_tokens: 128,
  messages: [
    { role: "user", content: "Объясни event loop в двух предложениях." },
  ],
});

for (const block of message.content) {
  if (block.type === "text") console.log(block.text);
}

console.log(message.usage);

Только server-side

Не импортируйте клиент с реальным ключом в React Client Component. Создавайте запрос из server route, server action или отдельного backend-сервиса и возвращайте браузеру только необходимый результат.

Потоковый ответ

TypeScript streaming
const stream = client.messages
  .stream({
    model: "claude-sonnet-4-6",
    max_tokens: 256,
    messages: [{ role: "user", content: "Напиши короткий пример." }],
  })
  .on("text", (text) => process.stdout.write(text));

const finalMessage = await stream.finalMessage();
console.log(finalMessage.usage);

Для HTTP-ответа вашего приложения учитывайте отключение клиента: отменяйте upstream stream, когда пользователь закрыл соединение, и не продолжайте оплачиваемую генерацию без получателя.

Обработка ошибок

TypeScript
try {
  await client.messages.create({
    model: "claude-sonnet-4-6",
    max_tokens: 64,
    messages: [{ role: "user", content: "Привет!" }],
  });
} catch (error) {
  if (error instanceof Anthropic.APIError) {
    console.error(error.status, error.name);
    // Не логируйте API-ключ и полный пользовательский prompt.
  }
  throw error;
}
  • Ограничивайте одновременные запросы очередью или semaphore.
  • Передавайте timeout, соответствующий вашему HTTP-серверу и прокси.
  • Не повторяйте 400/401/403/404 без исправления причины.
  • Для 429 и временных 5xx используйте ограниченный exponential backoff.

TypeScript или OpenAI SDK

Для нового Claude-приложения нативный Anthropic SDK точнее отражает Messages API, content blocks и streaming events. Если существующий проект уже построен на пакете OpenAI, в справочнике Messages API указан OpenAI-compatible endpoint.

Официальная документация SDK

Установка, поддерживаемые runtime, типы и streaming сверены с официальным руководством TypeScript SDK. Наш Base URL и модель берутся из актуальной конфигурации Claude API Tech.