Je reçois des erreurs de délai d’attente de lecture lorsque j'utilise des grands modèles de langage (LLM) dans Amazon Bedrock pour générer du texte.
Résolution
Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.
Lorsque vous utilisez des grands modèles de langage (LLM) dans Amazon Bedrock pour générer du texte, des erreurs de délai de lecture peuvent s'afficher. Ces erreurs se produisent lorsque le client AWS SDK for Python (Boto3) interroge le grand modèle de langue mais ne reçoit pas de réponse dans le délai d’attente de lecture par défaut de botocore. Pour résoudre les erreurs de délai d’attente de lecture, augmentez le délai d’attente de lecture ou utilisez des API de streaming.
Augmenter le délai d’attente de lecture
Il est recommandé de définir la valeur de read_timeout de manière qu'elle soit suffisamment longue pour permettre à vos requêtes de s’exécuter. Commencez par une valeur élevée telle que 3 600 secondes, puis ajustez cette durée jusqu'à ce qu’aucune erreur de délai d’attente ne s’affiche. Pour augmenter la valeur de read_timeout, exécutez un code similaire à l'exemple de code suivant. Pour plus d'informations, consultez le paramètre read_timeout dans botocore.config.
from boto3 import client
from botocore.config import Config
config = Config(read_timeout=1000)
client = client(service_name='bedrock-runtime',
config=config)
Remarque : Remplacez 1000 par la valeur de votre délai d'attente.
Si vous utilisez des bibliothèques tierces telles que Instancier d'abord un client SDK for Python (Boto3) avec une configuration botocore. Puis, transmettez cette configuration en tant que paramètre client à une classe de modèle appelable.
Pour augmenter la valeur du délai d’attente de lecture lorsque vous transmettez un client Boto3 à une bibliothèque tierce, exécutez un code similaire à l'exemple suivant :
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)
Les exemples précédents montrent que le délai d’attente de lecture est défini à 1 000 secondes. Le délai d’attente de lecture indique combien de temps botocore attend une réponse du serveur avant de renvoyer une exception de délai d’attente de lecture.
Remarque : Les LLM tels que Anthropic Claude 3.7 Sonnet peuvent prendre plus de 60 secondes pour renvoyer une réponse. Pour Anthropic Claude 3.7 Sonnet, il est recommandé de définir une valeur de temporisation d'au moins 3 600 secondes.
Utiliser ConverseStream pour diffuser les réponses
Si vous travaillez avec des réponses longues ou si vous fournissez des résultats partiels aux utilisateurs, utilisez l'opération d'API ConverseStream pour recevoir les jetons générés. L'opération d'API ConverseStream renvoie les jetons au fur et à mesure qu'ils sont générés, ce qui permet d'éviter les délais d'attente pour les réponses longues.
Pour utiliser l'opération d'API ConverseStream, exécutez un code similaire à l'exemple suivant :
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='')
Remarque : Remplacez modelID par l'ID de votre modèle et saisissez text par votre texte.