Лучшие практики
Оптимизация для продакшена
Достигните минимальной задержки, максимальной пропускной способности и минимальных затрат при интеграции с TokSpan. Это паттерны, которые мы используем в собственном продакшен-стеке.
Минимизация задержки
Используйте пул соединений
Повторное использование HTTP-соединений устраняет накладные расходы на рукопожатие TLS при каждом запросе (экономия ~50–100 мс на вызов). OpenAI SDK автоматически использует пул соединений, но для продакшена настройте размер пула:
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 масштабируется горизонтально — ваш предел пропускной способности обычно определяется лимитом запросов, а не сервером:
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-вызовы в логику повторных попыток:
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> для максимальной частоты попаданий в кэш и снижения затрат