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_url | https://api.tkbk.io/claude |
| openai (py) | base_url | https://api.tkbk.io/openai/v1 |
| @anthropic-ai/sdk | baseURL | https://api.tkbk.io/claude |
| openai (node) | baseURL | https://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 с ним).