### Ручное кэширование через cache_control (Python SDK) Source: https://nordrouter.com/docs/guide/caching Пример использования Anthropic SDK с маркером cache_control для ручного кэширования справочника в system. Первый запрос создаёт кэш (cache_creation_input_tokens), последующие читают его (cache_read). ```python from anthropic import Anthropic client = Anthropic(base_url="https://nordrouter.com", api_key="sk-nr-ВАШ-КЛЮЧ") resp = client.messages.create( model="anthropic/claude-fable-5", max_tokens=512, system=[{ "type": "text", "text": "Ты ассистент по нашей документации. Вот справочник: <...>", "cache_control": {"type": "ephemeral"}, # кэшируем справочник }], messages=[{"role": "user", "content": "Первый вопрос по справочнику?"}], ) print(resp.usage) # cache_creation_input_tokens на 1-м запросе, cache_read на след. ``` -------------------------------- ### Конфигурация Codex CLI для NordRouter в config.toml Source: https://nordrouter.com/docs/guide/clients/codex-cli Пример конфигурации для %USERPROFILE%\.codex\config.toml (Windows) или ~/.codex/config.toml (macOS/Linux). Указывает модель anthropic/claude-sonnet-4.6, провайдера nordrouter, base_url https://nordrouter.com/v1, переменную окружения NORDROUTER_API_KEY и wire_api = "responses". После настройки необходимо задать переменную NORDROUTER_API_KEY и запустить Codex в тестовой папке. ```toml model = "anthropic/claude-sonnet-4.6" model_provider = "nordrouter" [model_providers.nordrouter] name = "NordRouter" base_url = "https://nordrouter.com/v1" env_key = "NORDROUTER_API_KEY" wire_api = "responses" ``` -------------------------------- ### Первый запрос через Node.js (OpenAI SDK) Source: https://nordrouter.com/docs/guide/quickstart Использует OpenAI SDK для отправки запроса к NordRouter. Требуется установленный пакет openai и замена apiKey на реальный ключ. Выводит ответ модели. ```typescript import OpenAI from "openai"; const client = new OpenAI({ baseURL: "https://nordrouter.com/v1", apiKey: "sk-nr-ВАШ-КЛЮЧ", }); const resp = await client.chat.completions.create({ model: "anthropic/claude-sonnet-4.6", messages: [{ role: "user", content: "Привет!" }], }); console.log(resp.choices[0].message.content); ``` -------------------------------- ### Установка пакета Anthropic SDK Source: https://nordrouter.com/docs/guide/clients/anthropic-js Команда для установки официального пакета Anthropic SDK через npm. ```bash npm install @anthropic-ai/sdk ``` -------------------------------- ### Первый запрос через Python (OpenAI SDK) Source: https://nordrouter.com/docs/guide/quickstart Использует OpenAI SDK для отправки запроса к NordRouter. Требуется установленный пакет openai и замена api_key на реальный ключ. Выводит ответ модели. ```python from openai import OpenAI client = OpenAI( base_url="https://nordrouter.com/v1", api_key="sk-nr-ВАШ-КЛЮЧ", ) resp = client.chat.completions.create( model="anthropic/claude-sonnet-4.6", messages=[{"role": "user", "content": "Привет!"}], ) print(resp.choices[0].message.content) ``` -------------------------------- ### Инициализация клиента и отправка сообщения Source: https://nordrouter.com/docs/guide/clients/anthropic-js Пример настройки клиента Anthropic с использованием API-ключа NordRouter и выполнения запроса к модели. Обратите внимание, что baseURL не должен содержать путь /v1, так как SDK добавляет его автоматически. ```typescript import Anthropic from "@anthropic-ai/sdk"; const client = new Anthropic({ apiKey: process.env.NORDROUTER_API_KEY, baseURL: "https://nordrouter.com", }); const response = await client.messages.create({ model: "anthropic/claude-sonnet-4.6", max_tokens: 256, messages: [{ role: "user", content: "Ответь: работает" }], }); const first = response.content[0]; console.log(first.type === "text" ? first.text : ""); ``` -------------------------------- ### Отправка запроса к NordRouter API с Bun Source: https://nordrouter.com/docs/guide/clients/bun Используйте стандартный fetch в Bun для отправки POST-запроса к NordRouter API. Требуется переменная окружения NORDROUTER_API_KEY. Запуск: bun run index.ts. ```ts const response = await fetch("https://nordrouter.com/v1/chat/completions", { method: "POST", headers: { Authorization: `Bearer ${Bun.env.NORDROUTER_API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ model: "anthropic/claude-sonnet-4.6", messages: [{ role: "user", content: "Ответь: работает" }], }), }); if (!response.ok) throw new Error(await response.text()); const data = await response.json(); console.log(data.choices[0].message.content); ``` -------------------------------- ### Настройка settings.json для NordRouter Source: https://nordrouter.com/docs/guide/claude-code-vscode Конфигурация для файла ~/.claude/settings.json (Windows: %USERPROFILE%\.claude\settings.json). Замените sk-nr-ВАШ-КЛЮЧ на свой ключ. Base URL указывается без /v1, иначе запрос уйдёт на /v1/v1/messages. ```json { "$schema": "https://json.schemastore.org/claude-code-settings.json", "env": { "ANTHROPIC_API_KEY": "sk-nr-ВАШ-КЛЮЧ", "ANTHROPIC_BASE_URL": "https://nordrouter.com", "ANTHROPIC_MODEL": "anthropic/claude-sonnet-4.6", "ANTHROPIC_DEFAULT_OPUS_MODEL": "anthropic/claude-opus-5", "ANTHROPIC_DEFAULT_SONNET_MODEL": "anthropic/claude-sonnet-4.6", "ANTHROPIC_DEFAULT_HAIKU_MODEL": "anthropic/claude-haiku-4.5", "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1" } } ``` -------------------------------- ### Проверка кэша по usage.prompt_tokens_details.cached_tokens Source: https://nordrouter.com/docs/guide/caching Пример ответа API, показывающий, что часть входных токенов была прочитана из кэша. Если cached_tokens > 0, эта часть входа списалась по цене чтения (×0.1), а не полной. ```json "usage": { "prompt_tokens": 21364, "prompt_tokens_details": { "cached_tokens": 21361 // ← прочитано из кэша по ×0.1 }, "completion_tokens": 40 } ``` -------------------------------- ### Ручное кэширование через cache_control (curl) Source: https://nordrouter.com/docs/guide/caching Пример запроса к эндпоинту /v1/messages с маркером cache_control на конце блока system, чтобы вручную управлять кэшированием. Первый запрос записывает справочник в кэш, последующие с тем же system читают его по ×0.1. ```bash curl https://nordrouter.com/v1/messages \ -H "x-api-key: sk-nr-ВАШ-КЛЮЧ" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{ "model": "anthropic/claude-fable-5", "max_tokens": 512, "system": [ { "type": "text", "text": "Ты ассистент по нашей документации. Вот справочник: <...много текста...>", "cache_control": { "type": "ephemeral" } } ], "messages": [{ "role": "user", "content": "Первый вопрос по справочнику?" }] }' ``` -------------------------------- ### Установка Anthropic SDK Source: https://nordrouter.com/docs/guide/clients/anthropic-python Команда для установки официального пакета Anthropic через pip. ```bash pip install anthropic ``` -------------------------------- ### Выполнение базового запроса к API через curl Source: https://nordrouter.com/docs/guide/clients/curl Используйте этот запрос для проверки ключа, баланса и модели. На Windows в старом PowerShell используйте команду curl.exe вместо curl. ```bash curl https://nordrouter.com/v1/chat/completions \ -H "Authorization: Bearer sk-nr-ВАШ-КЛЮЧ" \ -H "Content-Type: application/json" \ -d '{ "model": "anthropic/claude-sonnet-4.6", "messages": [{"role": "user", "content": "Ответь: работает"}] }' ``` -------------------------------- ### Конфигурация settings.json для Claude Code Source: https://nordrouter.com/docs/guide/claude-code Рекомендуемый конфиг, который полностью заменяет содержимое файла ~/.claude/settings.json (Windows: C:\Users\ВАШ_ЮЗЕР\.claude\settings.json). Нужно вписать ключ sk-nr-… в ANTHROPIC_API_KEY. Уберите строку "apiKeyHelper": "echo ''" и не вставляйте /v1 в ANTHROPIC_BASE_URL. ```json { "env": { "ANTHROPIC_API_KEY": "sk-nr-ВАШ-КЛЮЧ", "ANTHROPIC_BASE_URL": "https://nordrouter.com", "ANTHROPIC_MODEL": "anthropic/claude-opus-5", "ANTHROPIC_DEFAULT_OPUS_MODEL": "anthropic/claude-opus-5", "ANTHROPIC_DEFAULT_SONNET_MODEL": "anthropic/claude-sonnet-4.6", "ANTHROPIC_DEFAULT_HAIKU_MODEL": "anthropic/claude-haiku-4.5", "ANTHROPIC_SMALL_FAST_MODEL": "anthropic/claude-haiku-4.5", "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1" }, "permissions": { "allow": [], "deny": [] } } ``` -------------------------------- ### Переменные окружения для Claude Code в bash (macOS/Linux) Source: https://nordrouter.com/docs/guide/claude-code Альтернатива settings.json: настройка через переменные окружения в macOS/Linux. Переменные действуют только в текущем окне терминала, поэтому claude нужно запускать в нём же. ```bash export ANTHROPIC_BASE_URL=https://nordrouter.com export ANTHROPIC_API_KEY=sk-nr-ВАШ-КЛЮЧ export ANTHROPIC_MODEL=anthropic/claude-opus-5 claude ``` -------------------------------- ### Переменные окружения для Claude Code Windows (PowerShell) Source: https://nordrouter.com/docs/guide/claude-code Альтернатива settings.json: настройка через переменные окружения в Windows PowerShell. Переменные действуют только в текущем окне терминала, и claude нужно запускать в нём же. Чтобы снять старый токен, используйте $env:ANTHROPIC_AUTH_TOKEN = $null. ```powershell $env:ANTHROPIC_BASE_URL = "https://nordrouter.com" $env:ANTHROPIC_API_KEY = "sk-nr-ВАШ-КЛЮЧ" $env:ANTHROPIC_MODEL = "anthropic/claude-opus-5" claude ``` -------------------------------- ### Configure NordRouter Base URL and API Key in VS Code Source: https://nordrouter.com/docs/guide/clients/aigo123 Use this configuration in VS Code extensions like Cline, Roo Code, Kilo Code, or Zoo Code to connect to NordRouter. Replace sk-nr-ВАШ-КЛЮЧ with your actual API key. This is the safe alternative to using AiGo123, which is not confirmed to support a custom Base URL. ```text Base URL: https://nordrouter.com/v1 API Key: sk-nr-ВАШ-КЛЮЧ Model ID: anthropic/claude-sonnet-4.6 ``` -------------------------------- ### Отправка запроса к NordRouter API с пакетом http Source: https://nordrouter.com/docs/guide/clients/dart Пример POST-запроса к https://nordrouter.com/v1/chat/completions с использованием пакета http. Требуется переменная apiKey. При статусе, отличном от 200, выбрасывается исключение. Не зашивайте общий API-ключ в публичное Flutter-приложение. ```dart import 'dart:convert'; import 'package:http/http.dart' as http; final response = await http.post( Uri.parse('https://nordrouter.com/v1/chat/completions'), headers: { 'Authorization': 'Bearer $apiKey', 'Content-Type': 'application/json', }, body: jsonEncode({ 'model': 'anthropic/claude-sonnet-4.6', 'messages': [{'role': 'user', 'content': 'Привет!'}], }), ); if (response.statusCode != 200) throw Exception(response.body); print(jsonDecode(response.body)['choices'][0]['message']['content']); ``` -------------------------------- ### Проверка API через curl Source: https://nordrouter.com/docs/guide/clients Выполните этот запрос в терминале, чтобы убедиться, что ваш API-ключ и соединение с NordRouter работают корректно. ```bash curl https://nordrouter.com/v1/chat/completions \ -H "Authorization: Bearer sk-nr-ВАШ-КЛЮЧ" \ -H "Content-Type: application/json" \ -d '{ "model": "anthropic/claude-sonnet-4.6", "messages": [{"role": "user", "content": "Ответь одним словом: работает"}] }' ``` -------------------------------- ### Основные значения конфигурации Crush Source: https://nordrouter.com/docs/guide/clients/crush Параметры для настройки провайдера openai-compat в Crush для работы с NordRouter. ```text Provider type: openai-compat Base URL: https://nordrouter.com/v1 API key environment variable: NORDROUTER_API_KEY Model: anthropic/claude-sonnet-4.6 ``` -------------------------------- ### Первый запрос через curl Source: https://nordrouter.com/docs/guide/quickstart Отправляет запрос к NordRouter API с использованием curl. Требуется заменить sk-nr-ВАШ-КЛЮЧ на реальный ключ. Использует модель anthropic/claude-sonnet-4.6. ```bash curl https://nordrouter.com/v1/chat/completions \ -H "Authorization: Bearer sk-nr-ВАШ-КЛЮЧ" \ -H "Content-Type: application/json" \ -d '{ "model": "anthropic/claude-sonnet-4.6", "messages": [{ "role": "user", "content": "Привет!" }] }' ``` -------------------------------- ### Смена модели через ANTHROPIC_MODEL Source: https://nordrouter.com/docs/guide/claude-code-vscode Пример изменения переменной ANTHROPIC_MODEL в settings.json для выбора другой модели. Используйте полный ID модели с префиксом anthropic/. ```json "ANTHROPIC_MODEL": "anthropic/claude-opus-5" ``` -------------------------------- ### Настройка параметров API в Cline Source: https://nordrouter.com/docs/guide/antigravity Данные для заполнения полей в настройках API Provider расширения Cline. ```text Base URL: https://nordrouter.com/v1 API Key: sk-nr-ВАШ-КЛЮЧ Model ID: anthropic/claude-sonnet-4.6 ``` -------------------------------- ### Configure Factory Droid custom model for NordRouter Source: https://nordrouter.com/docs/guide/clients/factory-droid Add a custom model to Factory Droid's customModels configuration to use NordRouter. Set the NORDROUTER_API_KEY environment variable before running; do not store the real key in the repository. ```json { "customModels": [ { "id": "nordrouter-sonnet", "displayName": "NordRouter Sonnet", "model": "anthropic/claude-sonnet-4.6", "baseUrl": "https://nordrouter.com/v1", "apiKeyEnvVar": "NORDROUTER_API_KEY", "provider": "generic-chat-completion-api" } ] } ``` -------------------------------- ### Настройка синхронного клиента Anthropic Source: https://nordrouter.com/docs/guide/clients/anthropic-python Пример инициализации клиента Anthropic с указанием базового URL NordRouter и выполнения запроса к модели. ```python import os from anthropic import Anthropic client = Anthropic( api_key=os.environ["NORDROUTER_API_KEY"], base_url="https://nordrouter.com", ) response = client.messages.create( model="anthropic/claude-sonnet-4.6", max_tokens=256, messages=[{"role": "user", "content": "Ответь: работает"}], ) print(response.content[0].text) ``` -------------------------------- ### Пример ID модели для проверки Source: https://nordrouter.com/docs/guide/clients Используйте этот идентификатор модели для первичной проверки работоспособности подключения. ```text anthropic/claude-sonnet-4.6 ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.