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).
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?" } ] } ] }
Você pode fornecer até 20 imagens para o modelo. Você não pode colocar imagens na função de assistente.
Cada imagem que você inclui em uma solicitação conta para o uso do token. Para obter mais informações, consulte Custos de imagem
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 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()