タイムアウトとサーキットブレーカー
LLMやツールの呼び出しに厳格なタイムアウトを設定し、障害のある依存先への過剰なアクセスをサーキットブレーカーで停止します。
「タイムアウトとサーキットブレーカー」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これは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%を上乗せします。p99が4秒なのにtimeout = 3sと設定すると、誤った失敗が常に発生します。
エージェント全体のタイムアウト
エージェントの実行全体をデッドラインで囲みます。
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'}ツールごとのブレーカー
外部依存関係ごとに独自のブレーカーを持たせます。1つの障害のあるサービスが、正常なサービスへの呼び出しに影響しないようにします。
バルクヘッド
セマフォを使って、1つのツールへの同時呼び出し数を制限します。これにより、遅い依存関係の1つがすべてのワーカーを使い果たすのを防ぎます。
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時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。
「タイムアウトとサーキットブレーカー」で何を学びますか?
LLMやツールの呼び出しに厳格なタイムアウトを設定し、障害のある依存先への過剰なアクセスをサーキットブレーカーで停止します。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Agentsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「タイムアウトとサーキットブレーカー」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Agentsレッスンでコードを書いて実行できますか?
はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- べき等なツールと副作用
- 指数バックオフによる再試行
- タイムアウトとサーキットブレーカー
- ツール出力の検証(Pydantic)