スキップしてコンテンツを表示

Amazon Bedrock で LLM を使用する際の、Python での読み取りタイムアウトを防ぐ方法を教えてください。

所要時間2分
0

Amazon Bedrock の大規模言語モデル (LLM) を使用してテキストを生成する際、読み取りタイムアウトエラーが発生します。

解決策

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

Amazon Bedrock で大規模言語モデル (LLM) を使用してテキストを生成する際、読み取りタイムアウトエラーが発生することがあります。このタイムアウトエラーは、AWS SDK for Python (Boto3) クライアントが大規模言語モデルにクエリを実行したものの、botocore でのデフォルトの読み取りタイムアウト期間内に応答を受け取らなかった場合に発生します。読み取りタイムアウトエラーを解決するには、読み取りタイムアウトを増やすか、ストリーミング API を使用します。

読み取りタイムアウトを増やす

read_timeout の値は、クエリが完了するのに十分な期間に設定することをおすすめします。3,600 秒などの高い値から始めて、タイムアウトエラーが発生しなくなるまで期間を調整します。**read_timeout ** の値を増やすには、次のコード例のようなコードを実行します。詳細については、botocore.configread_timeout パラメータを参照してください。

from boto3 import client
from botocore.config import Config

config = Config(read_timeout=1000)

client = client(service_name='bedrock-runtime',
                      config=config)

注: 1000 を実際のタイムアウト値に置き換えます。

サードパーティライブラリを使用する場合は、まず、botocore の設定で SDK for Python (Boto3) クライアントをインスタンス化します。次に、この構成をクライアントパラメータとして呼び出し可能なモデルクラスに渡します

Boto3 クライアントをサードパーティライブラリに渡す際の読み取りタイムアウト値を増やすには、次の例のようなコードを実行します。

from boto3 import client
from botocore.config import Config
from langchain_aws import ChatBedrock

config = Config(read_timeout=1000)

client = client(service_name='bedrock-runtime',
                      config=config)

llm = ChatBedrock(model_id="anthropic.claude-3-5-sonnet-20240620-v1:0",
              client=client)

上記の例は、読み取りタイムアウトを 1000 秒に設定していることを示しています。読み取りタイムアウト期間では、botocore が読み取りタイムアウト例外を返すまでにサーバーからの応答を待つ時間を指定します。

注: Anthropic Claude 3.7 Sonnet などの LLM は、応答を返すまでに 60 秒よりも長くかかることがあります。Anthropic Claude 3.7 Sonnetでは、タイムアウト値を 3,600 秒以上に設定することをおすすめします。

ConverseStream を使用して回答をストリーミングする

長い応答を処理したり、結果を部分的にユーザーに提供したりする場合は、ConverseStream API 操作を使用して生成されたトークンを受信します。ConverseStream API 操作では生成時にトークンを返すため、長い応答に起因するタイムアウトを回避できます。

ConverseStream API 操作を使用するには、次の例のようなコードを実行します。

import json
from boto3 import client
from botocore.config import Config
# Configure the client
config = Config()
client = client(service_name='bedrock-runtime', config=config)
# Create request parameters
request = {
    "modelId": "anthropic.claude-3-5-sonnet-20240620-v1:0",
    "messages": [
        {
            "role": "user",
            "content": [
                {
                    "text": "Could you write very long story?"
                }
            ]
        }
    ]
}
# Call the streaming API
response = client.converse_stream(
    modelId=request["modelId"],
    messages=request["messages"]
)
# Process the streaming response
for event in response['stream']:
    if 'contentBlockDelta' in event:
        print(event['contentBlockDelta']['delta']['text'], end='')

注: 実際のものでそれぞれ、modelID をモデル ID に、入力の text をテキストに置き換えます。

AWS公式更新しました 7ヶ月前
コメントはありません

関連するコンテンツ