Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Anthropic Claude Mensajes API
En esta sección se proporcionan parámetros de inferencia y ejemplos de código para utilizar Anthropic Claude MensajesAPI.
Temas
Anthropic Claude APIDescripción general de los mensajes
Puedes usar los Mensajes API para crear bots de chat o aplicaciones de asistente virtual. APIGestiona los intercambios conversacionales entre un usuario y un Anthropic Claude modelo (asistente).
sugerencia
En este tema se muestra cómo utilizar el Anthropic Claude mensajes API con las operaciones de inferencia base (InvokeModelo InvokeModelWithResponseStream). Sin embargo, le recomendamos que utilice Converse API para implementar los mensajes en su aplicación. Converse API proporciona un conjunto unificado de parámetros que funcionan en todos los modelos que admiten mensajes. Para obtener más información, consulte Mantén una conversación con las operaciones de Converse API.
Anthropic capacita a los modelos Claude para que funcionen en turnos de conversación alternos entre el usuario y el asistente. Al crear un mensaje nuevo, se especifican los turnos de conversación anteriores con el parámetro messages. A continuación, el modelo genera el siguiente mensaje de la conversación.
Cada mensaje de entrada debe ser un objeto con una función y un contenido. Puede especificar un mensaje con un único rol de usuario o puede incluir varios mensajes de usuario y asistente. El primer mensaje debe utilizar siempre el rol de usuario.
Si utiliza la técnica de rellenar previamente la respuesta de Claude (completando el principio de la respuesta de Claude utilizando un último papel de asistente: Mensaje), Claude responderá retomando el tema desde donde lo dejaste. Con esta técnica, Claude seguirá devolviendo una respuesta con el rol de asistente.
Si el mensaje final utiliza la función de asistente, el contenido de la respuesta continuará inmediatamente con el contenido de ese mensaje. Puede usar esto para restringir parte de la respuesta del modelo.
Ejemplo con un solo mensaje de usuario:
[{"role": "user", "content": "Hello, Claude"}]
Ejemplo con varios turnos de conversación:
[ {"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?"}, ]
Ejemplo con una respuesta parcialmente completa de Claude:
[ {"role": "user", "content": "Please describe yourself using only JSON"}, {"role": "assistant", "content": "Here is my JSON description:\n{"}, ]
El contenido de cada mensaje de entrada puede ser una sola cadena o una matriz de bloques de contenido, donde cada bloque tiene un tipo específico. El uso de una cadena es la abreviatura de una matriz de un bloque de contenido del tipo «texto». Los siguientes mensajes de entrada son equivalentes:
{"role": "user", "content": "Hello, Claude"}
{"role": "user", "content": [{"type": "text", "text": "Hello, Claude"}]}
Para obtener información sobre la creación de solicitudes para Anthropic Claude modelos, consulte la Introducción a las solicitudes en
Indicaciones del sistema
También puede incluir un mensaje del sistema en la solicitud. Un mensaje del sistema le permite proporcionar el contexto y las instrucciones para Anthropic Claude, como especificar un objetivo o un rol en particular. Especifique un mensaje del sistema en el system
campo, como se muestra en el siguiente ejemplo.
"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 obtener más información, consulte Indicaciones del sistema en
Indicaciones multimodales
Una solicitud multimodal combina múltiples modalidades (imágenes y texto) en una sola solicitud. Las modalidades se especifican en el campo content
de entrada. En el siguiente ejemplo se muestra cómo puede preguntar Anthropic Claude para describir el contenido de una imagen proporcionada. Para ver el código de ejemplo, consulte Ejemplos 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
Las siguientes restricciones se refieren a content
este campo:
-
Puedes incluir hasta 20 imágenes. El tamaño, la altura y el ancho de cada imagen no deben ser superiores a 3,75 MB, 8000 px y 8000 px, respectivamente.
-
Puedes incluir hasta cinco documentos. El tamaño de cada documento no debe superar los 4,5 MB.
-
Solo puede incluir imágenes y documentos si los
role
hayuser
.
Cada imagen que incluyas en una solicitud se tendrá en cuenta para el uso de los tokens. Para obtener más información, consulta los costos de las imágenes
Uso de herramientas (llamada a funciones)
¿Con Anthropic Claude Con 3 modelos, puede especificar una herramienta que el modelo puede usar para responder a un mensaje. Por ejemplo, puede especificar una herramienta que obtenga la canción más popular de una emisora de radio. Si el usuario pasa el mensaje ¿Cuál es la canción más popularWZPZ? , el modelo determina que la herramienta que especificó puede ayudar a responder a la pregunta. En su respuesta, el modelo solicita que ejecute la herramienta en su nombre. A continuación, ejecute la herramienta y pase el resultado de la herramienta al modelo, que generará una respuesta para el mensaje original. Para obtener más información, consulte Uso de herramientas (llamada a funciones)
sugerencia
Le recomendamos que utilice Converse API para integrar el uso de la herramienta en su aplicación. Para obtener más información, consulte Utilice una herramienta para completar una respuesta modelo de Amazon Bedrock.
Especifique las herramientas que desea poner a disposición de un modelo en el tools
campo. El siguiente ejemplo corresponde a una herramienta que obtiene las canciones más populares de una emisora de radio.
[ { "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" ] } } ]
Cuando el modelo necesita una herramienta para generar una respuesta a un mensaje, devuelve información sobre la herramienta solicitada y la entrada de la herramienta en el content
campo del mensaje. También establece el motivo de parada de la respuesta atool_use
.
{ "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" }
En tu código, llamas a la herramienta en nombre de la herramienta. A continuación, pasa el resultado de la herramienta (tool_result
) en un mensaje de usuario al modelo.
{ "role": "user", "content": [ { "type": "tool_result", "tool_use_id": "toolu_bdrk_01SnXQc6YVWD8Dom5jz7KhHy", "content": "Elemental Hotel" } ] }
En su respuesta, el modelo utiliza el resultado de la herramienta para generar una respuesta para el mensaje 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 compatibles
Puede usar los mensajes API con lo siguiente Anthropic Claude modelos.
Anthropic Claude Instant v1.2
Anthropic Claude 2 v2
Anthropic Claude 2 v2.1
Anthropic Claude 3 Sonnet
Anthropic Claude 3.5 Sonnet
Anthropic Claude 3 Haiku
Anthropic Claude 3 Opus
Solicitud y respuesta
El cuerpo de la solicitud se pasa en el body
campo de una solicitud a InvokeModelo InvokeModelWithResponseStream. El tamaño máximo de la carga útil que puedes enviar en una solicitud es de 20 MB.
Para obtener más información, consulta https://docs.anthropic.com/claude/ reference/messages_post.
Ejemplos de código
Los siguientes ejemplos de código muestran cómo utilizar los mensajes. API
Ejemplo de código de mensajes
En este ejemplo se muestra cómo enviar un mensaje de usuario por turno y un mensaje de usuario por turno con un mensaje de asistente rellenado previamente a un 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()
Ejemplos de código multimodal
Los siguientes ejemplos muestran cómo pasar una imagen y un texto de solicitud de un mensaje multimodal a un Anthropic Claude 3 Sonnet modelo.
Temas
Avisador multimodal con InvokeModel
El siguiente ejemplo muestra cómo enviar una solicitud multimodal a Anthropic Claude 3 Sonnet con 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()
Transmisión de mensajes multimodales con InvokeModelWithResponseStream
El siguiente ejemplo muestra cómo transmitir la respuesta desde una solicitud multimodal enviada a Anthropic Claude 3 Sonnet con 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()