Utilizzo dell’API 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à.

Utilizzo dell’API Converse

Per utilizzare l’API Converse, vengono chiamate le operazioni Converse o ConverseStream per inviare messaggi a un modello. Per chiamare Converse, è richiesta l’autorizzazione per l’operazione bedrock:InvokeModel. Per chiamare ConverseStream, è richiesta l’autorizzazione per l’operazione bedrock:InvokeModelWithResponseStream.

Richiesta

Quando si effettua una richiesta Converse con un endpoint di runtime Amazon Bedrock, è possibile includere i seguenti campi:

  • modelId: parametro obbligatorio nell’intestazione che consente di specificare la risorsa da utilizzare per l’inferenza.

  • I seguenti campi consentono di personalizzare il prompt:

    • messages: consente di specificare il contenuto e il ruolo dei prompt.

    • system: consente di specificare i prompt di sistema che definiscono le istruzioni o il contesto per il modello.

    • inferenceConfig: consente di specificare i parametri di inferenza comuni a tutti i modelli. Parametri di inferenza che influenzano la generazione della risposta.

    • additionalModelRequestCampi: da utilizzare per specificare i parametri di inferenza specifici del modello con cui si esegue l'inferenza.

    • promptVariables (se si utilizza un prompt di Gestione prompt): consente di definire le variabili da usare nel prompt e i valori da assegnarvi.

  • I seguenti campi consentono di personalizzare la modalità di restituzione della risposta:

    • guardrailConfig: consente di includere un guardrail da applicare all’intero prompt.

    • toolConfig: consente di includere uno strumento che aiuti un modello a generare risposte.

    • additionalModelResponseFieldPaths— Utilizzate questo campo per specificare i campi da restituire come oggetto puntatore JSON.

    • ServiceTier: utilizzare questo campo per specificare il livello di servizio per una particolare richiesta

  • requestMetadata: consente di includere metadati che si possono filtrare quando si utilizzano log di invocazione.

Nota

Le seguenti restrizioni si applicano quando si utilizza un prompt di Gestione prompt con Converse o ConverseStream:

  • Non è possibile includere i campi additionalModelRequestFields, inferenceConfig, system o toolConfig.

  • Se si include il campo messages, i messaggi vengono aggiunti dopo i messaggi definiti nel prompt.

  • Se si include il campo guardrailConfig, il guardrail viene applicato all’intero prompt. Se includi guardContent blocchi nel ContentBlockcampo, il guardrail verrà applicato solo a quei blocchi.

Per ulteriori informazioni su una campo nel corpo della richiesta Converse, espandi la sezione corrispondente:

Il campo messages è un array di oggetti Message, ciascuno dei quali definisce un messaggio tra l’utente e il modello. Un oggetto Message contiene i campi seguenti:

  • role: definisce se il messaggio proviene da user (prompt inviato al modello) o assistant (risposta del modello).

  • content: definisce il contenuto del prompt.

    Nota

    Amazon Bedrock non archivia testo, immagini o documenti forniti dall’utente come contenuto. I dati vengono utilizzati solo per generare la risposta.

È possibile mantenere il contesto della conversazione includendone tutti i messaggi nelle richieste Converse successive e utilizzando il campo role per specificare se il messaggio proviene dall’utente o dal modello.

Il content campo è mappato su una serie di ContentBlockoggetti. All'interno di ciascuno ContentBlock, puoi specificare uno dei seguenti campi (per vedere quali modelli supportano quali blocchi, vediModelli e funzionalità del modello supportati):

text

Il campo text viene mappato a 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", "content": [ { "text": "string" } ] }
image

Il image campo è mappato su un ImageBlock. Passa i byte non elaborati, con codifica base64, per un’immagine nel campo bytes. Se si utilizza un AWS SDK, non è necessario codificare i byte in base64.

Se si esclude il campo text, il modello descrive l’immagine.

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

{ "role": "user", "content": [ { "image": { "format": "png", "source": { "bytes": "image in bytes" } } } ] }

È anche possibile specificare un URI Amazon S3 anziché passare i byte direttamente nel corpo della richiesta. Di seguito viene mostrato un oggetto Message di esempio con un array di contenuti in cui è inclusa l’origine passata tramite un URI Amazon S3.

{ "role": "user", "content": [ { "image": { "format": "png", "source": { "s3Location": { "uri": "s3://amzn-s3-demo-bucket/myImage", "bucketOwner": "111122223333" } } } } ] }
document

Il document campo è mappato su un DocumentBlock. Se si include un oggetto DocumentBlock, verificare che la richiesta sia conforme alle seguenti restrizioni:

  • Nel campo content dell’oggetto Message, è necessario includere anche un campo text con un prompt relativo al documento.

  • Passa i byte non elaborati, con codifica base64, per il documento nel campo bytes. Se utilizzi un SDK AWS, non è necessario utilizzare la codifica base64 per i byte.

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

    • Caratteri alfanumerici

    • Caratteri di spaziatura (non più di uno in una stessa riga)

    • Trattini

    • Parentesi

    • Parentesi quadre

    Nota

    Il campo name è vulnerabile alle iniezioni di prompt, poiché il modello potrebbe inavvertitamente interpretarle come istruzioni. Pertanto, consigliamo di specificare un nome neutro.

Quando si utilizza un documento, è possibile abilitare il tag citations, che fornisce citazioni specifiche del documento nella risposta alla chiamata API. Consulta l'DocumentBlockAPI per maggiori dettagli.

Quanto segue mostra un oggetto Message di esempio con un content array contenente solo un documento ContentBlocke un testo ContentBlockdi accompagnamento obbligatorio.

{ "role": "user", "content": [ { "text": "string" }, { "document": { "format": "pdf", "name": "MyDocument", "source": { "bytes": "document in bytes" } } } ] }

È anche possibile specificare un URI Amazon S3 anziché passare i byte direttamente nel corpo della richiesta. Di seguito viene mostrato un oggetto Message di esempio con un array di contenuti in cui è inclusa l’origine passata tramite un URI Amazon S3.

{ "role": "user", "content": [ { "text": "string" }, { "document": { "format": "pdf", "name": "MyDocument", "source": { "s3Location": { "uri": "s3://amzn-s3-demo-bucket/myDocument", "bucketOwner": "111122223333" } } } } ] }
video

Il video campo è mappato a un VideoBlockoggetto. Passa i byte non elaborati nel campo bytes con codifica base64. Se si utilizza l'AWSSDK, non è necessario codificare i byte in base64.

Se non si include il campo text, il modello descrive il video.

Quanto segue mostra un oggetto Message di esempio con un content array contenente solo un video. ContentBlock

{ "role": "user", "content": [ { "video": { "format": "mp4", "source": { "bytes": "video in bytes" } } } ] }

È anche possibile specificare un URI Amazon S3 anziché passare i byte direttamente nel corpo della richiesta. Di seguito viene mostrato un oggetto Message di esempio con un array di contenuti in cui è inclusa l’origine passata tramite un URI Amazon S3.

{ "role": "user", "content": [ { "video": { "format": "mp4", "source": { "s3Location": { "uri": "s3://amzn-s3-demo-bucket/myVideo", "bucketOwner": "111122223333" } } } } ] }
Nota

Il ruolo assunto deve disporre dell’autorizzazione s3:GetObject per l’URI Amazon S3. Il campo bucketOwner è facoltativo, ma è necessario specificare se l’account che effettua la richiesta non possiede il bucket in cui si trova l’URI Amazon S3. Per ulteriori informazioni, consulta Configurare l’accesso a bucket Amazon S3.

cachePoint

È possibile aggiungere punti di controllo della cache come blocco in un messaggio insieme a un prompt associato tramite i campi cachePoint per utilizzare il caching dei prompt. Il caching dei prompt è una funzionalità che consente di iniziare a memorizzare nella cache il contesto delle conversazioni per ottenere risparmi in termini di costi e latenza. Per ulteriori informazioni, consulta Caching dei prompt per un’inferenza del modello più rapida.

Di seguito viene illustrato un oggetto Message di esempio con un content array contenente un documento ContentBlocke il testo di accompagnamento obbligatorio ContentBlock, nonché un CachePoint che aggiunge sia il contenuto del documento che quello del testo alla cache.

{ "role": "user", "content": [ { "text": "string" }, { "document": { "format": "pdf", "name": "string", "source": { "bytes": "document in bytes" } } }, { "cachePoint": { "type": "default" } } ] }
guardContent

Il guardContent campo è mappato a un oggetto. GuardrailConverseContentBlock È possibile utilizzare questo campo per specificare un input che deve essere valutato dal guardrail definito nel campo guardrailConfig. Se non si specifica questo campo, il guardrail valuta tutti i messaggi nel corpo della richiesta. In un oggetto GuardBlock, si possono passare i seguenti tipi di contenuto:

  • text — Quanto segue mostra un esempio di oggetto Message con un content array contenente solo un testo GuardrailConverseContentBlock:

    { "role": "user", "content": [ { "text": "Tell me what stocks to buy.", "qualifiers": [ "guard_content" ] } ] }

    Si definisce il testo da valutare e si includono i qualificatori da utilizzare per la correlazione contestuale.

  • image — Quanto segue mostra un oggetto Message con un content array contenente solo un'immagine GuardrailConverseContentBlock:

    { "role": "user", "content": [ { "format": "png", "source": { "bytes": "image in bytes" } } ] }

    Si specifica il formato dell’immagine e si definisce l’immagine in byte.

Per ulteriori informazioni sull’utilizzo dei guardrail, consulta Rilevare e filtrare contenuti dannosi utilizzando Guardrail per Amazon Bedrock.

reasoningContent

Il reasoningContent campo è mappato su un ReasoningContentBlock. Questo blocco include contenuti riguardanti il ragionamento che è stato eseguito dal modello per generare la risposta nell’oggetto ContentBlock associato.

Di seguito viene mostrato un oggetto Message con un array content contenente solo un oggetto ReasoningContentBlock e un oggetto ContentBlock testo associato.

{ "role": "user", "content": [ { "text": "string" }, { "reasoningContent": { "reasoningText": { "text": "string", "signature": "string" } "redactedContent": "base64-encoded binary data object" } } ] }

L’oggetto ReasoningContentBlock contiene il ragionamento utilizzato per generare il contenuto associato nel campo reasoningText, oltre a qualsiasi contenuto del ragionamento crittografato dal provider del modello per motivi di affidabilità e sicurezza nel campo redactedContent.

Nel campo reasoningText, i campi text descrivono il ragionamento. Il campo signature è un hash di tutti i messaggi della conversazione ed è una protezione contro la manomissione del ragionamento utilizzato dal modello. È necessario includere la firma e tutti i messaggi precedenti nelle richieste Converse successive. Se uno qualsiasi dei messaggi viene modificato, la risposta genera un errore.

toolUse

Contiene informazioni su uno strumento che il modello può utilizzare. Per ulteriori informazioni, consulta Utilizzo di uno strumento per completare una risposta al modello Amazon Bedrock.

toolResult

Contiene informazioni sul risultato ottenuto dal modello con l’utilizzo di uno strumento. Per ulteriori informazioni, consulta Utilizzo di uno strumento per completare una risposta al modello Amazon Bedrock.

Nota

Le seguenti restrizioni riguardano il campo content:

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

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

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

Nell’esempio messages 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 eseguire o sulla persona che dovrebbe adottare 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 play lists for a radio station that plays rock and pop music. Only return song names and the artist. " } ]

L'ConverseAPI supporta un set base di parametri di inferenza impostati nel inferenceConfig campo (). InferenceConfiguration I parametri di inferenza inclusi nel set di base sono i seguenti:

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

  • stopSequences: elenco di sequenze di arresto. Una sequenza di arresto è una sequenza di caratteri che determina l’interruzione della generazione della risposta da parte del modello.

  • temperature: probabilità che il modello selezioni opzioni con maggiore probabilità durante la generazione di una risposta.

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

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

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

{"temperature": 0.5}

Se il modello in uso ha parametri di inferenza aggiuntivi, è possibile impostare tali parametri specificandoli come elementi JSON nel campo additionalModelRequestFields. L’esempio JSON seguente mostra come impostare top_k, disponibile nei modelli Anthropic Claude, ma non è un parametro di inferenza di base nell’API Messages.

{"top_k": 200}

Se si specifica un prompt di Gestione prompt in modelId come risorsa su cui eseguire l’inferenza, è possibile utilizzare questo campo per assegnare i valori effettivi alle variabili dei prompt. Il campo promptVariables è mappato a un oggetto JSON con chiavi che corrispondono alle variabili definite nei prompt e ai valori con cui sostituire le variabili.

Supponiamo ad esempio che sia presente un prompt che dice Make me a {{genre}} playlist consisting of the following number of songs: {{number}}. L’ID del prompt è PROMPT12345 e la sua versione è 1. È possibile inviare la seguente richiesta Converse per sostituire le variabili:

POST /model/arn:aws:bedrock:us-east-1:111122223333:prompt/PROMPT12345:1/converse HTTP/1.1 Content-type: application/json { "promptVariables": { "genre" : "pop", "number": 3 } }

È possibile applicare un guardrail creato con Guardrail per Amazon Bedrock includendo questo campo. Per applicare il guardrail a un messaggio specifico della conversazione, includi il messaggio in un. GuardrailConverseContentBlock Se non si include alcun oggetto GuardrailConverseContentBlock nel corpo della richiesta, il guardrail viene applicato a tutti i messaggi nel campo messages. Per vedere un esempio, consulta Includere un guardrail con l’API Converse.

Questo campo consente di definire uno strumento che il modello può utilizzare per generare una risposta. Per ulteriori informazioni, consulta Utilizzo di uno strumento per completare una risposta al modello Amazon Bedrock.

Si può anche specificare i percorsi per i parametri aggiuntivi del modello nel campo additionalModelResponseFieldPaths, come illustrato nell’esempio seguente:

[ "/stop_sequence" ]

L’API restituisce i campi aggiuntivi richiesti nel campo additionalModelResponseFields.

Questo campo è mappato a un oggetto JSON. È possibile specificare le chiavi e i valori dei metadati a cui eseguire il mapping all’interno dell’oggetto. È possibile utilizzare i metadati di richiesta per filtrare i log di invocazione del modello.

Questo campo è mappato a un oggetto JSON. È possibile specificare il livello di servizio per una richiesta particolare.

L'esempio seguente mostra la serviceTier struttura:

"serviceTier": { "type": "reserved" | "priority" | "default" | "flex" }

Per informazioni dettagliate sui livelli di servizio, inclusi prezzi e caratteristiche prestazionali, vedereLivelli di servizio per l'ottimizzazione delle prestazioni e dei costi.

È anche possibile aggiungere, facoltativamente, punti di controllo della cache ai campi tools o system per utilizzare il caching dei prompt, a seconda del modello in uso. Per ulteriori informazioni, consulta Caching dei prompt per un’inferenza del modello più rapida.

Risposta

La risposta ricevuta dall’API Converse dipende dall’operazione chiamata, Converse o ConverseStream.

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.

Se è stato utilizzato il caching dei prompt, nel campo di utilizzo cacheReadInputTokensCount e cacheWriteInputTokensCount indicano quanti token totali sono stati letti e scritti dalla e nella cache, rispettivamente.

Se hai utilizzato i livelli di servizio, nel campo di risposta, ti service tier diremo quale livello di servizio è stato utilizzato per la richiesta.

Il metrics campo (ConverseMetrics) include le metriche per la chiamata. Per determinare il motivo per cui il modello ha interrotto la generazione di contenuto, controlla il campo stopReason. È possibile ottenere informazioni sui token passati al modello nella richiesta e sui token generati nella risposta controllando il usage campo (). TokenUsage Se sono stati specificati campi di risposta aggiuntivi nella richiesta, l’API li restituisce come elementi JSON nel campo additionalModelResponseFields.

L’esempio seguente mostra la risposta ottenuta da Converse quando si passa il prompt discusso in Richiesta.

{ "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 si chiama ConverseStream per trasmettere in streaming la risposta da un modello, il flusso viene restituito nel campo stream della risposta. Il flusso invia gli eventi seguenti nell’ordine indicato.

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

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

  3. contentBlockDelta(ContentBlockDeltaEvent). Un evento delta del blocco di contenuto. Include uno degli elementi seguenti:

    • text: testo parziale generato dal modello.

    • reasoningContent: ragionamento parziale eseguito dal modello per generare la risposta. È necessario inviare l’oggetto signature restituito, oltre a tutti i messaggi precedenti nelle richieste Converse successive. Se uno qualsiasi dei messaggi viene modificato, la risposta genera un errore.

    • toolUse: oggetto JSON di input parziale per l’utilizzo 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 interrotto la generazione di 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 Utilizza il campo contentBlockIndex come indice per correlare gli eventi che compongono un blocco di contenuto.

Di seguito è mostrato un esempio di risposta parziale di ConverseStream.

{'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}}}