Тайм-ауты и автоматические выключатели
Ограничивайте вызовы LLM и инструментов строгими тайм-аутами, а автоматическими выключателями прекращайте обращения к неисправной зависимости.
«Тайм-ауты и автоматические выключатели» — бесплатный урок AI Agents на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Ограничивайте каждый внешний вызов
Для каждого сетевого вызова необходимо задать время ожидания. Без него зависшее соединение может заблокировать всего агента.
HTTP Timeouts
import requests
response = requests.get(url, timeout=(3, 10)) # 3s connect, 10s readLLM Timeouts
from openai import OpenAI
client = OpenAI(timeout=30.0)
# Or per call:
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=messages,
timeout=30.0
)Выбирайте реалистичные ограничения времени ожидания
Измерьте реальную задержку p99 и добавьте 25%. Если задать ограничение времени ожидания в 3 с при p99, равном 4 с, это приведёт к постоянным ложным сбоям.
Общее ограничение времени для агента
Оберните весь запуск агента в крайний срок:
import asyncio
async def run_agent_with_deadline(query, deadline_s=60):
try:
return await asyncio.wait_for(run_agent(query), timeout=deadline_s)
except asyncio.TimeoutError:
return 'Sorry, this is taking too long. Please try again.'Что такое размыкатель цепи
Шаблон: когда зависимый сервис начинает завершаться с ошибками, «разомкните» цепь — на некоторое время прекратите обращаться к нему. После периода восстановления автоматически возобновите работу.
Состояния: CLOSED (обычная работа) -> OPEN (немедленный отказ) -> HALF_OPEN (проверка) -> CLOSED (восстановление).
Implementing with pybreaker
# pip install pybreaker
import pybreaker
breaker = pybreaker.CircuitBreaker(fail_max=5, reset_timeout=60)
@breaker
def fragile_call():
return requests.get(url, timeout=5).json()После 5 ошибок
Как только подряд возникает fail_max ошибок, размыкатель размыкает цепь. Все последующие вызовы немедленно завершаются с ошибкой в течение reset_timeout секунд — это избавляет Вас от повторной перегрузки неисправного сервиса.
Возвращайте разумные резервные варианты
Когда цепь разомкнута, возвращайте корректный резервный вариант вместо аварийного завершения агента:
try:
result = fragile_call()
except pybreaker.CircuitBreakerError:
result = {'error': 'service-unavailable', 'fallback': 'cached or stale data'}Отдельный размыкатель для каждого инструмента
У каждой внешней зависимости должен быть собственный размыкатель — неисправность одного сервиса не должна влиять на вызовы исправного сервиса.
Изолирующие перегородки
Ограничивайте число одновременных вызовов одного инструмента с помощью семафора — это не позволяет одной медленной зависимости занять всех исполнителей:
from asyncio import Semaphore
search_sem = Semaphore(10)
async def search(query):
async with search_sem:
return await tavily_search(query)Проверки работоспособности
Периодически отправляйте ping каждому инструменту, чтобы обнаруживать проблемы раньше пользователей:
async def health_check():
for tool in [tavily, openai, vector_db]:
try:
await tool.ping()
except Exception as e:
alert(f'{tool.name} unhealthy: {e}')Показывайте пользователям состояние
Когда критически важный инструмент недоступен, сообщите пользователю:
if tavily_breaker.current_state == 'open':
return 'Web search is temporarily unavailable.'Зачем использовать размыкатель цепи
Зачем использовать размыкатель цепи для нестабильного внешнего сервиса?
Итоги
Ограничения времени ожидания для каждого вызова. Размыкатели цепи для отдельных инструментов. Изолирующие перегородки для параллельной работы. Проверки работоспособности. Понятные сообщения о резервном варианте.
Часто задаваемые вопросы
Урок «Тайм-ауты и автоматические выключатели» бесплатный?
Да — полный текст урока «Тайм-ауты и автоматические выключатели» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.
Чему я научусь в уроке «Тайм-ауты и автоматические выключатели»?
Ограничивайте вызовы LLM и инструментов строгими тайм-аутами, а автоматическими выключателями прекращайте обращения к неисправной зависимости. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Agents?
Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Тайм-ауты и автоматические выключатели»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Agents?
Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Идемпотентные инструменты и побочные эффекты
- Повторные попытки с экспоненциальной задержкой
- Тайм-ауты и автоматические выключатели
- Проверка вывода инструментов (Pydantic)