AnthropicClaudeAPI de mensajes - Amazon Bedrock

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.

AnthropicClaudeAPI de mensajes

En esta sección, se proporcionan parámetros de inferencia y ejemplos de código para usar la API de Anthropic Claude mensajes.

AnthropicClaudeDescripción general de la API de mensajes

Puedes usar la API de mensajes para crear bots de chat o aplicaciones de asistente virtual. La API gestiona los intercambios conversacionales entre un usuario y un Anthropic Claude modelo (asistente).

Anthropicentrena 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 está utilizando la técnica de rellenar previamente la respuesta desde Claude (rellenando el principio de la respuesta de Claude utilizando un último mensaje como asistente), Claude responderá retomando la respuesta desde donde la dejó. 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 indicaciones para los Anthropic Claude modelos, consulte la Introducción a las indicaciones en la documentación. Anthropic Claude Si ya tienes mensajes de texto completados que deseas migrar a la API de mensajes, consulta Migración desde textos completados.

Indicaciones del sistema

También puede incluir un mensaje del sistema en la solicitud. Un mensaje del sistema le permite proporcionar contexto e instrucciones AnthropicClaude, por ejemplo, especificar un objetivo o función 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 las indicaciones del sistema en la Anthropic documentación.

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. El siguiente ejemplo muestra cómo puede Anthropic Claude solicitar una descripción del contenido de una imagen proporcionada. Para ver el código de ejemplo, consulte Ejemplos de códigos multimodales.

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

Puede suministrar hasta 20 imágenes al modelo. No puedes poner imágenes en la función de asistente.

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 costes de las imágenes en la Anthropic documentación.

Modelos compatibles

Puedes usar la API de mensajes con los siguientes Anthropic Claude modelos.

  • AnthropicClaudeInstantv1.2

  • AnthropicClaude2 v2

  • AnthropicClaude2 v2.1

  • Anthropic Claude 3 Sonnet

  • Anthropic Claude 3 Haiku

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, consulte https://docs.anthropic.com/claude/reference/messages_post.

Request

AnthropicClaudetiene los siguientes parámetros de inferencia para una llamada de inferencia de mensajes.

{ "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, "stop_sequences": [string] }

Los siguientes parámetros son obligatorios.

  • anthropic_version — (obligatorio) La versión antrópica. El valor debe ser bedrock-2023-05-31.

  • max_tokens: (obligatorio) el número máximo de fichas que se deben generar antes de parar.

    Tenga en cuenta que Anthropic Claude los modelos pueden dejar de generar fichas antes de alcanzar el valor de. max_tokens AnthropicClaudeLos distintos modelos tienen valores máximos diferentes para este parámetro. Para obtener más información, consulte Comparación de modelos.

  • mensajes: (obligatorio) los mensajes de entrada.

    • rol: el papel del turno de conversación. Los valores válidos son user y assistant.

    • contenido: (obligatorio) El contenido del turno de conversación.

      • tipo: (obligatorio) El tipo de contenido. Los valores válidos son image y text.

        Si lo especificaimage, también debe especificar la fuente de la imagen en el siguiente formato

        fuente: (obligatorio) El contenido del turno de conversación.

        • tipo: (obligatorio) El tipo de codificación de la imagen. Puede especificarlobase64.

        • media_type — (obligatorio) El tipo de imagen. Puede especificar los siguientes formatos de imagen.

          • image/jpeg

          • image/png

          • image/webp

          • image/gif

        • datos: (obligatorio) los bytes de imagen codificados en base64 de la imagen. El tamaño máximo de la imagen es de 3,75 MB. La altura y el ancho máximos de una imagen son 8000 píxeles.

        Si lo especificatext, también debe especificar el mensaje entext.

Los siguientes son parámetros opcionales.

  • sistema: (opcional) el indicador del sistema para la solicitud.

    Un mensaje del sistema es una forma de proporcionar contexto e instrucciones para AnthropicClaude, por ejemplo, especificar un objetivo o función en particular. Para obtener más información, consulte Cómo utilizar las indicaciones del sistema en la Anthropic documentación.

    nota

    Puede usar las indicaciones del sistema con la Anthropic Claude versión 2.1 o superior.

  • stop_sequence: secuencias de texto personalizadas (opcional) que hacen que el modelo deje de generarse. AnthropicClaudelos modelos normalmente se detienen cuando han completado su turno de forma natural; en este caso, el valor del campo de stop_reason respuesta es. end_turn Si desea que el modelo deje de generar cuando encuentre cadenas de texto personalizadas, puede usar el stop_sequences parámetro. Si el modelo encuentra una de las cadenas de texto personalizadas, el valor del campo de stop_reason respuesta es stop_sequence y el valor de stop_sequence contiene la secuencia de paradas coincidente.

    El número máximo de entradas es 8191.

  • temperatura: (opcional) la cantidad de aleatoriedad que se inyecta en la respuesta.

    Predeterminado Mínimo Máximo

    1

    0

    1

  • top_p — (opcional) Utilice el muestreo de núcleos.

    En el muestreo de núcleos, Anthropic Claude calcula la distribución acumulada entre todas las opciones de cada token subsiguiente en orden de probabilidad decreciente y la corta una vez que alcanza una probabilidad determinada especificada por. top_p Debe modificar una de las dos temperaturetop_p, pero no las dos.

    Predeterminado Mínimo Máximo

    0,999

    0

    1

Los siguientes son parámetros opcionales.

  • top_k — (opcional) Muestra solo las K opciones principales para cada token subsiguiente.

    Se usa top_k para eliminar las respuestas de baja probabilidad de cola larga.

    Predeterminado Mínimo Máximo

    Desactivado de forma predeterminada

    0

    100 000 000

Response

El Anthropic Claude modelo devuelve los siguientes campos para una llamada de inferencia de mensajes.

{ "id": string, "model": string, "type" : "message", "role" : "assistant", "content": [ { "type": "text", "text": string } ], "stop_reason": string, "stop_sequence": string, "usage": { "input_tokens": integer, "output_tokens": integer } }
  • id: el identificador único de la respuesta. El formato y la longitud del identificador pueden cambiar con el tiempo.

  • modelo: el identificador del Anthropic Claude modelo que realizó la solicitud.

  • stop_reason: el motivo por el que Anthropic Claude se dejó de generar la respuesta.

    • end_turn: el modelo alcanzó un punto de parada natural

    • max_tokens: el texto generado ha superado el valor del campo de max_tokens entrada o ha superado el número máximo de fichas que admite el modelo.».

    • stop_sequence: el modelo generó una de las secuencias de paradas que especificó en el campo de entrada. stop_sequences

  • tipo: el tipo de respuesta. Este valor siempre es message.

  • rol: el rol conversacional del mensaje generado. Este valor siempre es assistant.

  • contenido: el contenido generado por el modelo. Se devuelve como una matriz.

    • tipo: el tipo de contenido. Actualmente el único valor admitido es text.

    • texto: el texto del contenido.

  • uso: contenedor para el número de fichas que proporcionó en la solicitud y el número de fichas que el modelo generó en la respuesta.

    • input_tokens: el número de tokens de entrada de la solicitud.

    • output_tokens: el número de tokens que el modelo generó en la respuesta.

    • stop_sequence: el modelo generó una de las secuencias de paradas que especificó en el campo de entrada. stop_sequences

Ejemplos de código

Los siguientes ejemplos de código muestran cómo utilizar la API de mensajes.

Ejemplo de código de mensajes

En este ejemplo se muestra cómo enviar un mensaje de usuario de un solo turno y un mensaje de usuario con un mensaje de asistente rellenado previamente a una 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ódigos multimodales

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.

Solicitud multimodal con InvokeModel

El siguiente ejemplo muestra cómo enviar una solicitud multimodal a 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()

Transmitir un mensaje multimodal con InvokeModelWithResponseStream

El siguiente ejemplo muestra cómo transmitir la respuesta desde una solicitud multimodal enviada a 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()