You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Amazon AWS Bedrock的invokeModel设置并检测超时?

AWS Bedrock Runtime invokeModel 超时设置与异常处理

两种超时设置方式

1. 客户端实例化时全局设置(所有请求生效)

在客户端配置中添加http参数,指定全局超时时间:

$bedrockRuntimeClient = new BedrockRuntimeClient([
    'version' => 'latest',
    'region' => $region, 
    'credentials' => [
        'key' => $accessKey,
        'secret' => $secretKey,
    ],
    'http' => [
        'timeout' => 10, // 全局请求超时(单位:秒)
        'connect_timeout' => 5 // 可选,TCP连接超时时间
    ]
]);

2. 单个invokeModel请求单独设置(覆盖全局)

在invokeModel的参数中通过@http指定该请求的超时:

$result = $bedrockRuntimeClient->invokeModel([
    'contentType' => 'application/json',
    'body' => json_encode($body),
    'modelId' => $modelId,
    '@http' => [
        'timeout' => 15, // 此请求单独设置15秒超时
        'connect_timeout' => 5
    ]
]);

超时检测与后续逻辑处理

AWS SDK for PHP会在超时发生时抛出Aws\Exception\AwsException,该异常包装了底层Guzzle的超时类(ConnectException为连接超时,TimeoutException为请求超时)。通过捕获异常并判断类型,即可执行后续降级逻辑:

try {
    $result = $bedrockRuntimeClient->invokeModel([
        'contentType' => 'application/json',
        'body' => json_encode($body),
        'modelId' => $modelId,
        '@http' => [
            'timeout' => 10
        ]
    ]);
    // 正常处理返回结果
    $responseData = json_decode((string)$result['body'], true);
} catch (\Aws\Exception\AwsException $e) {
    $rootException = $e->getPrevious();
    // 判断是否为超时类异常
    if ($rootException instanceof \GuzzleHttp\Exception\TimeoutException || 
        $rootException instanceof \GuzzleHttp\Exception\ConnectException) {
        // 超时触发,执行备用逻辑
        echo "请求超时,启动降级处理";
        // 调用自定义备用函数
        // yourFallbackFunction();
    } else {
        // 处理其他AWS服务异常
        echo "AWS请求错误: " . $e->getMessage();
    }
} catch (\Exception $e) {
    // 处理其他未知异常
    echo "系统错误: " . $e->getMessage();
}

内容的提问来源于stack exchange,提问作者toto_tata

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 18:52:46