Amazon Bedrock에서 대규모 언어 모델(LLM)을 사용하여 텍스트를 생성할 때 읽기 시간 초과 오류가 발생합니다.
해결 방법
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
Amazon Bedrock에서 대규모 언어 모델(LLM)을 사용하여 텍스트를 생성할 때 읽기 시간 초과 오류가 발생할 수 있습니다. 시간 초과 오류는 AWS SDK for Python(Boto3) 클라이언트가 LLM을 쿼리하지만 botocore의 기본 읽기 제한 시간 내에 응답을 받지 못할 때 발생합니다. 읽기 시간 초과 오류를 해결하려면 읽기 제한 시간을 늘리거나 스트리밍 API를 사용하십시오.
읽기 제한 시간 늘리기
쿼리를 완료할 수 있을 만큼 read_timeout 값을 길게 설정하는 것이 가장 좋습니다. 3,600초와 같은 큰 값으로 시작한 다음, 시간 초과 오류가 더 이상 발생하지 않을 때까지 이 기간을 조정합니다. read_timeout 값을 늘리려면 다음 예제 코드와 유사한 코드를 실행합니다. 자세한 내용은 botocore.config의 read_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)
위 예제에서는 읽기 제한 시간이 1,000초로 설정되었습니다. 읽기 제한 기간은 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를 해당 텍스트로 바꾸십시오.