Рекомендации для работы в продакшене
Что нужно правильно настроить, прежде чем интеграция начнёт обрабатывать реальный трафик.
Надёжность
- Повторяйте запросы при подходящих кодах ответа.
429,500,502,503,529с экспоненциальным увеличением задержки и случайным разбросом. Никогда не повторяйте вслепую400,401,402или403. - Задавайте тайм-ауты. Длительная генерация вполне может занимать несколько минут; зависшее соединение не должно блокировать рабочий процесс. Для вызовов без потоковой передачи разумный верхний предел — 120 секунд.
- Ограничивайте число одновременных запросов с помощью семафора, вместо того чтобы отправлять всё сразу и повторять отклонённые запросы.
- Предусмотрите резервную модель. Если основная модель перегружена, переход на менее мощную модель лучше, чем возврат ошибки.
Стоимость
- Задайте
max_tokensпри каждом вызове. Это ограничение расходов, а не рекомендация. - Выбирайте модель в зависимости от задачи — см. Контроль затрат.
- Включите кэширование промптов для стабильных префиксов.
- Записывайте в журнал
usageдля каждого запроса с меткой задачи, чтобы впоследствии можно было определить, на что ушли средства.
Безопасность
- Храните ключи в переменных окружения или менеджере секретов — никогда в репозитории или клиентской сборке.
- Используйте отдельный ключ для каждого сервиса, чтобы можно было точечно отзывать доступ.
- Никогда не составляйте промпты, объединяя недоверенный пользовательский ввод с инструкциями через конкатенацию строк; храните пользовательский контент в сообщении
userа инструкции — вsystem. - Считайте вывод модели недоверенным. Не
evalего и не выполняйте сгенерированный SQL с ролью, имеющей права записи.
Наблюдаемость
- Для каждого вызова записывайте в журнал модель, задержку,
usage,stop_reasonи собственный тип задачи. - Настройте оповещения о доле
stop_reason: max_tokens— её рост означает, что ответы обрезаются. - Отслеживайте расходы по типам задач, а не только общую сумму. Общие показатели скрывают, для какой нагрузки расходы выросли.
Самое полезное оповещение — об обрезании ответов, а не об ошибках. Обрезанный ответ возвращает HTTP 200 и выглядит нормальным для системы мониторинга, хотя для пользователя он некорректен.