Лучшие практики

Оптимизация для продакшена

Достигните минимальной задержки, максимальной пропускной способности и минимальных затрат при интеграции с TokSpan. Это паттерны, которые мы используем в собственном продакшен-стеке.

Минимизация задержки

Используйте пул соединений

Повторное использование HTTP-соединений устраняет накладные расходы на рукопожатие TLS при каждом запросе (экономия ~50–100 мс на вызов). OpenAI SDK автоматически использует пул соединений, но для продакшена настройте размер пула:

python
import httpx
from openai import OpenAI

# Production-grade client with connection pooling
client = OpenAI(
    api_key="sk-your-key",
    base_url="https://api.tokspan.com/v1",
    http_client=httpx.Client(
        limits=httpx.Limits(
            max_keepalive_connections=20,
            max_connections=50,
        ),
        timeout=60.0,  # total timeout
    ),
)

Всегда используйте потоковую передачу для интерактивного UX

Устанавливайте stream: true для каждого пользовательского запроса. Потоковая передача доставляет первый токен примерно за 100 мс вместо ожидания 5–30 с полного ответа. См. Chat Completions — Потоковая передача для реализации.

Edge-маршрутизация

Запросы к api.tokspan.com обслуживаются через edge-сеть TokSpan, которая направляет трафик в регион бэкенда, где размещена ваша модель. Настройка с вашей стороны не требуется.

Используйте кэширование промптов

Кэширование промптов может сократить время до первого токена до 80% при повторяющихся промптах. Размещайте статический контент (системные инструкции, контекст) в начале массива сообщений. Подробнее см. руководство по Prompt Caching.

Чек-лист по задержке

ОптимизацияВлияние на задержкуУсилия
Пул соединений−50–100 мс на запросНизкие
Включить потоковую передачуВоспринимаемая: −5–30 сНизкие
Кэширование промптов−80% при попадании в кэшСредние

Минимизация затрат

Умный выбор модели

Не для каждой задачи нужны GPT или Claude Opus. Направляйте простые задачи на более дешёвые модели:

Тип задачиРекомендуемая модельСтоимость относительно GPT
Классификация, извлечение, тегированиеGPT mini, Claude Haiku, Gemini FlashВ 10–50× дешевле
Черновики, суммаризация, переводDeepSeek, Llama, MistralВ 3–10× дешевле
Сложные рассуждения, генерация кодаGPT, Claude OpusБазовый уровень
Пакетная / фоновая обработкаDeepSeek или другие недорогие моделиВ 5–15× дешевле

Установите лимиты расходов

Настройте лимиты расходов для каждого ключа в панели управления. Ключи автоматически отключаются после исчерпания квоты — никаких неожиданных счетов. Установите более низкие лимиты на ключи разработки и более жёсткие ограничения на ключи, передаваемые клиентам. См. Key Scoping.

Чек-лист по затратам

ОптимизацияВлияние на стоимостьУсилия
Направляйте простые задачи на мини-модели−70–95% на этих задачахСредние
Включите кэширование промптов−50–90% при попадании в кэшНизкие
Установите лимиты расходов для каждого ключаЖёсткий лимит максимальных расходовНизкие
Еженедельно проверяйте панель использованияРаннее обнаружение аномалийНизкие

Максимизация пропускной способности

Асинхронность + пакетная обработка

Для массовой обработки используйте асинхронные клиенты и параллельные запросы. Инфраструктура TokSpan масштабируется горизонтально — ваш предел пропускной способности обычно определяется лимитом запросов, а не сервером:

python
import asyncio
from openai import AsyncOpenAI

client = AsyncOpenAI(api_key="sk-your-key", base_url="https://api.tokspan.com/v1")

async def process_batch(prompts: list):
    tasks = [
        client.chat.completions.create(
            model="MODEL_NAME",
            messages=[{"role": "user", "content": p}],
        )
        for p in prompts
    ]
    return await asyncio.gather(*tasks)

Рекомендации по параллельным запросам

В качестве отправной точки:

  • Pay-as-you-go: Начните с умеренной параллельности (5–10 одновременных запросов) и увеличивайте её, ориентируясь на задержку и ответы
  • Enterprise: Индивидуальная настройка — свяжитесь с нами для установки лимита

Если вы начинаете получать ответы 429, снизьте параллельность и выполняйте повторные попытки с экспоненциальной задержкой и джиттером. Лимиты зависят от тарифа и модели — см. Лимиты запросов.

Надёжность в продакшене

Повторные попытки с экспоненциальной задержкой

Сетевые сбои и временные проблемы провайдеров случаются. Всегда оборачивайте API-вызовы в логику повторных попыток:

python
import time
import random
from openai import OpenAI, RateLimitError, APIError

def chat_with_retry(client, model, messages, max_retries=3):
    for attempt in range(max_retries):
        try:
            return client.chat.completions.create(model=model, messages=messages)
        except RateLimitError:
            if attempt == max_retries - 1: raise
            # Exponential backoff with jitter
            wait = (2 ** attempt) + random.uniform(0, 1)
            time.sleep(wait)
        except APIError as e:
            if e.status_code < 500 or attempt == max_retries - 1: raise
            wait = (2 ** attempt) + random.uniform(0, 1)
            time.sleep(wait)

Автоматическое переключение на ту же модель

Если провайдер, обслуживающий вашу модель, испытывает простой, TokSpan автоматически перенаправляет запросы другому провайдеру, обслуживающему ту же модель — без потери запросов и без ручного вмешательства. Переключение остаётся в пределах одной модели, поэтому поведение вывода остаётся согласованным. См. Автоматическое переключение.

Стратегия работы с API-ключами

  • Ключ разработки: Низкий бюджет (например, $10), ограничен дешёвыми моделями, без ограничения по IP
  • Ключ staging: Умеренный бюджет (например, $50), набор продакшен-моделей, ограничение по IP
  • Продакшен-ключ: Повышенный бюджет, все модели, ограничение по IP продакшен-серверами

Ротируйте ключи каждые 90 дней. Используйте отдельные ключи для каждого проекта, если вы управляете несколькими проектами.

Краткий справочник: чек-лист для продакшена

Перед запуском в продакшен пройдитесь по этому чек-листу:

  • <strong>Используйте клиент продакшен-уровня</strong> — объединение соединений и явные тайм-ауты (см. выше)
  • <strong>Включите потоковую передачу</strong> для каждого пользовательского запроса, чтобы обеспечить отзывчивый интерфейс
  • <strong>Реализуйте повторные попытки с экспоненциальной задержкой и джиттером</strong> для ошибок <code>429</code> и <code>5xx</code>
  • <strong>Установите бюджеты на каждый ключ</strong> и IP-белые списки, чтобы утечка не привела к крупному счёту
  • <strong>Размещайте статическое содержимое промпта первым</strong> для максимальной частоты попаданий в кэш и снижения затрат