Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Senden Sie eine einzelne Aufforderung mit InvokeModel
Sie führen Inferenzen für eine einzelne Eingabeaufforderung aus, indem Sie die InvokeModelInvokeModelWithResponseStreamAPI-Operationen und verwenden und ein Modell angeben. Amazon-Bedrock-Modelle unterscheiden sich darin, ob sie Text-, Bild- oder Videoeingaben akzeptieren und ob sie Ausgaben in Form von Text, Bildern oder Einbettungen erzeugen können. Einige Modelle können die Antwort in einem Stream zurückgeben. Gehen Sie wie folgt vor, um die Modellunterstützung für Eingabe, Ausgabe und Streaming zu überprüfen:
-
Überprüfen Sie den Wert in den Spalten Eingabemodalitäten, Ausgabemodalitäten oder Streaming-unterstützt für ein Modell unter Unterstützte Basismodelle in Amazon Bedrock.
-
Senden Sie eine GetFoundationModelAnfrage mit der Modell-ID und überprüfen Sie die Werte im responseStreamingSupported Feld inputModalitiesoutputModalities, und.
InvokeModel und InvokeModelWithResponseStream sind wie folgt Weise eingeschränkt:
Führen Sie die Modellinferenz an einer Eingabeaufforderung aus, indem Sie eine InvokeModelInvokeModelWithResponseStreamOder-Anfrage mit einem Amazon Bedrock-Laufzeitendpunkt senden.
Die folgenden Felder sind erforderlich:
Die folgenden Felder sind optional:
| Feld |
Anwendungsfall |
| accept |
Um den Medientyp für den Anforderungstext anzugeben. Weitere Informationen finden Sie unter Medientypen auf der Swagger-Website. |
| contentType |
Um den Medientyp für den Antworttext anzugeben. Weitere Informationen finden Sie unter Medientypen auf der Swagger-Website. |
| performanceConfigLatency |
Um anzugeben, ob ein Modell für Latenz optimiert werden soll. Weitere Informationen finden Sie unter Optimieren der Modellinferenz für die Latenz. |
| guardrailIdentifier |
Um einen Integritätsschutz anzugeben, der auf den Prompt und die Antwort angewendet werden soll. Weitere Informationen finden Sie unter So testen Sie Ihren Integritätsschutz. |
| guardrailVersion |
Um einen Integritätsschutz anzugeben, der auf den Prompt und die Antwort angewendet werden soll. Weitere Informationen finden Sie unter So testen Sie Ihren Integritätsschutz. |
| trace |
Um anzugeben, ob die Ablaufverfolgung für den von Ihnen angegebenen Integritätsschutz zurückgegeben werden soll. Weitere Informationen finden Sie unter So testen Sie Ihren Integritätsschutz. |
| ServiceTier |
Um die Servicestufe für eine Anfrage anzugeben. Weitere Informationen finden Sie unter Servicestufen zur Optimierung von Leistung und Kosten. |
Beispiel für das Aufrufen von Modellcode
Dieses Thema enthält einige grundlegende Beispiele für die Ausführung von Inferenzen mithilfe einer einzigen Eingabeaufforderung mit der InvokeModelAPI. Weitere Beispiele mit anderen Modellen finden Sie in den folgenden Ressourcen:
In den folgenden Beispielen wird davon ausgegangen, dass Sie den programmatischen Zugriff so eingerichtet haben, dass Sie sich standardmäßig automatisch beim AWS CLI und beim SDK for Python (Boto3) authentifizieren, AWS-Region wenn Sie diese Beispiele ausführen. Weitere Informationen zum Einrichten des programmatischen Zugriffs finden Sie unter Erste Schritte mit der API.
Lesen Sie sich die folgenden Punkte durch, bevor Sie die Beispiele ausprobieren:
-
Sie sollten diese Beispiele in der Region USA Ost (Nord-Virginia) (us-east-1) testen, wo alle in den Beispielen verwendeten Modelle unterstützt werden.
-
Der body-Parameter kann groß sein, sodass Sie bei einigen CLI-Beispielen aufgefordert werden, eine JSON-Datei zu erstellen und diese Datei im --body-Argument bereitzustellen, anstatt sie in der Befehlszeile anzugeben.
-
Für die Bild- und Videobeispiele werden Sie aufgefordert, Ihr eigenes Bild und Video zu verwenden. In den Beispielen wird davon ausgegangen, dass Ihre Bilddatei benannt ist image.png und dass Ihre Videodatei benannt ist. video.mp4
-
Möglicherweise müssen Sie Bilder oder Videos in eine base64-kodierte Zeichenfolge konvertieren oder sie auf einen Amazon-S3-Speicherort hochladen. In den Beispielen müssen Sie die Platzhalter durch die tatsächliche base64-kodierte Zeichenfolge oder den S3-Speicherort ersetzen.
Erweitern Sie einen Abschnitt, um einige grundlegende Codebeispiele auszuprobieren.
Die folgenden Beispiele generieren eine Textantwort auf einen Text-Prompt mithilfe des Amazon-Titan Text Premier-Modells. Wählen Sie die Registerkarte für Ihre bevorzugte Methode aus und befolgen Sie dann die Schritte:
- CLI
-
Führen Sie den folgenden Befehl in einem Terminal aus und suchen Sie die generierte Antwort in einer Datei namensinvoke-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
-
Führen Sie das folgende Python-Codebeispiel aus, um eine Textantwort zu generieren:
# 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)
In den folgenden Beispielen wird eine Textantwort auf eine Texteingabeaufforderung generiert, wobei das OpenAI GPT-Modell mit einer Serviceebene zur Priorisierung der Anfrage verwendet wird. Wählen Sie die Registerkarte für Ihre bevorzugte Methode aus und befolgen Sie dann die Schritte:
- CLI
-
Führen Sie den folgenden Befehl in einem Terminal aus und überprüfen Sie die Serviceebene in der Antwort.
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
-
Führen Sie das folgende Python-Codebeispiel aus, um eine Textantwort mit Serviceebene zu generieren:
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)
Die folgenden Codebeispiele generieren ein Bild mithilfe eines Text-Prompts mit dem Stable Diffusion XL-1.0-Modell. Wählen Sie die Registerkarte für Ihre bevorzugte Methode aus und befolgen Sie dann die Schritte:
- CLI
-
Führen Sie den folgenden Befehl in einem Terminal aus und suchen Sie die generierte Antwort in einer Datei namensinvoke-model-output.txt. Die Bytes, die das Bild darstellen, befinden sich im base64-Feld in der Antwort:
aws bedrock-runtime invoke-model \
--model-id stability.stable-diffusion-xl-v1 \
--body '{
"text_prompts": [{"text": "A stylized picture of a cute old steampunk robot."}],
"style_preset": "photographic",
"seed": 0,
"cfg_scale": 10,
"steps": 30
}' \
--cli-binary-format raw-in-base64-out \
invoke-model-output.txt
- Python
-
Führen Sie das folgende Python-Codebeispiel aus, um ein Bild zu generieren und die resultierende stability_1.png Bilddatei in einem Ordner mit dem Namen zu suchenoutput.
# 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-v1"
# 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}")
Die folgenden Beispiele verwenden das Modell Amazon Titan Text Embeddings V2, um binäre Einbettungen für eine Texteingabe zu generieren. Wählen Sie die Registerkarte für Ihre bevorzugte Methode aus und befolgen Sie dann die Schritte:
- CLI
-
Führen Sie den folgenden Befehl in einem Terminal aus und suchen Sie die generierte Antwort in einer Datei namensinvoke-model-output.txt. Die resultierenden Einbettungen befinden sich im Feld 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
-
Führen Sie das folgende Python-Codebeispiel aus, um Einbettungen für den bereitgestellten Text zu generieren:
# 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()
Die folgenden Beispiele verwenden das Amazon-Titan Multimodal Embeddings G1-Modell, um binäre Einbettungen für eine Bildeingabe zu generieren. Wählen Sie die Registerkarte für Ihre bevorzugte Methode und führen Sie die folgenden Schritte aus:
- CLI
-
Öffnen Sie einen Terminal und gehen Sie wie folgt vor:
-
Konvertiert ein Bild mit dem Titel image.png in Ihrem aktuellen Ordner in eine Base64-kodierte Zeichenfolge und schreibt es in eine Datei mit dem Titel, image.txt indem Sie den folgenden Befehl ausführen:
base64 -i image.png -o image.txt
-
Erstellen Sie eine JSON-Datei ${image-base64} mit dem Namen image-input-embeddings-output.json und fügen Sie den folgenden JSON-Code ein, indem Sie ihn durch den Inhalt der image.txt Datei ersetzen (stellen Sie sicher, dass am Ende der Zeichenfolge keine neue Zeile steht):
{
"inputImage": "${image-base64}",
"embeddingConfig": {
"outputEmbeddingLength": 256
}
}
-
Führen Sie den folgenden Befehl aus und geben Sie die image-input-embeddings-output.json Datei als Hauptteil an.
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
-
Suchen Sie die resultierenden Einbettungen in der invoke-model-output.txt Datei.
- Python
-
Ersetzen Sie im folgenden Python-Skript /path/to/image durch den Pfad zu einem tatsächlichen Bild. Führen Sie dann das Skript aus, um Einbettungen zu generieren:
# 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()
Wählen Sie die Registerkarte für Ihre bevorzugte Methode und führen Sie die folgenden Schritte aus:
- CLI
-
Im folgenden Beispiel wird das Modell Anthropic Claude 3 Haiku verwendet, um anhand eines Bildes und eines Text-Prompts, in dem nach dem Inhalt des Bildes gefragt wird, eine Antwort zu generieren. Öffnen Sie einen Terminal und gehen Sie wie folgt vor:
-
Konvertiert ein Bild mit dem Titel image.png in Ihrem aktuellen Ordner in eine Base64-kodierte Zeichenfolge und schreibt es in eine Datei mit dem Titel, image.txt indem Sie den folgenden Befehl ausführen:
base64 -i image.png -o image.txt
-
Erstellen Sie eine JSON-Datei ${image-base64} mit dem Namen image-text-input.json und fügen Sie den folgenden JSON-Code ein, indem Sie ihn durch den Inhalt der image.txt Datei ersetzen (stellen Sie sicher, dass am Ende der Zeichenfolge keine neue Zeile steht):
{
"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?"
}
]
}
]
}
-
Führen Sie den folgenden Befehl aus, um auf der Grundlage des Bildes und der zugehörigen Texteingabeaufforderung eine Textausgabe in eine Datei mit dem Namen zu generiereninvoke-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
-
Suchen Sie die Ausgabe in der invoke-model-output.txt Datei im aktuellen Ordner.
- Python
-
Ersetzen Sie es im folgenden Python-Skript /path/to/image.png durch den tatsächlichen Pfad zum Bild, bevor Sie das Skript ausführen:
# 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 occured: " +
format(message))
if __name__ == "__main__":
main()
Die folgenden Beispiele zeigen, wie Sie anhand eines Videos, das Sie in einen S3-Bucket hochladen, und einem zugehörigen Text-Prompt eine Antwort mit dem Amazon Nova Lite-Modell generieren.
Voraussetzung: Laden Sie ein Video mit video.mp4 dem Titel eines Amazon S3 S3-Buckets in Ihr Konto hoch, indem Sie den Schritten unter Objekte hochladen im Amazon Simple Storage Service-Benutzerhandbuch folgen. Notieren Sie sich die S3-URI des Videos.
Wählen Sie die Registerkarte für Ihre bevorzugte Methode aus und befolgen Sie dann die Schritte:
- CLI
-
Öffnen Sie ein Terminal und führen Sie den folgenden Befehl aus, s3://amzn-s3-demo-bucket/video.mp4 wobei Sie ihn durch den tatsächlichen S3-Speicherort Ihres Videos ersetzen:
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
Suchen Sie die Ausgabe in der invoke-model-output.txt Datei im aktuellen Ordner.
- Python
-
Ersetzen Sie es im folgenden Python-Skript s3://amzn-s3-demo-bucket/video.mp4 durch den tatsächlichen S3-Speicherort Ihres Videos. Führen Sie dann folgendes Skript aus:
# 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()
Die folgenden Beispiele zeigen, wie Sie mit dem Amazon Nova Lite-Modell eine Antwort generieren können, wenn ein Video in eine base64‑codierte Zeichenkette konvertiert wurde und ein begleitender Text-Prompt vorliegt. Wählen Sie die Registerkarte für Ihre bevorzugte Methode und führen Sie die folgenden Schritte aus:
- CLI
-
Gehen Sie wie folgt vor:
-
Konvertieren Sie ein Video mit dem Titel video.mp4 in Ihrem aktuellen Ordner in ein Base64-Format, indem Sie den folgenden Befehl ausführen:
base64 -i video.mp4 -o video.txt
-
Erstellen Sie eine JSON-Datei ${video-base64} mit dem Namen video-text-input.json und fügen Sie den folgenden JSON-Code ein, indem Sie ihn durch den Inhalt der video.txt Datei ersetzen (stellen Sie sicher, dass am Ende keine neue Zeile steht):
{
"messages": [
{
"role": "user",
"content": [
{
"video": {
"format": "mp4",
"source": {
"bytes": ${video-base64}
}
}
},
{
"text": "What happens in this video?"
}
]
}
]
}
-
Führen Sie den folgenden Befehl aus, um eine Textausgabe zu generieren, die auf dem Video und der zugehörigen Textaufforderung für eine Datei mit dem Namen basiertinvoke-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
-
Suchen Sie die Ausgabe in der invoke-model-output.txt Datei im aktuellen Ordner.
- Python
-
Ersetzen Sie im folgenden Python-Skript /path/to/video.mp4 durch den tatsächlichen Pfad zum Video. Führen Sie dann folgendes Skript aus:
# 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()
Beispiel für das Aufrufen eines Modells mit Streaming-Code
Das AWS CLI unterstützt kein Streaming.
Das folgende Beispiel zeigt, wie die InvokeModelWithResponseStreamAPI verwendet wird, um Streaming-Text mit Python mithilfe der Eingabeaufforderung zu generierenwrite 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()))