← Все инструкции

РУКОВОДСТВО · ОБНОВЛЕНО 2026-10-26

Таймаут AI-агента: как распределить общий бюджет времени

Практический порядок ограничения длительного сценария, когда сумма отдельных ожиданий превышает допустимое время пользователя.

Для многошагового агента задайте общий срок завершения и отдельные пределы ожидания каждого этапа. Иначе несколько формально допустимых вызовов модели, инструментов и повторов сложатся в слишком долгий запрос. До следующего шага вычисляйте оставшееся время и оставляйте резерв на формирование результата. Истечение срока не означает автоматический откат уже выполненных действий. Пользователь должен видеть, что завершено, что не успело выполниться и какие результаты требуют проверки.

1. Определите начало отсчёта

Решите, считается ли ожидание в очереди частью пользовательского срока. Для интерактивного запроса обычно важен весь путь от отправки до ответа. Запишите общий deadline рядом с идентификатором задачи и передавайте его между компонентами. Для измерения длительности используйте подходящие монотонные часы, а календарное время храните для журналов и отображения. Перезапуск процесса не должен незаметно давать старой задаче полный новый бюджет без принятого правила возобновления.

2. Разделите этапы и ограничения

Опишите ожидание модели, выполнение каждого инструмента, проверку результата и подготовку ответа. Установите индивидуальные пределы и ограничение числа повторов. Перед очередной попыткой сравните её минимально полезное время с остатком общего бюджета. Если времени недостаточно, закончите сценарий понятным частичным результатом. Не запускайте длинную операцию только потому, что её собственный таймаут ещё не истёк: она может пережить общий срок, который пользователь уже считает нарушенным.

3. Проверьте механизм отмены

Python asyncio предоставляет timeout и wait_for для ограничения ожидания асинхронных операций; поведение отмены и исключений описано отдельно. Это не гарантия остановки внешней системы или блокирующей функции. Убедитесь, что используемый клиент поддерживает отмену и корректно освобождает соединения. Для фонового задания с отдельным ID сохраняйте возможность проверить статус после окончания HTTP-запроса. Не подавляйте сигнал отмены без необходимости: иначе верхний уровень продолжит считать задачу остановленной, пока работа всё ещё идёт.

4. Верните проверяемый итог

При приближении deadline прекратите новые шаги и сформируйте статус по фактически подтверждённым операциям. Если инструмент мог исполниться до потери соединения, обозначьте неизвестный исход и предложите проверку состояния вместо слепого повтора. Протестируйте медленную очередь, медленную модель, зависший инструмент и исчерпание бюджета после успешного изменения. Сравнивайте временные отметки по запросу, а не только общий HTTP-код. Увеличение всех таймаутов может скрыть проблему и занять больше ресурсов, не улучшив полезность результата.

Частые вопросы

Можно ли поставить один большой timeout на всё?

Это ограничит ожидание верхнего уровня, но не объяснит задержку отдельных шагов и не гарантирует отмену внешней работы. Нужны также правила этапов.

Нужно ли автоматически повторять после таймаута?

Сначала проверьте, мог ли внешний эффект уже произойти. Для чтения и изменения данных правила повторов различаются.

Почему фактическое ожидание бывает дольше лимита?

Механизм отмены может ждать завершения очистки или зависеть от клиента. Проверяйте семантику используемого инструмента, а не только числовую настройку.

Как проверить бюджет без платного вызова модели?

Используйте заглушки с заданными задержками и журналом действий. Это проверяет управление временем; реальную интеграцию подтверждают отдельно.

Источники

Калькулятор стоимости →