IDE и клиенты

Python и Node.js SDK

Официальные SDK anthropic и openai через tkbk.io: base_url/baseURL + api_key, стриминг, ретраи, примеры на Python и Node.js.

Обновлено 24 июл. 2026 г.8 мин
#sdk#python#nodejs#anthropic#openai#streaming

Официальные SDK Anthropic и OpenAI работают с tkbk.io без патчей — достаточно переопределить базовый URL и подставить ключ cr_xxx. Ниже примеры для Python и Node.js с обоими семействами моделей.

Что получится
Прямые вызовы Claude и GPT-5 из кода через московский шлюз, со стримингом и встроенными ретраями SDK.

#Установка

Python и Node.js
# Python
pip install anthropic openai

# Node.js
npm install @anthropic-ai/sdk openai

#Python — Anthropic SDK

Claude через base_url
from anthropic import Anthropic

client = Anthropic(
    base_url="https://api.tkbk.io/claude",
    api_key="cr_xxx",
    max_retries=3,
)

msg = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Привет из tkbk.io"}],
)
print(msg.content[0].text)

#Python — OpenAI SDK

GPT-5 со стримингом
from openai import OpenAI

client = OpenAI(
    base_url="https://api.tkbk.io/openai/v1",
    api_key="cr_xxx",
    max_retries=3,
)

stream = client.chat.completions.create(
    model="gpt-5",
    messages=[{"role": "user", "content": "Напиши хайку про API"}],
    stream=True,
)
for chunk in stream:
    delta = chunk.choices[0].delta.content
    if delta:
        print(delta, end="", flush=True)

#Node.js — Anthropic SDK

Claude через baseURL
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  baseURL: "https://api.tkbk.io/claude",
  apiKey: "cr_xxx",
  maxRetries: 3,
});

const msg = await client.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Привет из tkbk.io" }],
});
console.log(msg.content[0].type === "text" && msg.content[0].text);

#Node.js — OpenAI SDK

GPT-5 со стримингом
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.tkbk.io/openai/v1",
  apiKey: "cr_xxx",
  maxRetries: 3,
});

const stream = await client.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Напиши хайку про API" }],
  stream: true,
});
for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

#Параметры клиентов

SDKПараметр базыЗначение
anthropic (py)base_urlhttps://api.tkbk.io/claude
openai (py)base_urlhttps://api.tkbk.io/openai/v1
@anthropic-ai/sdkbaseURLhttps://api.tkbk.io/claude
openai (node)baseURLhttps://api.tkbk.io/openai/v1
Ключ из окружения
Не хардкодьте cr_xxx в коде. SDK сами читают ANTHROPIC_API_KEY / OPENAI_API_KEY из окружения — задайте их через переменные, а в конструкторе оставьте только base_url/baseURL.
Грабли
Для Anthropic base — /claude (SDK добавит /v1/messages), для OpenAI — /openai/v1. Встроенные ретраи (max_retries/maxRetries) уже обрабатывают 429 и 5xx с экспоненциальной паузой — отдельный retry-цикл не нужен.

#Проверка

Запустите любой из примеров: ответ модели в консоли подтверждает связь. При ошибке 401 проверьте ключ, при 404 — суффикс base URL (/claude без /v1, /openai/v1 с ним).

Не помогло?

Напишите в Telegram — поможем с настройкой и подберём тариф. Или вернитесь ко всем разделам документации.