Usar a API Converse - Amazon Bedrock

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usar a API Converse

Para usar a API Converse, você chama as operações ConverseStream ou Converse para enviar mensagens a um modelo. Para chamar Converse, é necessário ter a permissão para a operação bedrock:InvokeModel. Para chamar ConverseStream, é necessário ter a permissão para a operação bedrock:InvokeModelWithResponseStream.

Solicitação

Ao fazer uma solicitação Converse com um endpoint de runtime do Amazon Bedrock, você pode incluir os seguintes campos:

  • modelId: um parâmetro obrigatório no cabeçalho que permite especificar o recurso a ser usado para inferência.

  • Os seguintes campos permitem que você personalize o prompt:

    • messages: use para especificar o conteúdo e a função dos prompts.

    • system: use para especificar prompts do sistema, que definem instruções ou contexto para o modelo.

    • inferenceConfig: use para especificar parâmetros de inferência que são comuns a todos os modelos. Os parâmetro de inferência influenciam a geração da resposta.

    • additionalModelRequestCampos — Use para especificar parâmetros de inferência específicos do modelo com o qual você executa a inferência.

    • promptVariables: (se você usar um prompt do Gerenciamento de Prompts) use esse campo para definir as variáveis no prompt a serem preenchidas e os valores com os quais preenchê-las.

  • Os campos a seguir permitem que você personalize como a resposta é exibida:

    • guardrailConfig: use esse campo para incluir uma barreira de proteção a ser aplicada a todo o prompt.

    • toolConfig: use esse campo para incluir uma ferramenta para ajudar um modelo a gerar respostas.

    • additionalModelResponseFieldPaths— Use esse campo para especificar campos a serem retornados como um objeto ponteiro JSON.

    • ServiceTier — Use esse campo para especificar o nível de serviço para uma solicitação específica.

  • requestMetadata: use esse campo para incluir metadados que podem ser filtrados ao usar logs de invocação.

nota

As seguintes restrições se aplicam quando você usa um prompt do Gerenciamento de Prompts com Converse ou ConverseStream:

  • Não é possível incluir os campos additionalModelRequestFields, inferenceConfig, system ou toolConfig.

  • Se você incluir o campo messages, as mensagens serão anexadas após as mensagens definidas no prompt.

  • Se você incluir o campo guardrailConfig, a barreira de proteção será aplicada a todo o prompt. Se você incluir guardContent blocos no ContentBlockcampo, a grade de proteção só será aplicada a esses blocos.

Expanda uma seção para saber mais sobre um campo no corpo da solicitação Converse:

O campo messages é uma matriz de objetos Message em que cada um define uma mensagem entre o usuário e o modelo. Um objeto Message contém os seguintes campos:

  • role: define se a mensagem é de user (o prompt enviado ao modelo) ou de assistant (a resposta do modelo).

  • content: define o conteúdo no prompt.

    nota

    O Amazon Bedrock não armazena nenhum texto, imagem ou documento que você forneça como conteúdo. Os dados são usados somente para gerar a resposta.

É possível manter o contexto da conversa incluindo todas as mensagens na conversa em solicitações Converse subsequentes e usando o campo role para especificar se a mensagem é do usuário ou do modelo.

O content campo é mapeado para uma matriz de ContentBlockobjetos. Em cada um ContentBlock, você pode especificar um dos seguintes campos (para ver quais modelos suportam quais blocos, consulteModelos compatíveis e recursos do modelo):

text

O campo text é associado a uma string que especifica o prompt. O text campo é interpretado junto com outros campos especificados no mesmo ContentBlock.

O seguinte mostra um objeto Message com uma content matriz contendo somente um texto ContentBlock:

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

O image campo é mapeado para um ImageBlock. Passe os bytes brutos, codificados em base64, para uma imagem no campo bytes. Se você usa um AWS SDK, não precisa codificar os bytes em base64.

Se você excluir o campo text, o modelo descreverá a imagem.

Veja a seguir um exemplo de objeto Message com uma content matriz contendo somente uma imagem ContentBlock:

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

Também é possível especificar um URI do Amazon S3 em vez de transmitir os bytes diretamente no corpo da solicitação. O exemplo a seguir mostra um objeto Message de amostra com uma matriz de conteúdo contendo a fonte transmitida por meio de um URI do Amazon S3.

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

O document campo é mapeado para um DocumentBlock. Se você incluir um DocumentBlock, verifique se a solicitação está em conformidade com as seguintes restrições:

  • No campo content do objeto Message, inclua também um campo text com um prompt relacionado ao documento.

  • Passe os bytes brutos, codificados em base64, para o documento no campo bytes. Se usar um SDK da AWS, não será necessário codificar os bytes do documento em base64.

  • O campo name pode conter somente os seguintes caracteres:

    • Caracteres alfanuméricos

    • Caracteres de espaço em branco (não mais do que um em uma linha)

    • Hifens

    • Parênteses

    • Colchetes

    nota

    O campo name é vulnerável a injeções de prompt, porque o modelo pode interpretá-lo como instruções de forma inadvertida. Por isso, é recomendável especificar um nome neutro.

Ao usar um documento, você pode habilitar a tag citations, que fornecerá citações específicas do documento na resposta da chamada de API. Consulte a DocumentBlockAPI para obter mais detalhes.

Veja a seguir um exemplo de objeto Message com uma content matriz contendo somente um documento ContentBlocke um texto ContentBlockde acompanhamento obrigatório.

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

Também é possível especificar um URI do Amazon S3 em vez de transmitir os bytes diretamente no corpo da solicitação. O exemplo a seguir mostra um objeto Message de amostra com uma matriz de conteúdo contendo a fonte transmitida por meio de um URI do Amazon S3.

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

O video campo é mapeado para um VideoBlockobjeto. Transmita os bytes brutos, codificados em base64, no campo bytes. Se você usa o AWS SDK, não precisa codificar os bytes em base64.

Se não incluir o campo text, o modelo descreverá o vídeo.

Veja a seguir um exemplo de objeto Message com uma content matriz contendo somente um vídeo ContentBlock.

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

Também é possível especificar um URI do Amazon S3 em vez de transmitir os bytes diretamente no corpo da solicitação. O exemplo a seguir mostra um objeto Message de amostra com uma matriz de conteúdo contendo a fonte transmitida por meio de um URI do Amazon S3.

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

O perfil assumido deve ter a permissão s3:GetObject para o URI do Amazon S3. O campo bucketOwner é opcional, mas deve ser especificado se a conta que faz a solicitação não for proprietária do bucket em que o URI do Amazon S3 foi encontrado. Para obter mais informações, consulte Configurar acesso para buckets do Amazon S3.

cachePoint

É possível adicionar pontos de verificação de cache como um bloco em uma mensagem ao lado de um prompt anexado usando campos cachePoint para utilizar o armazenamento em cache de prompts. O armazenamento em cache de prompts é um recurso que permite que você comece a armazenar em cache o contexto das conversas para reduzir os custos e a latência. Para obter mais informações, consulte Armazenamento em cache de prompts para agilizar a inferência do modelo.

Veja a seguir um exemplo de objeto Message com uma content matriz contendo um documento ContentBlocke um texto de acompanhamento obrigatório ContentBlock, bem como um CachePoint que adiciona o conteúdo do documento e do texto ao cache.

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

O guardContent campo é mapeado para um GuardrailConverseContentBlockobjeto. Você pode usar esse campo para direcionar uma entrada a ser avaliada pela barreira de proteção definida no campo guardrailConfig. Se você não especificar esse campo, a barreira de proteção avaliará todas as mensagens no corpo da solicitação. É possível transmitir os seguintes tipos de conteúdo em um GuardBlock:

  • texto — O seguinte mostra um exemplo de objeto Message com uma content matriz contendo somente um texto GuardrailConverseContentBlock:

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

    Você define o texto a ser avaliado e inclui quaisquer qualificadores a serem usados como base contextual.

  • imagem — O seguinte mostra um objeto Message com uma content matriz contendo somente uma imagem GuardrailConverseContentBlock:

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

    Você especifica o formato da imagem e define a imagem em bytes.

Para ter mais informações sobre como usar barreiras de proteção, consulte Detectar e filtrar conteúdo nocivo usando as Barreiras de Proteção do Amazon Bedrock.

reasoningContent

O reasoningContent campo é mapeado para um ReasoningContentBlock. Esse bloco contém conteúdo sobre o raciocínio que foi realizado pelo modelo para gerar a resposta no anexo ContentBlock.

O exemplo a seguir mostra um objeto Message com uma matriz content que contém somente um ReasoningContentBlock e um texto ContentBlock que o acompanha.

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

O ReasoningContentBlock contém o raciocínio usado para gerar o conteúdo anexo no campo reasoningText, além de qualquer conteúdo no raciocínio que tenha sido criptografado pelo fornecedor do modelo por motivos de confiança e segurança no campo redactedContent.

No campo reasoningText, os campos text descrevem o raciocínio. O campo signature, que é um hash de todas as mensagens da conversa, é uma proteção contra adulteração do raciocínio usado pelo modelo. Você deve incluir a assinatura e todas as mensagens anteriores nas solicitações Converse subsequentes. Se alguma das mensagens for alterada, a resposta gerará um erro.

toolUse

Contém informações sobre uma ferramenta para o modelo usar. Para obter mais informações, consulte Use uma ferramenta para concluir uma resposta do modelo do Amazon Bedrock.

toolResult

Contém informações sobre o resultado do modelo usando uma ferramenta. Para obter mais informações, consulte Use uma ferramenta para concluir uma resposta do modelo do Amazon Bedrock.

nota

As seguintes restrições pertencem ao campo content:

  • É possível incluir até vinte imagens. O tamanho, a altura e a largura de cada imagem não devem exceder 3,75 MB, 8.000 px e 8.000 px, respectivamente.

  • É possível incluir até cinco documentos. O tamanho de cada documento não deve ser superior a 4,5 MB.

  • Você só poderá incluir imagens e documentos se role for user.

No exemplo de messages a seguir, o usuário solicita uma lista de três músicas pop e o modelo gera uma lista de músicas.

[ { "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" } ] } ]

Um prompt do sistema é um tipo de prompt que fornece instruções ou contexto ao modelo sobre a tarefa que ele deve executar ou a personalidade que ele deve adotar durante a conversa. Você pode especificar uma lista de solicitações do sistema para a solicitação no campo system (SystemContentBlock), conforme mostrado no exemplo a seguir.

[ { "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. " } ]

A Converse API é compatível com um conjunto básico de parâmetros de inferência que você define no inferenceConfig campo (InferenceConfiguration). O conjunto básico de parâmetros de inferência é:

  • maxTokens: o número máximo de tokens a serem permitidos na resposta gerada.

  • stopSequences: uma lista de sequências de parada. Uma sequência de parada é uma sequência de caracteres que faz com que o modelo interrompa a geração da resposta.

  • temperature: a probabilidade do modelo selecionar opções de maior probabilidade ao gerar uma resposta.

  • topP: a porcentagem de candidatos mais prováveis que o modelo considera para o próximo token.

Para obter mais informações, consulte Geração de resposta de influência com parâmetros de inferência.

O exemplo de JSON a seguir define o parâmetro de inferência temperature.

{"temperature": 0.5}

Se o modelo que você está usando tiver parâmetros de inferência adicionais, será possível definir esses parâmetros especificando-os como JSON no campo additionalModelRequestFields. O exemplo de JSON a seguir mostra como definir top_k, que está disponível em modelos Claude da Anthropic, mas não é um parâmetro básico de inferência na API de mensagens.

{"top_k": 200}

Se você especificar um prompt do Gerenciamento de Prompts no modelId como recurso para executar a inferência, use esse campo para preencher as variáveis do prompt com valores reais. O campo promptVariables está associado a um objeto JSON com chaves que correspondem às variáveis definidas nos prompts e aos valores pelos quais substituir as variáveis.

Por exemplo, vamos supor que você tenha um prompt que diz Make me a {{genre}} playlist consisting of the following number of songs: {{number}}. O ID do prompt é PROMPT12345 e a versão é 1. Você pode enviar a seguinte solicitação Converse para substituir as variáveis:

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

É possível aplicar uma barreira de proteção criada com as Barreiras de Proteção do Amazon Bedrock incluindo esse campo. Para aplicar a grade de proteção a uma mensagem específica na conversa, inclua a mensagem em um. GuardrailConverseContentBlock Se você não incluir nenhum GuardrailConverseContentBlock no corpo da solicitação, a barreira de proteção será aplicada a todas as mensagens no campo messages. Para ver um exemplo, consulte Incluir uma barreira de proteção com a API Converse.

Esse campo permite definir uma ferramenta para o modelo usar para ajudar a gerar uma resposta. Para obter mais informações, consulte Use uma ferramenta para concluir uma resposta do modelo do Amazon Bedrock.

É possível especificar os caminhos para os parâmetros adicionais do modelo no campo additionalModelResponseFieldPaths, conforme mostrado no exemplo a seguir.

[ "/stop_sequence" ]

A API mostra os campos adicionais que você solicita no campo additionalModelResponseFields.

Esse campo está associado a um objeto JSON. É possível especificar as chaves e os valores de metadados com os quais ele está associado dentro desse objeto. Você pode usar metadados de solicitação para ajudar a filtrar os logs de invocação do modelo.

Esse campo está associado a um objeto JSON. Você pode especificar o nível de serviço para uma solicitação específica.

O exemplo a seguir mostra a serviceTier estrutura:

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

Para obter informações detalhadas sobre níveis de serviço, incluindo características de preço e desempenho, consulteNíveis de serviço para otimizar o desempenho e o custo.

Opcionalmente, também é possível adicionar pontos de verificação de cache aos campos system ou tools para usar o armazenamento em cache de prompts, dependendo do modelo usado. Para obter mais informações, consulte Armazenamento em cache de prompts para agilizar a inferência do modelo.

Resposta

A resposta que você recebe da API Converse depende de qual operação você chama, Converse ou ConverseStream.

Resposta de Converse

Na resposta deConverse, o output campo (ConverseOutput) contém a mensagem (Mensagem) que o modelo gera. O conteúdo da mensagem está no campo content (ContentBlock) e a função (userouassistant) à qual a mensagem corresponde está no role campo.

Se você usou o armazenamento em cache de prompts, no campo de uso, cacheReadInputTokensCount e cacheWriteInputTokensCount informam o total de tokens lidos do cache e gravados no cache, respectivamente.

Se você usou camadas de serviço, no campo de resposta, service tier informaria qual camada de serviço foi usada para a solicitação.

O metrics campo (ConverseMetrics) inclui métricas para a chamada. Para determinar porque o modelo parou de gerar conteúdo, verifique o campo stopReason. Você pode obter informações sobre os tokens passados para o modelo na solicitação e os tokens gerados na resposta, verificando o usage campo (TokenUsage). Se você tiver especificado campos de resposta adicionais na solicitação, a API os retornará como JSON no campo additionalModelResponseFields.

O exemplo a seguir mostra a resposta de Converse quando você passa o prompt discutido em Solicitação.

{ "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 resposta

Se você chamar ConverseStream para transmitir a resposta de um modelo, o fluxo será retornado no campo de resposta stream. O fluxo emite os eventos abaixo na seguinte ordem:

  1. messageStart(MessageStartEvent). O evento inicial de uma mensagem. Inclui a função da mensagem.

  2. contentBlockStart(ContentBlockStartEvent). Um evento de início do bloco de conteúdo. Somente para uso de ferramentas.

  3. contentBlockDelta(ContentBlockDeltaEvent). Um evento delta do bloco de conteúdo. Inclui um destes itens:

    • text: o texto parcial que o modelo gera.

    • reasoningContent: o raciocínio parcial realizado pelo modelo para gerar a resposta. Você deve enviar a signature exibida, além de todas as mensagens anteriores nas solicitações Converse subsequentes. Se alguma das mensagens for alterada, a resposta gerará um erro.

    • toolUse: o objeto JSON de entrada parcial para uso da ferramenta.

  4. contentBlockStop(ContentBlockStopEvent). Um evento de interrupção do bloqueio de conteúdo.

  5. messageStop(MessageStopEvent). O evento de parada da mensagem. Inclui o motivo pelo qual o modelo parou de gerar saída.

  6. metadata(ConverseStreamMetadataEvent). Metadados para a solicitação. Os metadados incluem o uso do token em usage (TokenUsage) e métricas para a chamada em metrics (ConverseStreamMetadataEvent).

ConverseStream transmite um bloco de conteúdo completo como um ContentBlockStartEvent evento, um ou mais ContentBlockDeltaEvent eventos e um ContentBlockStopEvent evento. Use o campo contentBlockIndex como um índice para correlacionar os eventos que compõem um bloco de conteúdo.

O exemplo a seguir é a resposta parcial de 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}}}