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.
Inferenz mit Invoke API
Die Invoke API ist nur auf dem bedrock-runtime Endpunkt verfügbar. Amazon Bedrock bietet die folgenden API-Operationen für die Durchführung von Modellinferenzen mit der Invoke API:
Einschränkungen gelten für die folgenden Operationen:InvokeModel, InvokeModelWithResponseStreamConverse, undConverseStream. Einzelheiten finden Sie unter API-Einschränkungen.
Für die Modellinferenz müssen Sie die folgenden Parameter bestimmen:
-
Modell-ID – Die ID oder der Amazon-Ressourcenname (ARN) des Modells oder Inferenzprofils zur Verwendung im modelId-Inferenzfeld. In der folgenden Tabelle wird beschrieben, wie Sie IDs für verschiedene Ressourcentypen finden:
| Modelltyp |
Description |
ID in der Konsole finden |
ID in der API finden |
Relevante Dokumentation |
| Basismodell |
Ein Basismodell eines Anbieters. |
Wählen Sie im linken Navigationsbereich die Option Basismodelle aus, suchen Sie nach einem Modell und suchen Sie nach der Modell-ID. |
Senden Sie eine GetFoundationModelListFoundationModelsOder-Anfrage und finden Sie sie modelId in der Antwort. |
Eine Liste mit IDs finden Sie unter Unterstützte Basismodelle in Amazon Bedrock. |
| Inferenzprofil |
Erhöht den Durchsatz, indem der Aufruf eines Modells in mehreren Regionen ermöglicht wird. |
Wählen Sie Cross-Region im linken Navigationsbereich Inferenz aus und suchen Sie nach einer Inferenzprofil-ID. |
Senden Sie eine GetInferenceProfileListInferenceProfilesOder-Anfrage und finden Sie sie inferenceProfileId in der Antwort. |
Eine Liste mit IDs finden Sie unter Unterstützte Regionen und Modelle für Inferenzprofile. |
| Prompt |
Ein Prompt, der mithilfe des Prompt-Managements konstruiert wurde. |
Wählen Sie im linken Navigationsbereich die Option Prompt-Management aus, wählen Sie dann im Bereich Prompts einen Prompt aus und suchen Sie nach dem Prompt-ARN. |
Senden Sie eine GetPromptListPromptsOder-Anfrage und finden Sie sie promptArn in der Antwort. |
Informationen zum Erstellen eines Prompts im Prompt-Management finden Sie unter Erstellen und Speichern wiederverwendbarer Prompts mit dem Prompt-Management in Amazon Bedrock. |
| Bereitgestellter Durchsatz |
Bietet einen höheren Durchsatz für ein Modell zu festen Kosten. |
Wählen Sie im linken Navigationsbereich Bereitgestellter Durchsatz aus, wählen Sie einen bereitgestellten Durchsatz aus und suchen Sie nach dem ARN. |
Senden Sie eine GetProvisionedModelThroughputListProvisionedModelThroughputsOder-Anfrage und finden Sie sie provisionedModelArn in der Antwort. |
Hier erfahren Sie, wie Sie einen bereitgestellten Durchsatz für ein Modell unter Erhöhen Sie die Kapazität für den Modellaufruf mit Provisioned Throughput in Amazon Bedrock erwerben können. |
| Benutzerdefiniertes Modell |
Ein Modell, dessen Parameter basierend auf Trainingsdaten von einem Basismodell angepasst wurden. |
Nachdem Sie einen bereitgestellten Durchsatz für ein benutzerdefiniertes Modell erworben haben, folgen Sie den Schritten, um die ID für den bereitgestellten Durchsatz zu finden. |
Nachdem Sie einen bereitgestellten Durchsatz für ein benutzerdefiniertes Modell erworben haben, folgen Sie den Schritten, um die ID für den bereitgestellten Durchsatz zu finden. |
Erfahren Sie, wie Sie ein Modell bei Anpassen des Modells für eine bessere Leistung im jeweiligen Anwendungsfall anpassen können. Nach der Anpassung müssen Sie einen bereitgestellten Durchsatz dafür erwerben und die ID des bereitgestellten Durchsatzes verwenden. |
-
Anforderungstext – Enthält die Inferenzparameter für ein Modell und andere Konfigurationen. Jedes Modell hat seine eigenen Inferenzparameter. Die Inferenzparameter für ein benutzerdefiniertes oder bereitgestelltes Modell hängen vom Basismodell ab, auf deren Basis sie erstellt wurden. Weitere Informationen finden Sie unter Inferenzanforderungsparameter und Antwortfelder für Basismodelle.
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.
Führen Sie die Modellinferenz an einer Eingabeaufforderung aus, indem Sie eine InvokeModelInvokeModelWithResponseStreamOder-Anfrage mit einem Amazon Bedrock-Laufzeitendpunkt senden.
Einschränkungen gelten für die folgenden Operationen:InvokeModel, InvokeModelWithResponseStreamConverse, und. ConverseStream Einzelheiten finden Sie unter API-Einschränkungen.
Die folgenden Felder sind erforderlich:
| Feld |
Anwendungsfall |
| modelId |
So geben Sie das zu verwendende Modell, das Inferenzprofil oder den Prompt aus dem Prompt-Management an. Weitere Informationen zur Auffindung dieses Werts finden Sie unter Inferenz mit Invoke API. |
| body |
So geben Sie die Inferenzparameter für ein Modell an. Weitere Informationen zu den Inferenzparametern für verschiedene Modelle finden Sie unter Inferenzanforderungsparameter und Antwortfelder für Basismodelle. Wenn Sie ein Prompt aus dem Prompt-Management im Feld modelId angeben, lassen Sie dieses Feld weg (falls Sie es dennoch angeben, wird es ignoriert). |
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. |
| Leistung ConfigLatency |
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.
So generieren Sie Text mit einem Text-Prompt
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)
Generieren Sie Text mit einer Textaufforderung mithilfe der Serviceebene
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)
So generieren Sie ein Bild mithilfe eines Text-Prompts
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-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
-
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-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}")
So generieren Sie Einbettungen aus Text
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()
So generieren Sie Einbettungen aus einem Bild
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()
So generieren Sie eine Textantwort auf ein Bild mit einem zugehörigen Text-Prompt
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 occurred: " +
format(message))
if __name__ == "__main__":
main()
So generieren Sie eine Textantwort auf ein auf Amazon S3 hochgeladenes Video mit einem zugehörigen Text-Prompt
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()
So generieren Sie eine Textantwort auf ein Video, das in eine base64-kodierte Zeichenfolge mit einem zugehörigen Text-Prompt konvertiert wurde
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()))