Estou recebendo erros de tempo limite de leitura quando uso grandes modelos de linguagem (LLMs) no Amazon Bedrock para gerar texto.
Resolução
Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Quando você usa grande modelo de linguagem (LLMs) no Amazon Bedrock para gerar texto, você pode receber erros de tempo limite de leitura. Os erros de tempo limite ocorrem quando o cliente AWS SDK para Python (Boto3) consulta o LLM, mas não recebe uma resposta dentro do período de tempo limite de leitura padrão do botocore. Para resolver erros de tempo limite de leitura, aumente o tempo limite de leitura ou use APIs de streaming.
Aumente o tempo limite de leitura
É uma prática recomendada definir o valor de read_timeout como longo o suficiente para permitir que suas consultas sejam concluídas. Comece com um valor grande, como 3.600 segundos, e ajuste essa duração até que você não receba mais um erro de tempo limite. Para aumentar o valor de read_timeout, execute um código semelhante ao código de exemplo a seguir. Para obter mais informações, consulte o parâmetro read_timeout em botocore.config.
from boto3 import client
from botocore.config import Config
config = Config(read_timeout=1000)
client = client(service_name='bedrock-runtime',
config=config)
Observação: substitua 1000 pelo seu valor de tempo limite.
Se você usa bibliotecas de terceiros, primeiro instancie um cliente SDK para Python (Boto3) com uma configuração botocore. Em seguida, passe essa configuração como um parâmetro de cliente para uma classe de modelo que pode ser chamada.
Para aumentar o valor do tempo limite de leitura ao passar um cliente Boto3 para uma biblioteca de terceiros, execute um código semelhante ao exemplo a seguir:
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)
Os exemplos anteriores mostram que o tempo limite de leitura está definido para 1.000 segundos. O período de tempo limite de leitura especifica quanto tempo o botocore espera por uma resposta do servidor antes de retornar uma exceção de tempo limite de leitura.
Observação: LLMs como o Anthropic Claude 3.7 Sonnet podem levar mais de 60 segundos para retornar uma resposta. Para o Anthropic Claude 3.7 Sonnet, é uma prática recomendada definir um valor de tempo limite de pelo menos 3.600 segundos.
Use o ConverseStream para transmitir respostas
Se você trabalha com respostas longas ou fornece resultados parciais aos usuários, use a operação da API ConverseStream para receber os tokens gerados. A operação da API ConverseStream retorna tokens à medida que são gerados, o que ajuda a evitar tempos limite em respostas longas.
Para usar a operação da API ConverseStream, execute um código semelhante ao exemplo a seguir:
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='')
Observação: substitua modelID pelo ID do modelo e insira o text pelo texto.