AnthropicClaudeAPI de mensagens - 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á.

AnthropicClaudeAPI de mensagens

Esta seção fornece parâmetros de inferência e exemplos de código para usar a API de Anthropic Claude mensagens.

AnthropicClaudeVisão geral da API de mensagens

Você pode usar a API de mensagens para criar bots de bate-papo ou aplicativos de assistente virtual. A API gerencia as trocas conversacionais entre um usuário e um Anthropic Claude modelo (assistente).

dica

Este tópico mostra como usar a API de Anthropic Claude mensagens com as operações básicas de inferência (InvokeModelou InvokeModelWithResponseStream). No entanto, recomendamos que você use a API Converse para implementar mensagens em seu aplicativo. A API Converse fornece um conjunto unificado de parâmetros que funcionam em todos os modelos que oferecem suporte a mensagens. Para ter mais informações, consulte Use a API Converse.

Anthropictreina os modelos Claude para operar em turnos alternados de conversação do usuário e do assistente. Ao criar uma nova mensagem, você especifica os turnos conversacionais anteriores com o parâmetro messages. O modelo então gera a próxima mensagem na conversa.

Cada mensagem de entrada deve ser um objeto com uma função e um conteúdo. Você pode especificar uma única mensagem de função de usuário ou incluir várias mensagens de usuário e assistente. A primeira mensagem deve sempre usar a função de usuário.

Se você estiver usando a técnica de pré-preencher o formulário de resposta Claude (preenchendo o início da resposta de Claude usando a função de assistente final, Mensagem), Claude responderá retomando de onde parou. Com essa técnica, Claude ainda retornará uma resposta com a função de assistente.

Se a mensagem final usar a função de assistente, o conteúdo da resposta continuará imediatamente a partir do conteúdo dessa mensagem. Você pode usar isso para restringir parte da resposta do modelo.

Exemplo com uma única mensagem de usuário:

[{"role": "user", "content": "Hello, Claude"}]

Exemplo com vários turnos de conversação:

[ {"role": "user", "content": "Hello there."}, {"role": "assistant", "content": "Hi, I'm Claude. How can I help you?"}, {"role": "user", "content": "Can you explain LLMs in plain English?"}, ]

Exemplo com uma resposta parcialmente preenchida de Claude:

[ {"role": "user", "content": "Please describe yourself using only JSON"}, {"role": "assistant", "content": "Here is my JSON description:\n{"}, ]

O conteúdo de cada mensagem de entrada pode ser uma única sequência de caracteres ou uma matriz de blocos de conteúdo, em que cada bloco tem um tipo específico. Usar uma string é uma abreviatura para uma matriz de um bloco de conteúdo do tipo “texto”. As seguintes mensagens de entrada são equivalentes:

{"role": "user", "content": "Hello, Claude"}
{"role": "user", "content": [{"type": "text", "text": "Hello, Claude"}]}

Para obter informações sobre a criação de solicitações para Anthropic Claude modelos, consulte Introdução à solicitação na documentação. Anthropic Claude Se você tiver solicitações de preenchimento de texto existentes que deseja migrar para a API de mensagens, consulte Migração de preenchimentos de texto.

Solicitações do sistema

Você também pode incluir um prompt do sistema na solicitação. Um prompt do sistema permite que você forneça contexto e instruções para AnthropicClaude, como especificar uma meta ou função específica. Especifique um prompt do sistema no system campo, conforme mostrado no exemplo a seguir.

"system": "You are Claude, an AI assistant created by Anthropic to be helpful, harmless, and honest. Your goal is to provide informative and substantive responses to queries while avoiding potential harms."

Para obter mais informações, consulte Solicitações do sistema na Anthropic documentação.

Solicitações multimodais

Um prompt multimodal combina várias modalidades (imagens e texto) em um único prompt. Você especifica as modalidades no campo content de entrada. O exemplo a seguir mostra como você pode pedir Anthropic Claude para descrever o conteúdo de uma imagem fornecida. Para ver um código demonstrativo, consulte Exemplos de código multimodal.

{ "anthropic_version": "bedrock-2023-05-31", "max_tokens": 1024, "messages": [ { "role": "user", "content": [ { "type": "image", "source": { "type": "base64", "media_type": "image/jpeg", "data": "iVBORw..." } }, { "type": "text", "text": "What's in these images?" } ] } ] }
nota

As seguintes restrições se referem ao content campo:

  • Você pode incluir até 20 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.

  • Você pode incluir até cinco documentos. O tamanho de cada documento não deve ser superior a 4,5 MB.

  • Você só pode incluir imagens e documentos se role for o casouser.

Cada imagem que você inclui em uma solicitação conta para o uso do token. Para obter mais informações, consulte Custos de imagem na Anthropic documentação.

Uso da ferramenta (chamada de função)

Com Anthropic Claude 3 modelos, você pode especificar uma ferramenta que o modelo pode usar para responder a uma mensagem. Por exemplo, você pode especificar uma ferramenta que obtenha a música mais popular em uma estação de rádio. Se o usuário passar a mensagem Qual é a música mais popular no WZPZ? , o modelo determina que a ferramenta especificada pode ajudar a responder à pergunta. Em sua resposta, o modelo solicita que você execute a ferramenta em seu nome. Em seguida, você executa a ferramenta e passa o resultado da ferramenta para o modelo, que gera uma resposta para a mensagem original. Para obter mais informações, consulte Uso de ferramentas (chamada de função) na Anthropic Claude documentação.

dica

Recomendamos que você use a API Converse para integrar o uso da ferramenta ao seu aplicativo. Para ter mais informações, consulte Uso da ferramenta (chamada de função).

Você especifica as ferramentas que deseja disponibilizar para um modelo no tools campo. O exemplo a seguir é para uma ferramenta que obtém as músicas mais populares em uma estação de rádio.

[ { "name": "top_song", "description": "Get the most popular song played on a radio station.", "input_schema": { "type": "object", "properties": { "sign": { "type": "string", "description": "The call sign for the radio station for which you want the most popular song. Example calls signs are WZPZ and WKRP." } }, "required": [ "sign" ] } } ]

Quando o modelo precisa de uma ferramenta para gerar uma resposta a uma mensagem, ele retorna informações sobre a ferramenta solicitada e a entrada para a ferramenta no content campo da mensagem. Também define o motivo da interrupção da resposta tool_use a.

{ "id": "msg_bdrk_01USsY5m3XRUF4FCppHP8KBx", "type": "message", "role": "assistant", "model": "claude-3-sonnet-20240229", "stop_sequence": null, "usage": { "input_tokens": 375, "output_tokens": 36 }, "content": [ { "type": "tool_use", "id": "toolu_bdrk_01SnXQc6YVWD8Dom5jz7KhHy", "name": "top_song", "input": { "sign": "WZPZ" } } ], "stop_reason": "tool_use" }

Em seu código, você chama a ferramenta em nome da ferramenta. Em seguida, você passa o resultado da ferramenta (tool_result) em uma mensagem do usuário para o modelo.

{ "role": "user", "content": [ { "type": "tool_result", "tool_use_id": "toolu_bdrk_01SnXQc6YVWD8Dom5jz7KhHy", "content": "Elemental Hotel" } ] }

Em sua resposta, o modelo usa o resultado da ferramenta para gerar uma resposta para a mensagem original.

{ "id": "msg_bdrk_012AaqvTiKuUSc6WadhUkDLP", "type": "message", "role": "assistant", "model": "claude-3-sonnet-20240229", "content": [ { "type": "text", "text": "According to the tool, the most popular song played on radio station WZPZ is \"Elemental Hotel\"." } ], "stop_reason": "end_turn" }

Modelos compatíveis

Você pode usar a API de mensagens com os seguintes Anthropic Claude modelos.

  • AnthropicClaudeInstantv1.2

  • AnthropicClaude2 v2

  • AnthropicClaude2 v2.1

  • Anthropic Claude 3 Sonnet

  • Anthropic Claude 3.5 Sonnet

  • Anthropic Claude 3 Haiku

  • Anthropic Claude 3 Opus

Solicitação e reposta

O corpo da solicitação é passado no body campo de uma solicitação para InvokeModelou InvokeModelWithResponseStream. O tamanho máximo da carga útil que você pode enviar em uma solicitação é de 20 MB.

Para obter mais informações, consulte https://docs.anthropic.com/claude/reference/messages_post.

Request

AnthropicClaudetem os seguintes parâmetros de inferência para uma chamada de inferência de mensagens.

{ "anthropic_version": "bedrock-2023-05-31", "max_tokens": int, "system": string, "messages": [ { "role": string, "content": [ { "type": "image", "source": { "type": "base64", "media_type": "image/jpeg", "data": "content image bytes" } }, { "type": "text", "text": "content text" } ] } ], "temperature": float, "top_p": float, "top_k": int, "tools": [ { "name": string, "description": string, "input_schema": json } ], "tool_choice": { "type" : string, "name" : string, }, "stop_sequences": [string] }

Veja a seguir os parâmetros necessários.

  • anthropic_version — (Obrigatório) A versão antrópica. O valor deve ser bedrock-2023-05-31.

  • max_tokens — (Obrigatório) O número máximo de tokens a serem gerados antes de parar.

    Observe que Anthropic Claude os modelos podem parar de gerar tokens antes de atingir o valor demax_tokens. AnthropicClaudeModelos diferentes têm valores máximos diferentes para esse parâmetro. Para obter mais informações, consulte Comparação de modelos.

  • mensagens — (Obrigatório) As mensagens de entrada.

    • papel — O papel do turno da conversa. Os valores válidos são user e assistant.

    • conteúdo — (obrigatório) O conteúdo do turno da conversa.

      • tipo — (obrigatório) O tipo do conteúdo. Os valores válidos são image e text.

        Se você especificarimage, também deverá especificar a fonte da imagem no seguinte formato

        fonte — (obrigatório) O conteúdo do turno da conversa.

        • type — (obrigatório) O tipo de codificação da imagem. Você pode especificarbase64.

        • media_type — (obrigatório) O tipo da imagem. Você pode especificar os seguintes formatos de imagem.

          • image/jpeg

          • image/png

          • image/webp

          • image/gif

        • data — (obrigatório) Os bytes de imagem codificados em base64 para a imagem. O tamanho máximo da imagem é 3,75 MB. A altura e a largura máximas de uma imagem são 8000 pixels.

        Se você especificartext, também deverá especificar o prompt emtext.

Veja a seguir os parâmetros opcionais.

  • system — (Opcional) O prompt do sistema para a solicitação.

    Um prompt do sistema é uma forma de fornecer contexto e instruções AnthropicClaude, como especificar uma meta ou função específica. Para obter mais informações, consulte Solicitações do sistema na Anthropic documentação.

    nota

    Você pode usar os prompts do sistema com a Anthropic Claude versão 2.1 ou superior.

  • stop_sequences — (Opcional) Sequências de texto personalizadas que fazem com que o modelo pare de gerar. AnthropicClaudeos modelos normalmente param quando completam naturalmente seu turno; nesse caso, o valor do campo de stop_reason resposta éend_turn. Se você quiser que o modelo pare de ser gerado ao encontrar sequências de texto personalizadas, você pode usar o parâmetro. stop_sequences Se o modelo encontrar uma das cadeias de texto personalizadas, o valor do campo de stop_reason resposta será stop_sequence e o valor de stop_sequence conterá a sequência de parada correspondente.

    O número máximo de entradas é 8191.

  • temperatura — (Opcional) A quantidade de aleatoriedade injetada na resposta.

    Padrão Mínimo Máximo

    1

    0

    1

  • top_p — (Opcional) Use amostragem de núcleo.

    Na amostragem de núcleo, Anthropic Claude calcula a distribuição cumulativa de todas as opções de cada token subsequente em ordem decrescente de probabilidade e a interrompe quando atinge uma probabilidade específica especificada por. top_p Você deve alterar um temperature ou doistop_p, mas não os dois.

    Padrão Mínimo Máximo

    0,999

    0

    1

  • top_k — (Opcional) Somente uma amostra das K principais opções para cada token subsequente.

    Use top_k para remover respostas de baixa probabilidade de cauda longa.

    Padrão Mínimo Máximo

    Desativado por padrão

    0

    500

  • ferramentas — (Opcional) Definições de ferramentas que o modelo pode usar.

    nota

    Requer um modelo Anthropic Claude 3.

    Se você incluir tools em sua solicitação, o modelo poderá retornar blocos de tool_use conteúdo que representem o uso dessas ferramentas pelo modelo. Em seguida, você pode executar essas ferramentas usando a entrada de ferramenta gerada pelo modelo e, opcionalmente, retornar os resultados ao modelo usando blocos de tool_result conteúdo.

    • nome — O nome da ferramenta.

    • descrição — (opcional, mas altamente recomendado) A descrição da ferramenta.

    • input_schema — O esquema JSON da ferramenta.

  • tool_choice — (Opcional) Especifica como o modelo deve usar as ferramentas fornecidas. O modelo pode usar uma ferramenta específica, qualquer ferramenta disponível ou decidir sozinho.

    nota

    Requer um modelo Anthropic Claude 3.

    • tipo — O tipo de ferramenta escolhida. Os valores possíveis são any (use qualquer ferramenta disponível), auto (o modelo decide) e tool (use a ferramenta especificada).

    • name — (Opcional) O nome da ferramenta a ser usada. Obrigatório se você especificar tool no type campo.

Response

O Anthropic Claude modelo retorna os seguintes campos para uma chamada de inferência de mensagens.

{ "id": string, "model": string, "type" : "message", "role" : "assistant", "content": [ { "type": string, "text": string } ], "stop_reason": string, "stop_sequence": string, "tool_use" : { "type": string, "id" : string, "input" : json }, "usage": { "input_tokens": integer, "output_tokens": integer } }
  • id — O identificador exclusivo da resposta. O formato e o tamanho do ID podem mudar com o tempo.

  • modelo — O ID do Anthropic Claude modelo que fez a solicitação.

  • stop_reason — O motivo pelo qual Anthropic Claude parou de gerar a resposta.

    • end_turn — O modelo atingiu um ponto de parada natural

    • max_tokens — O texto gerado excedeu o valor do campo de max_tokens entrada ou excedeu o número máximo de tokens que o modelo suporta. '.

    • stop_sequence — O modelo gerou uma das sequências de parada que você especificou no stop_sequences campo de entrada.

  • stop_sequence — A sequência de parada que encerrou a geração.

  • tipo — O tipo de resposta. O valor é sempre message.

  • papel — O papel conversacional da mensagem gerada. O valor é sempre assistant.

  • conteúdo — O conteúdo gerado pelo modelo. Retornado como uma matriz. Existem dois tipos de conteúdo, text tool_use e.

    • texto — Uma resposta em texto.

      • tipo — Esse valor étext. O tipo do conteúdo.

      • texto — O texto do conteúdo.

    • tool_use — Uma solicitação do modelo para usar uma ferramenta.

      • tipo — Esse valor é text .O tipo do conteúdo.

      • id — O ID da ferramenta que o modelo está solicitando o uso.

      • input — Os parâmetros de entrada a serem passados para a ferramenta.

  • uso — Contêiner para o número de tokens que você forneceu na solicitação e o número de tokens que o modelo gerou na resposta.

    • input_tokens — O número de tokens de entrada na solicitação.

    • output_tokens — O número de tokens gerados pelo modelo na resposta.

    • stop_sequence — O modelo gerou uma das sequências de parada que você especificou no stop_sequences campo de entrada.

Exemplos de código

Os exemplos de código a seguir mostram como usar a API de mensagens.

Exemplo de código de mensagens

Este exemplo mostra como enviar uma mensagem de usuário de turno único e um turno de usuário com uma mensagem de assistente pré-preenchida para um Anthropic Claude 3 Sonnet modelo.

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Shows how to generate a message with Anthropic Claude (on demand). """ import boto3 import json import logging from botocore.exceptions import ClientError logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) def generate_message(bedrock_runtime, model_id, system_prompt, messages, max_tokens): body=json.dumps( { "anthropic_version": "bedrock-2023-05-31", "max_tokens": max_tokens, "system": system_prompt, "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 message example. """ try: bedrock_runtime = boto3.client(service_name='bedrock-runtime') model_id = 'anthropic.claude-3-sonnet-20240229-v1:0' system_prompt = "Please respond only with emoji." max_tokens = 1000 # Prompt with user turn only. user_message = {"role": "user", "content": "Hello World"} messages = [user_message] response = generate_message (bedrock_runtime, model_id, system_prompt, messages, max_tokens) print("User turn only.") print(json.dumps(response, indent=4)) # Prompt with both user turn and prefilled assistant response. #Anthropic Claude continues by using the prefilled assistant text. assistant_message = {"role": "assistant", "content": "<emoji>"} messages = [user_message, assistant_message] response = generate_message(bedrock_runtime, model_id,system_prompt, messages, max_tokens) print("User turn and prefilled assistant response.") 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()

Exemplos de código multimodal

Os exemplos a seguir mostram como passar uma imagem e solicitar um texto em uma mensagem multimodal para um Anthropic Claude 3 Sonnet modelo.

Prompt multimodal com InvokeModel

O exemplo a seguir mostra como enviar um prompt multimodal para Anthropic Claude 3 Sonnet with. InvokeModel

# 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_image = "/path/to/image" input_text = "What's in this image?" # Read reference image from file and encode as base64 strings. 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": "image/jpeg", "data": content_image}}, {"type": "text", "text": input_text} ]} messages = [message] response = run_multi_modal_prompt( bedrock_runtime, model_id, messages, max_tokens) print(json.dumps(response, indent=4)) except ClientError as err: message = err.response["Error"]["Message"] logger.error("A client error occurred: %s", message) print("A client error occured: " + format(message)) if __name__ == "__main__": main()

Streaming de prompt multimodal com InvokeModelWithResponseStream

O exemplo a seguir mostra como transmitir a resposta de um prompt multimodal enviado para Anthropic Claude 3 Sonnet with. InvokeModelWithResponseStream

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Shows how to stream the response from Anthropic Claude Sonnet (on demand) for a multimodal request. """ import json import base64 import logging import boto3 from botocore.exceptions import ClientError logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) def stream_multi_modal_prompt(bedrock_runtime, model_id, input_text, image, max_tokens): """ Streams the response from a multimodal prompt. Args: bedrock_runtime: The Amazon Bedrock boto3 client. model_id (str): The model ID to use. input_text (str) : The prompt text image (str) : The path to an image that you want in the prompt. max_tokens (int) : The maximum number of tokens to generate. Returns: None. """ with open(image, "rb") as image_file: encoded_string = base64.b64encode(image_file.read()) body = json.dumps({ "anthropic_version": "bedrock-2023-05-31", "max_tokens": max_tokens, "messages": [ { "role": "user", "content": [ {"type": "text", "text": input_text}, {"type": "image", "source": {"type": "base64", "media_type": "image/jpeg", "data": encoded_string.decode('utf-8')}} ] } ] }) response = bedrock_runtime.invoke_model_with_response_stream( body=body, modelId=model_id) for event in response.get("body"): chunk = json.loads(event["chunk"]["bytes"]) if chunk['type'] == 'message_delta': print(f"\nStop reason: {chunk['delta']['stop_reason']}") print(f"Stop sequence: {chunk['delta']['stop_sequence']}") print(f"Output tokens: {chunk['usage']['output_tokens']}") if chunk['type'] == 'content_block_delta': if chunk['delta']['type'] == 'text_delta': print(chunk['delta']['text'], end="") def main(): """ Entrypoint for Anthropic Claude Sonnet multimodal prompt example. """ model_id = "anthropic.claude-3-sonnet-20240229-v1:0" input_text = "What can you tell me about this image?" image = "/path/to/image" max_tokens = 100 try: bedrock_runtime = boto3.client('bedrock-runtime') stream_multi_modal_prompt( bedrock_runtime, model_id, input_text, image, max_tokens) 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()