0Pricing
AI Agents · 课时

超时与熔断器

为 LLM 和工具调用设置严格的超时限制,并使用熔断器停止持续冲击出现故障的依赖项。

超时与熔断器 是 CoddyKit 上的免费 AI Agents 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 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 秒时,将超时设置为 3 秒会导致持续的误报失败。

代理总超时

使用截止时间封装整个代理运行过程:

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.'

为什么要使用熔断器

为什么要对容易出现故障的外部服务使用熔断器?

回顾

为每次调用设置超时。为每个工具设置熔断器。使用舱壁隔离控制并发。执行健康检查。返回优雅的备用提示消息。

常见问题解答

「超时与熔断器」课时是免费的吗?

是的 — 「超时与熔断器」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AI Agents 课程的其余内容,请升级到 CoddyKit PRO。 AI Agents 课程共包含 4 节课。

「超时与熔断器」这节课中我会学到什么?

为 LLM 和工具调用设置严格的超时限制,并使用熔断器停止持续冲击出现故障的依赖项。 你通过在浏览器中直接运行的动手代码来练习 AI Agents,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 AI Agents 需要有经验吗?

无需任何先前经验。CoddyKit 上的 AI Agents 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「超时与熔断器」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 AI Agents 课中编写并运行代码吗?

能。每节 AI Agents 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 幂等工具与副作用
  2. 带指数退避的重试
  3. 超时与熔断器
  4. 验证工具输出(Pydantic)
← 返回 AI Agents