Intraprendi una conversazione con Converse - Amazon Bedrock

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Intraprendi una conversazione con Converse

Puoi utilizzare Amazon Bedrock Converse API per creare applicazioni conversazionali che inviano e ricevono messaggi da e verso un modello Amazon Bedrock. Ad esempio, puoi creare un chat bot che intrattiene una conversazione a più turni e utilizza una personalizzazione del personaggio o del tono specifica per le tue esigenze, ad esempio un utile assistente di supporto tecnico.

Per utilizzare ConverseAPI, si utilizzano le operazioni Converse o ConverseStream(per lo streaming delle risposte) per inviare messaggi a una modella. È possibile utilizzare le operazioni di inferenza esistenti (InvokeModelo InvokeModelWithResponseStream) per le applicazioni di conversazione. Tuttavia, consigliamo di utilizzare Converse in API quanto è coerente API e funziona con tutti i modelli Amazon Bedrock che supportano i messaggi. Ciò significa che puoi scrivere il codice una sola volta e utilizzarlo con modelli diversi. Se un modello ha parametri di inferenza unici, Converse consente API anche di passare quei parametri unici in una struttura specifica del modello.

Puoi usare Converse API per implementare l'uso degli strumenti e i guardrail nelle tue applicazioni.

Nota

Con Mistral AI e Meta modelli, Converse API incorpora i tuoi input in un modello di prompt specifico del modello che abilita le conversazioni.

Modelli e caratteristiche del modello supportati

Converse API supporta i seguenti modelli e caratteristiche di Amazon Bedrock. Converse API non supporta alcun modello di incorporamento (come Titan Embeddings G1 - Text) o modelli di generazione di immagini (come Stability AI).

Modello conversare ConverseStream Richieste di sistema Chat relativa ai documenti Vista Uso dello strumento Utilizzo dello strumento di streaming Guardrail

AI21 Jamba-Instruct

No

No

No

No

No

AI21 Labs Jurassic-2 (Testo)

Limitato. Nessun supporto via chat.

No

No

No

No

No

No

Amazon Titan modelli

No

Sì (tranne Titan Text Premier)

No

No

No

Anthropic Claude 2 e versioni precedenti

No

No

No

Anthropic Claude 3

Anthropic Claude 3.5

No

Cohere Command

Limitato. Nessun supporto via chat.

Limitato. Nessun supporto via chat.

No

No

No

No

Cohere Command Light

Limitato. Nessun supporto via chat.

Limitato. Nessun supporto via chat.

No

No

No

No

No

Cohere Command R e Command R+

No

No

No

Meta Llama 2 e Llama 3

No

No

No

Meta Llama 3.1

No

No

Mistral AI Instruct

No

No

No

No

Mistral Large

No

No

Mistral Large 2 (24.07)

No

No

Mistral Small No No No
Nota

Cohere Command (Testo) e AI21 Labs Jurassic-2 (Testo) non supporta la chat con Converse. API I modelli possono gestire un solo messaggio utente alla volta e non possono mantenere la cronologia di una conversazione. Viene visualizzato un errore se si tenta di trasmettere più di un messaggio.

Usare Converse API

Per utilizzare ConverseAPI, si chiamano le ConverseStream operazioni Converse or per inviare messaggi a una modella. Per chiamareConverse, è necessaria l'autorizzazione per l'bedrock:InvokeModeloperazione. Per chiamareConverseStream, è necessaria l'autorizzazione per l'bedrock:InvokeModelWithResponseStreamoperazione.

Richiesta

È possibile specificare il modello che si desidera utilizzare impostando il modelId campo. Per un elenco dei modelli IDs supportati da Amazon Bedrock, consultaModello Amazon Bedrock IDs.

Una conversazione è una serie di messaggi tra l'utente e il modello. Si avvia una conversazione inviando un messaggio come utente (ruolo utente) al modello. Il modello, che funge da assistente (ruolo di assistente), genera quindi una risposta che restituisce in un messaggio. Se lo desideri, puoi continuare la conversazione inviando altri messaggi sul ruolo utente al modello. Per mantenere il contesto della conversazione, assicuratevi di includere tutti i messaggi relativi al ruolo di assistente che ricevete dal modello nelle richieste successive. Per il codice di esempio, consulta Esempi di converse API.

I messaggi che desideri passare a un modello vengono forniti messages sul campo, che viene mappato a una matrice di oggetti Message. Ogni messaggio contiene il contenuto del messaggio e il ruolo che il messaggio svolge nella conversazione.

Nota

Amazon Bedrock non memorizza testo, immagini o documenti che fornisci come contenuto. I dati vengono utilizzati solo per generare la risposta. Quando si utilizza ConverseAPI, è necessario utilizzare un documento non compresso e decodificato di dimensioni inferiori a 4,5 MB.

Il contenuto del messaggio viene memorizzato nel content campo, che corrisponde a una serie di oggetti. ContentBlock All'interno di ciascuno ContentBlock, puoi specificare uno dei seguenti campi (per vedere quali modelli supportano quali modalità, vediModelli e caratteristiche del modello supportati):

text

Il text campo viene mappato su una stringa che specifica il prompt. Il text campo viene interpretato insieme ad altri campi specificati nello stesso. ContentBlock

Quanto segue mostra un oggetto Message con una content matrice contenente solo un testo ContentBlock:

{ "role": "user | assistant", "content": [ { "text": "string" } ] }
image

Il image campo è mappato su un ImageBlock. Passa i byte non elaborati, codificati in base64, per un'immagine nel campo. bytes Se usi un AWS SDK, non è necessario codificare i byte in base64.

Se si esclude il text campo, il modello descriverà l'immagine.

Quanto segue mostra un oggetto Message con un content array contenente solo un'immagine: ContentBlock

{ "role": "user", "content": [ { "image": { "format": "png | jpeg | gif | webp", "source": { "bytes": "image in bytes" } } } ] }
document

Il document campo è mappato su un. DocumentBlock Se includi unDocumentBlock, verifica che la tua richiesta sia conforme alle seguenti restrizioni:

  • Nel content campo dell'oggetto Message, devi includere anche un text campo con un prompt relativo al documento.

  • Passate i byte non elaborati, codificati in base64, per il documento nel campo. bytes Se usi un AWS SDK, non è necessario codificare i byte del documento in base64.

  • Il name campo può contenere solo i seguenti caratteri:

    • Caratteri alfanumerici

    • Caratteri di spaziatura (non più di uno di seguito)

    • Trattini

    • Parentesi

    • Parentesi quadre

    Nota

    Il name campo è vulnerabile alle iniezioni tempestive, perché il modello potrebbe inavvertitamente interpretarlo come istruzioni. Pertanto, si consiglia di specificare un nome neutro.

Quanto segue mostra un oggetto Message con una content matrice contenente solo un documento ContentBlocke un testo ContentBlockdi accompagnamento obbligatorio.

{ "role": "user", "content": [ { "text": "string" }, { "document": { "format": "pdf | csv | doc | docx | xls | xlsx | html | txt | md", "name": "string", "source": { "bytes": "document in bytes" } } } ] }

Gli altri campi ContentBlock sono destinati all'uso degli strumenti.

Specificate il ruolo nel role campo. Il ruolo può essere uno dei seguenti:

  • utente: l'essere umano che invia messaggi al modello.

  • assistente: il modello che invia messaggi all'utente umano.

Nota

Le seguenti restrizioni riguardano il content campo:

  • Puoi includere fino a 20 immagini. Le dimensioni, l'altezza e la larghezza di ogni immagine non devono superare rispettivamente 3,75 MB, 8.000 px e 8.000 px.

  • Puoi includere fino a cinque documenti. Le dimensioni di ogni documento non devono superare i 4,5 MB.

  • Puoi includere immagini e documenti solo se lo role èuser.

Nell'messagesesempio seguente, l'utente richiede un elenco di tre brani pop e il modello genera un elenco di brani.

[ { "role": "user", "content": [ { "text": "Create a list of 3 pop songs." } ] }, { "role": "assistant", "content": [ { "text": "Here is a list of 3 pop songs by artists from the United Kingdom:\n\n1. \"As It Was\" by Harry Styles\n2. \"Easy On Me\" by Adele\n3. \"Unholy\" by Sam Smith and Kim Petras" } ] } ]

Un prompt di sistema è un tipo di prompt che fornisce istruzioni o contesto al modello sull'attività che deve svolgere o sul personaggio che deve assumere durante la conversazione. È possibile specificare un elenco di prompt di sistema per la richiesta nel campo system (SystemContentBlock), come illustrato nell'esempio seguente.

[ { "text": "You are an app that creates playlists for a radio station that plays rock and pop music. Only return song names and the artist. " } ]

Parametri di inferenza

Converse API supporta un set base di parametri di inferenza impostati nel campo (). inferenceConfig InferenceConfiguration Il set base di parametri di inferenza è:

  • maxTokens— Il numero massimo di token da consentire nella risposta generata.

  • stopSequences— Un elenco di sequenze di interruzioni. Una sequenza di interruzioni è una sequenza di caratteri che causa l'interruzione della generazione della risposta da parte del modello.

  • temperatura — La probabilità che il modello selezioni opzioni a maggiore probabilità durante la generazione di una risposta.

  • TopP: la percentuale di candidati più probabili che il modello considera per il token successivo.

Per ulteriori informazioni, consulta Influenza la generazione della risposta con parametri di inferenza.

L'esempio seguente JSON imposta il parametro di inferenza. temperature

{"temperature": 0.5}

Se il modello che state utilizzando ha parametri di inferenza aggiuntivi, potete impostare tali parametri specificandoli come JSON nel campo. additionalModelRequestFields L'esempio seguente JSON mostra come impostaretop_k, che è disponibile in Anthropic Claude modelli, ma non è un parametro di inferenza di base nei messaggiAPI.

{"top_k": 200}

È possibile specificare i percorsi per i parametri aggiuntivi del modello nel additionalModelResponseFieldPaths campo, come illustrato nell'esempio seguente.

[ "/stop_sequence" ]

APIRestituisce i campi aggiuntivi richiesti nel additionalModelResponseFields campo.

Risposta

La risposta che ricevi da Converse API dipende dall'operazione che chiami Converse oConverseStream.

Risposta Converse

Nel modulo di rispostaConverse, il output campo (ConverseOutput) contiene il messaggio (Message) generato dal modello. Il contenuto del messaggio si trova nel campo content (ContentBlock) e il ruolo (useroassistant) a cui corrisponde il messaggio è nel role campo.

Il metrics campo (ConverseMetrics) include le metriche per la chiamata. Per determinare il motivo per cui il modello ha smesso di generare contenuti, controlla il stopReason campo. Puoi ottenere informazioni sui token passati al modello nella richiesta e sui token generati nella risposta controllando il usage campo () TokenUsage. Se hai specificato campi di risposta aggiuntivi nella richiesta, li API restituisce come JSON nel additionalModelResponseFields campo.

L'esempio seguente mostra la risposta ottenuta Converse quando si passa il prompt discusso inRichiesta.

{ "output": { "message": { "role": "assistant", "content": [ { "text": "Here is a list of 3 pop songs by artists from the United Kingdom:\n\n1. \"Wannabe\" by Spice Girls\n2. \"Bitter Sweet Symphony\" by The Verve \n3. \"Don't Look Back in Anger\" by Oasis" } ] } }, "stopReason": "end_turn", "usage": { "inputTokens": 125, "outputTokens": 60, "totalTokens": 185 }, "metrics": { "latencyMs": 1175 } }

ConverseStream risposta

Se chiami ConverseStream per trasmettere in streaming la risposta da un modello, il flusso viene restituito nel campo di stream risposta. Lo stream emette i seguenti eventi nell'ordine seguente.

  1. messageStart(MessageStartEvent). L'evento di inizio di un messaggio. Include il ruolo del messaggio.

  2. contentBlockStart(ContentBlockStartEvent). Un evento di avvio del blocco di contenuto. Solo uso dello strumento.

  3. contentBlockDelta(ContentBlockDeltaEvent). Un evento delta del blocco di contenuto. Include il testo parziale generato dal modello o l'input json parziale per l'uso dello strumento.

  4. contentBlockStop(ContentBlockStopEvent). Un evento Content Block Stop.

  5. messageStop(MessageStopEvent). L'evento di interruzione del messaggio. Include il motivo per cui il modello ha smesso di generare output.

  6. metadata(ConverseStreamMetadataEvent). Metadati per la richiesta. I metadati includono l'utilizzo del token in usage (TokenUsage) e le metriche per la chiamata in metrics (). ConverseStreamMetadataEvent

ConverseStream trasmette un blocco di contenuto completo come ContentBlockStartEvent evento, uno o più ContentBlockDeltaEvent eventi e un evento. ContentBlockStopEvent Usa il contentBlockIndex campo come indice per correlare gli eventi che compongono un blocco di contenuto.

L'esempio seguente è una risposta parziale diConverseStream.

{'messageStart': {'role': 'assistant'}} {'contentBlockDelta': {'delta': {'text': ''}, 'contentBlockIndex': 0}} {'contentBlockDelta': {'delta': {'text': ' Title'}, 'contentBlockIndex': 0}} {'contentBlockDelta': {'delta': {'text': ':'}, 'contentBlockIndex': 0}} . . . {'contentBlockDelta': {'delta': {'text': ' The'}, 'contentBlockIndex': 0}} {'messageStop': {'stopReason': 'max_tokens'}} {'metadata': {'usage': {'inputTokens': 47, 'outputTokens': 20, 'totalTokens': 67}, 'metrics': {'latencyMs': 100.0}}}

Esempi di converse API

Gli esempi seguenti mostrano come utilizzare le ConverseStream operazioni Converse and.

Argomenti
    Conversation with text message example

    In questo esempio viene illustrato come richiamare l'Converseoperazione con Anthropic Claude 3 Sonnetmodello. L'esempio mostra come inviare il testo di input, i parametri di inferenza e i parametri aggiuntivi che sono unici per il modello. Il codice avvia una conversazione chiedendo al modello di creare un elenco di brani. Quindi continua la conversazione chiedendo che le canzoni siano di artisti del Regno Unito.

    # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Shows how to use the Converse API with Anthropic Claude 3 Sonnet (on demand). """ import logging import boto3 from botocore.exceptions import ClientError logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) def generate_conversation(bedrock_client, model_id, system_prompts, messages): """ Sends messages to a model. Args: bedrock_client: The Boto3 Bedrock runtime client. model_id (str): The model ID to use. system_prompts (JSON) : The system prompts for the model to use. messages (JSON) : The messages to send to the model. Returns: response (JSON): The conversation that the model generated. """ logger.info("Generating message with model %s", model_id) # Inference parameters to use. temperature = 0.5 top_k = 200 # Base inference parameters to use. inference_config = {"temperature": temperature} # Additional inference parameters to use. additional_model_fields = {"top_k": top_k} # Send the message. response = bedrock_client.converse( modelId=model_id, messages=messages, system=system_prompts, inferenceConfig=inference_config, additionalModelRequestFields=additional_model_fields ) # Log token usage. token_usage = response['usage'] logger.info("Input tokens: %s", token_usage['inputTokens']) logger.info("Output tokens: %s", token_usage['outputTokens']) logger.info("Total tokens: %s", token_usage['totalTokens']) logger.info("Stop reason: %s", response['stopReason']) return response def main(): """ Entrypoint for Anthropic Claude 3 Sonnet example. """ logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") model_id = "anthropic.claude-3-sonnet-20240229-v1:0" # Setup the system prompts and messages to send to the model. system_prompts = [{"text": "You are an app that creates playlists for a radio station that plays rock and pop music." "Only return song names and the artist."}] message_1 = { "role": "user", "content": [{"text": "Create a list of 3 pop songs."}] } message_2 = { "role": "user", "content": [{"text": "Make sure the songs are by artists from the United Kingdom."}] } messages = [] try: bedrock_client = boto3.client(service_name='bedrock-runtime') # Start the conversation with the 1st message. messages.append(message_1) response = generate_conversation( bedrock_client, model_id, system_prompts, messages) # Add the response message to the conversation. output_message = response['output']['message'] messages.append(output_message) # Continue the conversation with the 2nd message. messages.append(message_2) response = generate_conversation( bedrock_client, model_id, system_prompts, messages) output_message = response['output']['message'] messages.append(output_message) # Show the complete conversation. for message in messages: print(f"Role: {message['role']}") for content in message['content']: print(f"Text: {content['text']}") print() except ClientError as err: message = err.response['Error']['Message'] logger.error("A client error occurred: %s", message) print(f"A client error occured: {message}") else: print( f"Finished generating text with model {model_id}.") if __name__ == "__main__": main()
    Conversation with image example

    Questo esempio mostra come inviare un'immagine come parte di un messaggio e richiede che il modello descriva l'immagine. L'esempio utilizza Converse operation e Anthropic Claude 3 Sonnetmodello.

    # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Shows how to send an image with the Converse API to Anthropic Claude 3 Sonnet (on demand). """ import logging import boto3 from botocore.exceptions import ClientError logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) def generate_conversation(bedrock_client, model_id, input_text, input_image): """ Sends a message to a model. Args: bedrock_client: The Boto3 Bedrock runtime client. model_id (str): The model ID to use. input text : The input message. input_image : The input image. Returns: response (JSON): The conversation that the model generated. """ logger.info("Generating message with model %s", model_id) # Message to send. with open(input_image, "rb") as f: image = f.read() message = { "role": "user", "content": [ { "text": input_text }, { "image": { "format": 'png', "source": { "bytes": image } } } ] } messages = [message] # Send the message. response = bedrock_client.converse( modelId=model_id, messages=messages ) return response def main(): """ Entrypoint for Anthropic Claude 3 Sonnet example. """ logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") model_id = "anthropic.claude-3-sonnet-20240229-v1:0" input_text = "What's in this image?" input_image = "path/to/image" try: bedrock_client = boto3.client(service_name="bedrock-runtime") response = generate_conversation( bedrock_client, model_id, input_text, input_image) output_message = response['output']['message'] print(f"Role: {output_message['role']}") for content in output_message['content']: print(f"Text: {content['text']}") token_usage = response['usage'] print(f"Input tokens: {token_usage['inputTokens']}") print(f"Output tokens: {token_usage['outputTokens']}") print(f"Total tokens: {token_usage['totalTokens']}") print(f"Stop reason: {response['stopReason']}") except ClientError as err: message = err.response['Error']['Message'] logger.error("A client error occurred: %s", message) print(f"A client error occured: {message}") else: print( f"Finished generating text with model {model_id}.") if __name__ == "__main__": main()
    Conversation with document example

    Questo esempio mostra come inviare un documento come parte di un messaggio e richiede che il modello descriva il contenuto del documento. L'esempio utilizza Converse operation e Anthropic Claude 3 Sonnetmodello.

    # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Shows how to send an document as part of a message to Anthropic Claude 3 Sonnet (on demand). """ import logging import boto3 from botocore.exceptions import ClientError logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) def generate_message(bedrock_client, model_id, input_text, input_document): """ Sends a message to a model. Args: bedrock_client: The Boto3 Bedrock runtime client. model_id (str): The model ID to use. input text : The input message. input_document : The input document. Returns: response (JSON): The conversation that the model generated. """ logger.info("Generating message with model %s", model_id) # Message to send. message = { "role": "user", "content": [ { "text": input_text }, { "document": { "name": "MyDocument", "format": "txt", "source": { "bytes": input_document } } } ] } messages = [message] # Send the message. response = bedrock_client.converse( modelId=model_id, messages=messages ) return response def main(): """ Entrypoint for Anthropic Claude 3 Sonnet example. """ logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") model_id = "anthropic.claude-3-sonnet-20240229-v1:0" input_text = "What's in this document?" input_document = 'path/to/document.pdf' try: bedrock_client = boto3.client(service_name="bedrock-runtime") response = generate_message( bedrock_client, model_id, input_text, input_document) output_message = response['output']['message'] print(f"Role: {output_message['role']}") for content in output_message['content']: print(f"Text: {content['text']}") token_usage = response['usage'] print(f"Input tokens: {token_usage['inputTokens']}") print(f"Output tokens: {token_usage['outputTokens']}") print(f"Total tokens: {token_usage['totalTokens']}") print(f"Stop reason: {response['stopReason']}") except ClientError as err: message = err.response['Error']['Message'] logger.error("A client error occurred: %s", message) print(f"A client error occured: {message}") else: print( f"Finished generating text with model {model_id}.") if __name__ == "__main__": main()
    Conversation streaming example

    Questo esempio mostra come richiamare l'ConverseStreamoperazione con Anthropic Claude 3 Sonnetmodello. L'esempio mostra come inviare il testo di input, i parametri di inferenza e i parametri aggiuntivi che sono unici per il modello.

    # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Shows how to use the Converse API to stream a response from Anthropic Claude 3 Sonnet (on demand). """ import logging import boto3 from botocore.exceptions import ClientError logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) def stream_conversation(bedrock_client, model_id, messages, system_prompts, inference_config, additional_model_fields): """ Sends messages to a model and streams the response. Args: bedrock_client: The Boto3 Bedrock runtime client. model_id (str): The model ID to use. messages (JSON) : The messages to send. system_prompts (JSON) : The system prompts to send. inference_config (JSON) : The inference configuration to use. additional_model_fields (JSON) : Additional model fields to use. Returns: Nothing. """ logger.info("Streaming messages with model %s", model_id) response = bedrock_client.converse_stream( modelId=model_id, messages=messages, system=system_prompts, inferenceConfig=inference_config, additionalModelRequestFields=additional_model_fields ) stream = response.get('stream') if stream: for event in stream: if 'messageStart' in event: print(f"\nRole: {event['messageStart']['role']}") if 'contentBlockDelta' in event: print(event['contentBlockDelta']['delta']['text'], end="") if 'messageStop' in event: print(f"\nStop reason: {event['messageStop']['stopReason']}") if 'metadata' in event: metadata = event['metadata'] if 'usage' in metadata: print("\nToken usage") print(f"Input tokens: {metadata['usage']['inputTokens']}") print( f":Output tokens: {metadata['usage']['outputTokens']}") print(f":Total tokens: {metadata['usage']['totalTokens']}") if 'metrics' in event['metadata']: print( f"Latency: {metadata['metrics']['latencyMs']} milliseconds") def main(): """ Entrypoint for streaming message API response example. """ logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") model_id = "anthropic.claude-3-sonnet-20240229-v1:0" system_prompt = """You are an app that creates playlists for a radio station that plays rock and pop music. Only return song names and the artist.""" # Message to send to the model. input_text = "Create a list of 3 pop songs." message = { "role": "user", "content": [{"text": input_text}] } messages = [message] # System prompts. system_prompts = [{"text" : system_prompt}] # inference parameters to use. temperature = 0.5 top_k = 200 # Base inference parameters. inference_config = { "temperature": temperature } # Additional model inference parameters. additional_model_fields = {"top_k": top_k} try: bedrock_client = boto3.client(service_name='bedrock-runtime') stream_conversation(bedrock_client, model_id, messages, system_prompts, inference_config, additional_model_fields) 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 streaming messages with model {model_id}.") if __name__ == "__main__": main()