0Pricing
AI Agents · レッスン

タイムアウトとサーキットブレーカー

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 read

LLM 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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. べき等なツールと副作用
  2. 指数バックオフによる再試行
  3. タイムアウトとサーキットブレーカー
  4. ツール出力の検証(Pydantic)
← AI Agentsに戻る