View a markdown version of this page

Inférence à l'aide de l'API Invoke - Amazon Bedrock

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Inférence à l'aide de l'API Invoke

L'API Invoke est disponible uniquement sur le bedrock-runtime point de terminaison. Amazon Bedrock propose les opérations d'API suivantes pour effectuer l'inférence de modèle avec l'API Invoke :

Note

Des restrictions s'appliquent aux opérations suivantes : InvokeModelInvokeModelWithResponseStream,Converse, etConverseStream. Consultez les restrictions relatives aux API pour plus de détails.

Pour l’inférence de modèle, vous devez déterminer les paramètres suivants :

  • ID de modèle : ID ou Amazon Resource Name (ARN) du modèle ou du profil d’inférence à utiliser dans le champ modelId pour l’inférence. Le tableau suivant décrit comment rechercher des ID pour différents types de ressources :

    Type de modèle Description Rechercher un ID dans la console Rechercher un ID dans l’API Documentation utile
    Modèle de base Modèle de fondation proposé par un fournisseur. Choisissez Modèles de base dans le volet de navigation de gauche, recherchez un modèle et recherchez l’ID du modèle. Envoyez une GetFoundationModelou une ListFoundationModelsdemande et modelId retrouvez-la dans la réponse. Consultez une liste des ID dans Modèles de fondation pris en charge dans Amazon Bedrock.
    Profil d’inférence Augmente le débit en autorisant l’invocation d’un modèle dans plusieurs régions. Choisissez Cross-Region Inference dans le volet de navigation de gauche et recherchez un ID de profil d'inférence. Envoyez une GetInferenceProfileou une ListInferenceProfilesdemande et inferenceProfileId retrouvez-la dans la réponse. Consultez une liste des ID dans Régions et modèles pris en charge pour les profils d'inférence.
    Invite Invite créée à l’aide de la gestion des invites. Choisissez Gestion des invites dans le volet de navigation de gauche, sélectionnez une invite dans la section Invites et recherchez l’ARN de l’invite. Envoyez une GetPromptou une ListPromptsdemande et promptArn retrouvez-la dans la réponse. Découvrez comment créer une invite dans la gestion des invites dans Création et stockage d’invites réutilisables avec la gestion des invites dans Amazon Bedrock.
    Débit provisionné Fournit un niveau de débit supérieur pour un modèle à un coût fixe. Choisissez Débit provisionné dans le volet de navigation de gauche, sélectionnez un débit provisionné et recherchez l’ARN. Envoyez une GetProvisionedModelThroughputou une ListProvisionedModelThroughputsdemande et provisionedModelArn retrouvez-la dans la réponse. Découvrez comment acheter un débit provisionné pour un modèle dans Augmentez la capacité d'invocation des modèles grâce au débit provisionné dans Amazon Bedrock.
    Modèle personnalisé Modèle dont les paramètres sont décalés par rapport à un modèle de fondation basé sur les données d’entraînement. Après avoir acheté le débit provisionné pour un modèle personnalisé, suivez les étapes pour rechercher l’ID du débit provisionné. Après avoir acheté le débit provisionné pour un modèle personnalisé, suivez les étapes pour rechercher l’ID du débit provisionné. Découvrez comment personnaliser un modèle dans Personnalisation de votre modèle pour améliorer ses performances en fonction de votre cas d’utilisation. Après la personnalisation, vous devez acheter le débit provisionné pour celui-ci et utiliser l’ID du débit provisionné.
  • Corps de la demande : contient les paramètres d’inférence pour un modèle et d’autres configurations. Chaque modèle de base possède son propre ensemble de paramètres d’inférence. Les paramètres d’inférence d’un modèle personnalisé ou provisionné dépendent du modèle de base à partir duquel il a été créé. Pour de plus amples informations, veuillez consulter Paramètres de demande d’inférence et champs de réponse pour les modèles de fondation.

Soumettez une seule invite avec InvokeModel

Vous pouvez exécuter l'inférence sur une seule invite en utilisant les opérations de l'InvokeModelWithResponseStreamAPI InvokeModelet en spécifiant un modèle. Les modèles Amazon Bedrock ne sont pas les mêmes : ils acceptent les entrées de texte, d’image ou de vidéo et s’ils peuvent produire des sorties sous forme de texte, d’image ou de vectorisations. Certains modèles peuvent renvoyer la réponse dans un flux. Pour vérifier la prise en charge des modèles en entrée, en sortie et en diffusion, effectuez l’une des opérations suivantes :

Exécutez l'inférence du modèle à une invite en envoyant une InvokeModelWithResponseStreamdemande InvokeModelOR avec un point de terminaison Amazon Bedrock.

Note

Des restrictions s'appliquent aux opérations suivantes : InvokeModelInvokeModelWithResponseStream,Converse, etConverseStream. Consultez les restrictions relatives aux API pour plus de détails.

Les champs suivants sont obligatoires :

Champ Cas d’utilisation
modelId Pour spécifier le modèle, le profil d’inférence ou l’invite à utiliser depuis Prompt Management. Pour savoir comment trouvez cette valeur, consultez Inférence à l'aide de l'API Invoke.
body Pour spécifier les paramètres d’inférence d’un modèle. Pour afficher les paramètres d’inférence pour différents modèles, consultez Paramètres de demande d’inférence et champs de réponse pour les modèles de fondation. Si vous spécifiez une invite de Gestion des invites dans le champ modelId, omettez ce champ (si vous l’incluez, il sera ignoré).

Les champs suivants sont facultatifs :

Champ Cas d’utilisation
accept Pour spécifier le type de média pour le corps de la demande. Pour plus d’informations, consultez Media Types sur le site Web Swagger.
contentType Pour spécifier le type de média pour le corps de la réponse. Pour plus d’informations, consultez Media Types sur le site Web Swagger.
performance ConfigLatency Pour spécifier s’il faut optimiser un modèle en termes de latence. Pour de plus amples informations, veuillez consulter Optimisation de l’inférence de modèle pour la latence.
guardrailIdentifier Pour spécifier une barrière de protection à appliquer à l’invite et à la réponse. Pour de plus amples informations, veuillez consulter Test de votre barrière de protection.
guardrailVersion Pour spécifier une barrière de protection à appliquer à l’invite et à la réponse. Pour de plus amples informations, veuillez consulter Test de votre barrière de protection.
trace Pour spécifier s’il faut renvoyer la trace de la barrière de protection que vous spécifiez. Pour de plus amples informations, veuillez consulter Test de votre barrière de protection.
Niveau de service Pour spécifier le niveau de service d'une demande. Pour de plus amples informations, veuillez consulter Niveaux de service pour optimiser les performances et les coûts.

Exemples d’invocation de code de modèle

Cette rubrique fournit des exemples de base pour exécuter une inférence à l'aide d'une seule invite avec l'InvokeModelAPI. Pour d’autres exemples avec différents modèles, consultez les ressources suivantes :

Les exemples suivants supposent que vous avez configuré l'accès par programmation de telle sorte que vous vous authentifiez automatiquement auprès du AWS CLI SDK pour Python (Boto3) par défaut lorsque vous exécutez ces exemples. Région AWS Pour plus d’informations sur la configuration de l’accès à la programmation, consultez Démarrage avec l’API.

Note

Passez en revue les points suivants avant de tester les exemples :

  • Vous devriez tester ces exemples dans la région USA Est (Virginie du Nord) (us-east-1), qui prend en charge tous les modèles utilisés dans les exemples.

  • Le paramètre body peut être volumineux. Par conséquent, pour certains exemples de CLI, il vous sera demandé de créer un fichier JSON et de fournir ce fichier dans l’argument --body au lieu de le spécifier dans la ligne de commande.

  • Pour les exemples d’images et de vidéos, il vous sera demandé d’utiliser vos propres images et vidéos. Les exemples supposent que votre fichier image est nommé image.png et que votre fichier vidéo est nommévideo.mp4.

  • Vous devrez peut-être convertir des images ou des vidéos en une chaîne codée en Base64 ou les télécharger sur un site Amazon S3. Dans les exemples, vous devrez remplacer les espaces réservés par la chaîne codée en Base64 ou l’emplacement S3 réel.

Génération de texte à l’aide d’une invite de texte

Les exemples suivants génèrent une réponse textuelle à une invite de texte à l’aide du modèle Amazon Titan Text Premier. Choisissez l’onglet correspondant à votre méthode préférée, puis suivez les étapes :

CLI

Exécutez la commande suivante dans un terminal et recherchez la réponse générée dans un fichier appeléinvoke-model-output.txt.

aws bedrock-runtime invoke-model \ --model-id amazon.titan-text-premier-v1:0 \ --body '{ "inputText": "Describe the purpose of a 'hello world' program in one line.", "textGenerationConfig": { "maxTokenCount": 512, "temperature": 0.5 } }' \ --cli-binary-format raw-in-base64-out \ invoke-model-output.txt
Python

Exécutez l’exemple de code Python suivant pour générer une réponse textuelle :

# Use the native inference API to send a text message to Amazon Titan Text. import boto3 import json from botocore.exceptions import ClientError # Create a Bedrock Runtime client in the AWS Region of your choice. client = boto3.client("bedrock-runtime", region_name="us-east-1") # Set the model ID, e.g., Titan Text Premier. model_id = "amazon.titan-text-premier-v1:0" # Define the prompt for the model. prompt = "Describe the purpose of a 'hello world' program in one line." # Format the request payload using the model's native structure. native_request = { "inputText": prompt, "textGenerationConfig": { "maxTokenCount": 512, "temperature": 0.5, }, } # Convert the native request to JSON. request = json.dumps(native_request) try: # Invoke the model with the request. response = client.invoke_model(modelId=model_id, body=request) except (ClientError, Exception) as e: print(f"ERROR: Can't invoke '{model_id}'. Reason: {e}") exit(1) # Decode the response body. model_response = json.loads(response["body"].read()) # Extract and print the response text. response_text = model_response["results"][0]["outputText"] print(response_text)

Générer du texte à l'aide d'une invite textuelle à l'aide du niveau de service

Les exemples suivants génèrent une réponse textuelle à une demande de texte à l'aide du modèle OpenAI GPT avec un niveau de service pour prioriser la demande. Choisissez l’onglet correspondant à votre méthode préférée, puis suivez les étapes :

CLI

Exécutez la commande suivante dans un terminal et validez le niveau de service dans la réponse.

aws bedrock-runtime invoke-model \ --model-id openai.gpt-oss-120b-1:0 \ --body '{ "messages": [ { "role": "user", "content": "Describe the purpose of a '\''hello world'\'' program in one line." } ], "max_tokens": 512, "temperature": 0.7 }' \ --content-type application/json \ --accept application/json \ --service-tier priority \ --cli-binary-format raw-in-base64-out
Python

Exécutez l'exemple de code Python suivant pour générer une réponse textuelle avec le niveau de service :

import boto3 import json # Create a Bedrock Runtime client bedrock_runtime = boto3.client( service_name="bedrock-runtime", region_name="us-east-1" ) # Define the model ID and request body model_id = "openai.gpt-oss-120b-1:0" body = json.dumps({ "messages": [ { "role": "user", "content": "Describe the purpose of a 'hello world' program in one line." } ], "max_tokens": 512, "temperature": 0.7 }) # Make the request with service tier response = bedrock_runtime.invoke_model( modelId=model_id, body=body, contentType="application/json", accept="application/json", serviceTier="priority" ) # Parse and print the response response_body = json.loads(response["body"]) print(response_body)

Génération d’une image à l’aide d’une invite de texte

Les exemples de code suivants génèrent une image à l’aide d’une invite de texte avec le modèle Stable Diffusion XL 1.0. Choisissez l’onglet correspondant à votre méthode préférée, puis suivez les étapes :

CLI

Exécutez la commande suivante dans un terminal et recherchez la réponse générée dans un fichier appeléinvoke-model-output.txt. Les octets qui représentent l’image se trouvent dans le champ base64 de la réponse :

aws bedrock-runtime invoke-model \ --model-id stability.stable-image-core-v1:1 \ --body '{ "prompt": "A stylized picture of a cute old steampunk robot.", "seed": 0 }' \ --cli-binary-format raw-in-base64-out \ invoke-model-output.txt
Python

Exécutez l'exemple de code Python suivant pour générer une image et rechercher le fichier stability_1.png image obtenu dans un dossier appeléoutput.

# Use the native inference API to create an image with Amazon Titan Image Generator import base64 import boto3 import json import os import random # Create a Bedrock Runtime client in the AWS Region of your choice. client = boto3.client("bedrock-runtime", region_name="us-east-1") # Set the model ID, e.g., Titan Image Generator G1. model_id = "amazon.titan-image-generator-v2:0" # Define the image generation prompt for the model. prompt = "A stylized picture of a cute old steampunk robot." # Generate a random seed. seed = random.randint(0, 2147483647) # Format the request payload using the model's native structure. native_request = { "taskType": "TEXT_IMAGE", "textToImageParams": {"text": prompt}, "imageGenerationConfig": { "numberOfImages": 1, "quality": "standard", "cfgScale": 8.0, "height": 512, "width": 512, "seed": seed, }, } # Convert the native request to JSON. request = json.dumps(native_request) # Invoke the model with the request. response = client.invoke_model(modelId=model_id, body=request) # Decode the response body. model_response = json.loads(response["body"].read()) # Extract the image data. base64_image_data = model_response["images"][0] # Save the generated image to a local folder. i, output_dir = 1, "output" if not os.path.exists(output_dir): os.makedirs(output_dir) while os.path.exists(os.path.join(output_dir, f"titan_{i}.png")): i += 1 image_data = base64.b64decode(base64_image_data) image_path = os.path.join(output_dir, f"titan_{i}.png") with open(image_path, "wb") as file: file.write(image_data) print(f"The generated image has been saved to {image_path}")

Génération de vectorisations à partir de texte

Les exemples suivants utilisent le modèle Amazon Titan Text Embeddings V2 pour générer des vectorisations binaires pour une entrée de texte. Choisissez l’onglet correspondant à votre méthode préférée, puis suivez les étapes :

CLI

Exécutez la commande suivante dans un terminal et recherchez la réponse générée dans un fichier appeléinvoke-model-output.txt. Les vectorisations qui en résultent se trouvent dans le champ binary.

aws bedrock-runtime invoke-model \ --model-id amazon.titan-embed-text-v2:0 \ --body '{ "inputText": "What are the different services that you offer?", "embeddingTypes": ["binary"] }' \ --cli-binary-format raw-in-base64-out \ invoke-model-output.txt
Python

Exécutez l’exemple de code Python suivant pour générer des vectorisations pour le texte fourni :

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Shows how to generate an embedding with the Amazon Titan Text Embeddings V2 Model """ import json import logging import boto3 from botocore.exceptions import ClientError logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) def generate_embedding(model_id, body): """ Generate an embedding with the vector representation of a text input using Amazon Titan Text Embeddings G1 on demand. Args: model_id (str): The model ID to use. body (str) : The request body to use. Returns: response (JSON): The embedding created by the model and the number of input tokens. """ logger.info("Generating an embedding with Amazon Titan Text Embeddings V2 model %s", model_id) bedrock = boto3.client(service_name='bedrock-runtime') accept = "application/json" content_type = "application/json" response = bedrock.invoke_model( body=body, modelId=model_id, accept=accept, contentType=content_type ) response_body = json.loads(response.get('body').read()) return response_body def main(): """ Entrypoint for Amazon Titan Embeddings V2 - Text example. """ logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") model_id = "amazon.titan-embed-text-v2:0" input_text = "What are the different services that you offer?" # Create request body. body = json.dumps({ "inputText": input_text, "embeddingTypes": ["binary"] }) try: response = generate_embedding(model_id, body) print(f"Generated an embedding: {response['embeddingsByType']['binary']}") # returns binary embedding print(f"Input text: {input_text}") print(f"Input Token count: {response['inputTextTokenCount']}") except ClientError as err: message = err.response["Error"]["Message"] logger.error("A client error occurred: %s", message) print("A client error occured: " + format(message)) else: print(f"Finished generating an embedding with Amazon Titan Text Embeddings V2 model {model_id}.") if __name__ == "__main__": main()

Génération de vectorisations à partir d’une image

Les exemples suivants utilisent le modèle Amazon Titan Multimodal Embeddings G1 pour générer des vectorisations pour une entrée d’image. Choisissez l’onglet correspondant à votre méthode préférée, puis suivez les étapes :

CLI

Ouvrez un terminal et procédez comme suit :

  1. Convertissez une image intitulée image.png dans votre dossier actuel en une chaîne codée en base64 et écrivez-la dans un fichier intitulé image.txt en exécutant la commande suivante :

    base64 -i image.png -o image.txt
  2. Créez un fichier JSON appelé image-input-embeddings-output.json et collez le JSON suivant, en le ${image-base64} remplaçant par le contenu du image.txt fichier (assurez-vous qu'il n'y a pas de nouvelle ligne à la fin de la chaîne) :

    { "inputImage": "${image-base64}", "embeddingConfig": { "outputEmbeddingLength": 256 } }
  3. Exécutez la commande suivante en spécifiant le image-input-embeddings-output.json fichier comme corps.

    aws bedrock-runtime invoke-model \ --model-id amazon.titan-embed-image-v1 \ --body file://image-input-embeddings-output.json \ --cli-binary-format raw-in-base64-out \ invoke-model-output.txt
  4. Trouvez les intégrations qui en résultent dans le fichier. invoke-model-output.txt

Python

Dans le script Python suivant, remplacez /path/to/image par le chemin d'accès à une image réelle. Exécutez ensuite le script pour générer des vectorisations :

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Shows how to generate embeddings from an image with the Amazon Titan Multimodal Embeddings G1 model (on demand). """ import base64 import json import logging import boto3 from botocore.exceptions import ClientError class EmbedError(Exception): "Custom exception for errors returned by Amazon Titan Multimodal Embeddings G1" def __init__(self, message): self.message = message logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) def generate_embeddings(model_id, body): """ Generate a vector of embeddings for an image input using Amazon Titan Multimodal Embeddings G1 on demand. Args: model_id (str): The model ID to use. body (str) : The request body to use. Returns: response (JSON): The embeddings that the model generated, token information, and the reason the model stopped generating embeddings. """ logger.info("Generating embeddings with Amazon Titan Multimodal Embeddings G1 model %s", model_id) bedrock = boto3.client(service_name='bedrock-runtime') accept = "application/json" content_type = "application/json" response = bedrock.invoke_model( body=body, modelId=model_id, accept=accept, contentType=content_type ) response_body = json.loads(response.get('body').read()) finish_reason = response_body.get("message") if finish_reason is not None: raise EmbedError(f"Embeddings generation error: {finish_reason}") return response_body def main(): """ Entrypoint for Amazon Titan Multimodal Embeddings G1 example. """ logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") # Read image from file and encode it as base64 string. with open("/path/to/image", "rb") as image_file: input_image = base64.b64encode(image_file.read()).decode('utf8') model_id = 'amazon.titan-embed-image-v1' output_embedding_length = 256 # Create request body. body = json.dumps({ "inputImage": input_image, "embeddingConfig": { "outputEmbeddingLength": output_embedding_length } }) try: response = generate_embeddings(model_id, body) print(f"Generated image embeddings of length {output_embedding_length}: {response['embedding']}") except ClientError as err: message = err.response["Error"]["Message"] logger.error("A client error occurred: %s", message) print("A client error occured: " + format(message)) except EmbedError as err: logger.error(err.message) print(err.message) else: print(f"Finished generating image embeddings with Amazon Titan Multimodal Embeddings G1 model {model_id}.") if __name__ == "__main__": main()

Générez une réponse textuelle à une image accompagnée d’une invite de texte

Choisissez l’onglet correspondant à votre méthode préférée, puis suivez les étapes :

CLI

L’exemple suivant utilise le modèle Anthropic Claude 3 Haiku pour générer une réponse, à partir d’une image et d’une invite de texte demandant le contenu de l’image. Ouvrez un terminal et procédez comme suit :

  1. Convertissez une image intitulée image.png dans votre dossier actuel en une chaîne codée en base64 et écrivez-la dans un fichier intitulé image.txt en exécutant la commande suivante :

    base64 -i image.png -o image.txt
  2. Créez un fichier JSON appelé image-text-input.json et collez le JSON suivant, en le ${image-base64} remplaçant par le contenu du image.txt fichier (assurez-vous qu'il n'y a pas de nouvelle ligne à la fin de la chaîne) :

    { "anthropic_version": "bedrock-2023-05-31", "max_tokens": 1000, "messages": [ { "role": "user", "content": [ { "type": "image", "source": { "type": "base64", "media_type": "image/png", "data": "${image-base64}" } }, { "type": "text", "text": "What's in this image?" } ] } ] }
  3. Exécutez la commande suivante pour générer une sortie de texte, basée sur l'image et l'invite de texte qui l'accompagne, vers un fichier appelé invoke-model-output.txt :

    aws bedrock-runtime invoke-model \ --model-id anthropic.claude-3-haiku-20240307-v1:0 \ --body file://image-text-input.json \ --cli-binary-format raw-in-base64-out \ invoke-model-output.txt
  4. Recherchez la sortie dans le invoke-model-output.txt fichier du dossier actuel.

Python

Dans le script python suivant, remplacez-le /path/to/image.png par le chemin réel de l'image avant d'exécuter le script :

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Shows how to run a multimodal prompt with Anthropic Claude (on demand) and InvokeModel. """ import json import logging import base64 import boto3 from botocore.exceptions import ClientError logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) def run_multi_modal_prompt(bedrock_runtime, model_id, messages, max_tokens): """ Invokes a model with a multimodal prompt. Args: bedrock_runtime: The Amazon Bedrock boto3 client. model_id (str): The model ID to use. messages (JSON) : The messages to send to the model. max_tokens (int) : The maximum number of tokens to generate. Returns: None. """ body = json.dumps( { "anthropic_version": "bedrock-2023-05-31", "max_tokens": max_tokens, "messages": messages } ) response = bedrock_runtime.invoke_model( body=body, modelId=model_id) response_body = json.loads(response.get('body').read()) return response_body def main(): """ Entrypoint for Anthropic Claude multimodal prompt example. """ try: bedrock_runtime = boto3.client(service_name='bedrock-runtime') model_id = 'anthropic.claude-3-sonnet-20240229-v1:0' max_tokens = 1000 input_text = "What's in this image?" input_image = "/path/to/image" # Replace with actual path to image file # Read reference image from file and encode as base64 strings. image_ext = input_image.split(".")[-1] with open(input_image, "rb") as image_file: content_image = base64.b64encode(image_file.read()).decode('utf8') message = { "role": "user", "content": [ { "type": "image", "source": { "type": "base64", "media_type": f"image/{image_ext}", "data": content_image } }, { "type": "text", "text": input_text } ] } messages = [message] response = run_multi_modal_prompt( bedrock_runtime, model_id, messages, max_tokens) print(json.dumps(response, indent=4)) except ClientError as err: message = err.response["Error"]["Message"] logger.error("A client error occurred: %s", message) print("A client error occurred: " + format(message)) if __name__ == "__main__": main()

Générez une réponse textuelle à une vidéo chargée dans Amazon S3 avec une invite de texte d’accompagnement

Les exemples suivants montrent comment générer une réponse avec le modèle Amazon Nova Lite, à partir d’une vidéo que vous téléchargez dans un compartiment S3 et d’une invite textuelle qui l’accompagne.

Prérequis : téléchargez une vidéo intitulée video.mp4 dans un compartiment Amazon S3 de votre compte en suivant les étapes décrites dans la section Chargement d'objets dans le guide de l'utilisateur d'Amazon Simple Storage Service. Prenez note de l’URI S3 de la vidéo.

Choisissez l’onglet correspondant à votre méthode préférée, puis suivez les étapes :

CLI

Ouvrez un terminal et exécutez la commande suivante, en la s3://amzn-s3-demo-bucket/video.mp4 remplaçant par l'emplacement réel de votre vidéo dans S3 :

aws bedrock-runtime invoke-model \ --model-id amazon.nova-lite-v1:0 \ --body '{ "messages": [ { "role": "user", "content": [ { "video": { "format": "mp4", "source": { "s3Location": { "uri": "s3://amzn-s3-demo-bucket/video.mp4" } } } }, { "text": "What happens in this video?" } ] } ] }' \ --cli-binary-format raw-in-base64-out \ invoke-model-output.txt

Recherchez la sortie dans le invoke-model-output.txt fichier du dossier actuel.

Python

Dans le script Python suivant, remplacez s3://amzn-s3-demo-bucket/video.mp4 par l'emplacement S3 réel de votre vidéo. Exécutez ensuite ce script :

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Shows how to run a multimodal prompt with Nova Lite (on demand) and InvokeModel. """ import json import logging import base64 import boto3 from botocore.exceptions import ClientError logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) def run_multi_modal_prompt(bedrock_runtime, model_id, messages, max_tokens): """ Invokes a model with a multimodal prompt. Args: bedrock_runtime: The Amazon Bedrock boto3 client. model_id (str): The model ID to use. messages (JSON) : The messages to send to the model. max_tokens (int) : The maximum number of tokens to generate. Returns: None. """ body = json.dumps( { "messages": messages, "inferenceConfig": { "maxTokens": max_tokens } } ) response = bedrock_runtime.invoke_model( body=body, modelId=model_id) response_body = json.loads(response.get('body').read()) return response_body def main(): """ Entrypoint for Nova Lite video prompt example. """ try: bedrock_runtime = boto3.client(service_name='bedrock-runtime') model_id = "amazon.nova-lite-v1:0" max_tokens = 1000 input_video_s3_uri = "s3://amzn-s3-demo-bucket/video.mp4" # Replace with real S3 URI video_ext = input_video_s3_uri.split(".")[-1] input_text = "What happens in this video?" message = { "role": "user", "content": [ { "video": { "format": video_ext, "source": { "s3Location": { "uri": input_video_s3_uri } } } }, { "text": input_text } ] } messages = [message] response = run_multi_modal_prompt( bedrock_runtime, model_id, messages, max_tokens) print(json.dumps(response, indent=4)) except ClientError as err: message = err.response["Error"]["Message"] logger.error("A client error occurred: %s", message) print("A client error occured: " + format(message)) if __name__ == "__main__": main()

Génération d’une réponse textuelle dans une vidéo convertie en chaîne codée en Base64 avec une invite de texte associée

Les exemples suivants montrent comment générer une réponse avec le modèle Amazon Nova Lite, à partir d’une vidéo convertie en chaîne codée en Base64 et d’une invite de texte qui l’accompagne. Choisissez l’onglet correspondant à votre méthode préférée, puis suivez les étapes :

CLI

Procédez comme suit :

  1. Convertissez une vidéo intitulée video.mp4 dans votre dossier actuel en base64 en exécutant la commande suivante :

    base64 -i video.mp4 -o video.txt
  2. Créez un fichier JSON appelé video-text-input.json et collez le JSON suivant, en le ${video-base64} remplaçant par le contenu du video.txt fichier (assurez-vous qu'il n'y a pas de nouvelle ligne à la fin) :

    { "messages": [ { "role": "user", "content": [ { "video": { "format": "mp4", "source": { "bytes": ${video-base64} } } }, { "text": "What happens in this video?" } ] } ] }
  3. Exécutez la commande suivante pour générer une sortie de texte basée sur la vidéo et l'invite textuelle qui l'accompagne vers un fichier appelé invoke-model-output.txt :

    aws bedrock-runtime invoke-model \ --model-id amazon.nova-lite-v1:0 \ --body file://video-text-input.json \ --cli-binary-format raw-in-base64-out \ invoke-model-output.txt
  4. Recherchez la sortie dans le invoke-model-output.txt fichier du dossier actuel.

Python

Dans le script Python ci-dessous, remplacez-le /path/to/video.mp4 par le chemin réel de la vidéo. Exécutez ensuite ce script :

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Shows how to run a multimodal prompt with Nova Lite (on demand) and InvokeModel. """ import json import logging import base64 import boto3 from botocore.exceptions import ClientError logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) def run_multi_modal_prompt(bedrock_runtime, model_id, messages, max_tokens): """ Invokes a model with a multimodal prompt. Args: bedrock_runtime: The Amazon Bedrock boto3 client. model_id (str): The model ID to use. messages (JSON) : The messages to send to the model. max_tokens (int) : The maximum number of tokens to generate. Returns: None. """ body = json.dumps( { "messages": messages, "inferenceConfig": { "maxTokens": max_tokens } } ) response = bedrock_runtime.invoke_model( body=body, modelId=model_id) response_body = json.loads(response.get('body').read()) return response_body def main(): """ Entrypoint for Nova Lite video prompt example. """ try: bedrock_runtime = boto3.client(service_name='bedrock-runtime') model_id = "amazon.nova-lite-v1:0" max_tokens = 1000 input_video = "/path/to/video.mp4" # Replace with real path to video video_ext = input_video.split(".")[-1] input_text = "What happens in this video?" # Read reference video from file and encode as base64 string. with open(input_video, "rb") as video_file: content_video = base64.b64encode(video_file.read()).decode('utf8')\ message = { "role": "user", "content": [ { "video": { "format": video_ext, "source": { "bytes": content_video } } }, { "text": input_text } ] } messages = [message] response = run_multi_modal_prompt( bedrock_runtime, model_id, messages, max_tokens) print(json.dumps(response, indent=4)) except ClientError as err: message = err.response["Error"]["Message"] logger.error("A client error occurred: %s", message) print("A client error occured: " + format(message)) if __name__ == "__main__": main()

Exemple d’invocation de modèle d’appel avec code de streaming

Note

Le AWS CLI ne prend pas en charge le streaming.

L'exemple suivant montre comment utiliser l'InvokeModelWithResponseStreamAPI pour générer du texte en streaming avec Python à l'aide de l'invitewrite an essay for living on mars in 1000 words.

import boto3 import json brt = boto3.client(service_name='bedrock-runtime') body = json.dumps({ 'prompt': '\n\nHuman: write an essay for living on mars in 1000 words\n\nAssistant:', 'max_tokens_to_sample': 4000 }) response = brt.invoke_model_with_response_stream( modelId='anthropic.claude-v2', body=body ) stream = response.get('body') if stream: for event in stream: chunk = event.get('chunk') if chunk: print(json.loads(chunk.get('bytes').decode()))