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.
Tópicos
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
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
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
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)
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
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.
Tópicos
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()