

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.

# Envío de solicitudes y generación de respuestas con inferencia de modelos
<a name="inference"></a>

La inferencia se refiere al proceso de generar una salida a partir de una entrada proporcionada a un modelo.

Amazon Bedrock ofrece un conjunto de modelos fundacionales que puede utilizar para generar resultados de las siguientes modalidades. Para ver la compatibilidad de modalidades por modelo fundacional, consulte [Modelos fundacionales compatibles en Amazon Bedrock](models-supported.md).


****  

| Modalidad de salida | Description (Descripción) | Ejemplos de casos de uso | 
| --- | --- | --- | 
| Texto | Proporcionar entrada de texto y generar varios tipos de texto | Chat, lluvia de ideas question-and-answering, resumen, generación de código, creación de tablas, formateo de datos, reescritura | 
| Image | Proporcionar texto o imágenes de entrada y generar o modificar imágenes | Generación de imágenes, edición de imágenes, variación de imágenes | 
| Video | Proporcionar texto o imágenes de referencia y generar un vídeo | Generación de vídeo, conversión de imágenes a vídeo | 
| Incrustaciones | Proporcionar texto, imágenes o texto e imágenes y generar un vector de valores numéricos que represente la entrada. El vector de salida se puede comparar con otros vectores de incrustaciones para determinar la similitud semántica (para el texto) o la similitud visual (para las imágenes). | Búsqueda de texto e imágenes, consulta, categorización, recomendaciones, personalización, [creación de bases de conocimientos](knowledge-base.md) | 

**Topics**
+ [Obtenga información sobre los casos de uso de diferentes métodos de inferencia de modelos](inference-methods.md)
+ [Cómo funciona la inferencia en Amazon Bedrock](inference-how.md)
+ [Influencia sobre la generación de respuestas con parámetros de inferencia](inference-parameters.md)
+ [Regiones y modelos compatibles con la ejecución de inferencia de modelos](inference-supported.md)
+ [Requisitos previos para ejecutar la inferencia de modelos](inference-prereq.md)
+ [Generación de respuestas en la consola mediante áreas de juego](playgrounds.md)
+ [Mejora de las respuestas de los modelos con el razonamiento de modelos](inference-reasoning.md)
+ [Optimización de la inferencia del modelo para la latencia](latency-optimized-inference.md)
+ [Genere respuestas utilizando OpenAI APIs](bedrock-mantle.md)
+ [Envío de solicitudes y generación de respuestas mediante la API](inference-api.md)
+ [Obtenga resultados JSON validados de los modelos](structured-output.md)
+ [Uso de la característica Uso de computadora para completar una respuesta del modelo de Amazon Bedrock](computer-use.md)

# Obtenga información sobre los casos de uso de diferentes métodos de inferencia de modelos
<a name="inference-methods"></a>

Puede ejecutar directamente la inferencia de modelos de las siguientes maneras:


****  

| Método | Caso de uso | 
| --- | --- | 
| [Sitios de prueba de la consola de Amazon Bedrock](playgrounds.md) | Ejecutar inferencias en una interfaz gráfica intuitiva. Práctico para la exploración. | 
| [Conversar o [ConverseStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ConverseStream.html)](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html) | Implementar aplicaciones conversacionales con una API unificada para la entrada del modelo. | 
| [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html) o [InvokeModelWithResponseStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModelWithResponseStream.html) | Enviar una única petición y generar una respuesta sincrónica. Útil para generar respuestas en tiempo real o para consultas de búsqueda. | 
| [StartAsyncInvoke](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_StartAsyncInvoke.html) | Enviar una única petición y generar una respuesta asincrónica. Útil para generar respuestas a gran escala. | 
| [CreateModelInvocationJob](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateModelInvocationJob.html) | Preparar un conjunto de datos de peticiones y generar respuestas en lotes. | 
| [API de respuestas](https://platform.openai.com/docs/api-reference/responses) | Usa la API de respuestas para aplicaciones de agencia modernas que requieren el uso de herramientas integradas (búsqueda, intérprete de código), entradas multimodales y conversaciones con estado. | 
| [Finalización del chat](https://platform.openai.com/docs/api-reference/chat) | Usa la API Chat Completions para realizar tareas livianas, sin estado y centradas en texto, en las que necesites tener un control total sobre la administración del historial de chats y reducir la latencia. | 

Las siguientes características de Amazon Bedrock también utilizan la inferencia de modelos como un paso en un flujo de trabajo más amplio:
+ La [evaluación de modelos](evaluation.md) utiliza el proceso de invocación de modelos para evaluar el rendimiento de los distintos modelos después de enviar una solicitud. [CreateEvaluationJob](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateEvaluationJob.html)
+ Las [bases de conocimientos](knowledge-base.md) utilizan la invocación de modelos al utilizar la API de [https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_RetrieveAndGenerate.html) para generar una respuesta basada en los resultados obtenidos de una base de conocimientos.
+ Los [agentes](agents.md) utilizan la invocación de modelos para generar respuestas en varias etapas durante una solicitud de [https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_InvokeAgent.html).
+ Los [flujos](flows.md) incluyen recursos de Amazon Bedrock, como peticiones, bases de conocimiento y agentes, que utilizan la invocación de modelos.

Tras probar distintos modelos básicos con distintas indicaciones y parámetros de inferencia, puede configurar su aplicación para que los utilice APIs con las especificaciones que desee.

# Cómo funciona la inferencia en Amazon Bedrock
<a name="inference-how"></a>

Cuando envía una entrada a un modelo, el modelo predice una secuencia probable de tokens siguiente y devuelve esa secuencia como salida. Amazon Bedrock le ofrece la capacidad de ejecutar inferencias con el modelo fundacional que elija. Para ejecutar una inferencia, proporcione las siguientes entradas:
+ **Petición**: una entrada que se proporciona al modelo para que genere una respuesta. Para obtener información sobre la escritura de peticiones, consulte [Conceptos de ingeniería de peticiones](prompt-engineering-guidelines.md). Para obtener más información sobre la protección contra los ataques de inyección de peticiones, consulte [Seguridad de la inyección de peticiones](prompt-injection.md).
+ **Modelo**: realiza solicitudes a un modelo para ejecutar la inferencia en una petición. El modelo que elija también especifica un nivel de rendimiento, que define el número y la velocidad de los tokens de entrada y salida que puede procesar. Puede realizar solicitudes a los siguientes tipos de modelos:
  + **Modelo base**: modelo fundacional con el que ejecutar inferencias. Las solicitudes se envían a una sola región de AWS. Para ver los ID de los modelos, consulte [Modelos fundacionales compatibles en Amazon Bedrock](models-supported.md). Para obtener más información sobre los modelos fundacionales disponibles en Amazon Bedrock, consulte [Información del modelo fundacional de Amazon Bedrock](foundation-models-reference.md). 
  + **Perfil de inferencia**: modelo fundacional con el que se ejecuta la inferencia. Las solicitudes al modelo se realizan en varias regiones de AWS. Para ver los ID de los perfiles de inferencia, consulte [Regiones y modelos compatibles con los perfiles de inferencia](inference-profiles-support.md).
**nota**  
Los modelos difieren en la disponibilidad del modelo base y del perfil de inferencia según la región y el método de API. Para obtener más información, consulte [Modelos fundacionales compatibles en Amazon Bedrock](models-supported.md) y las páginas de los distintos modelos en la [Referencia de modelos fundacionales](foundation-models-reference.md).
  + **Rendimiento aprovisionado**: un modelo fundacional para el que ha adquirido rendimiento dedicado. Para obtener más información, consulte [Aumento de la capacidad de invocación de modelos con el rendimiento aprovisionado en Amazon Bedrock](prov-throughput.md)
  + **Modelo personalizado**: un modelo fundacional cuyas ponderaciones se han modificado mediante la personalización del modelo. Para obtener más información, consulte [Personalización del modelo para mejorar su rendimiento según su caso de uso](custom-models.md).
+ **Parámetros de inferencia**: conjunto de valores que se pueden ajustar para limitar o influir en la respuesta del modelo. Para obtener más información acerca de los parámetros de inferencia, consulte [Influencia sobre la generación de respuestas con parámetros de inferencia](inference-parameters.md) y [Parámetros de solicitud de inferencia y campos de respuesta para los modelos fundacionales](model-parameters.md).

## Invocación de modelos en diferentes regiones de AWS
<a name="inference-how-regions"></a>

Cuando se invoca un modelo, se elige la Región de AWS en el que se va a invocar. Las cuotas de frecuencia y el tamaño de las solicitudes que puede realizar dependen de la región. Puede buscar estas cuotas en [Cuotas de servicio de Amazon Bedrock](https://docs.aws.amazon.com/general/latest/gr/bedrock.html#limits_bedrock):
+ Solicitudes de inferencia de modelos bajo demanda por minuto para *\$1\$1Model\$1*
+ Tokens de InvokeModel bajo demanda por minuto para *\$1\$1Model\$1*

También puede invocar un perfil de inferencia en lugar del propio modelo fundacional. Un perfil de inferencia define un modelo y una o más regiones a las que puede enrutar las solicitudes de invocación del modelo. Al invocar un perfil de inferencia que incluye varias regiones, puede aumentar el rendimiento. Para obtener más información, consulte [Aumento del rendimiento con la inferencia entre regiones](cross-region-inference.md). Para ver las cuotas de frecuencia y el tamaño de las solicitudes que puede realizar con un perfil de inferencia, busque las siguientes cuotas en [Cuotas de servicio de Amazon Bedrock](https://docs.aws.amazon.com/general/latest/gr/bedrock.html#limits_bedrock):
+ Solicitudes de InvokeModel por minuto entre regiones para *\$1\$1Model\$1*
+ Tokens de InvokeModel por minuto entre regiones para *\$1\$1Model\$1*
+ Solicitudes de InvokeModel por minuto entre regiones globales para *\$1\$1Model\$1*
+ Tokens de InvokeModel por minuto entre regiones globales para *\$1\$1Model\$1*

Las solicitudes realizadas a una región pueden atenderse desde zonas locales que comparten la misma región principal. Por ejemplo, las solicitudes realizadas a Este de EE. UU. (Norte de Virginia) (us-east-1) pueden atenderse desde cualquier zona local asociada a ella, como Atlanta, EE. UU. (us-east-1-atl-2a).

El mismo principio se aplica cuando se utiliza la inferencia entre regiones. Por ejemplo, las solicitudes realizadas al perfil de inferencia de US Anthropic Claude 3 Haiku pueden atenderse desde cualquier zona local cuya región principal esté en EE. UU., como Seattle, EE. UU. (us-west-2-sea-1a). Cuando se añadan nuevas zonas locales a AWS, también se añadirán al punto de conexión de inferencia entre regiones correspondiente.

Para ver una lista de los puntos de conexión locales y las regiones principales a las que están asociados, consulte [Ubicaciones de zonas locales de AWS](https://aws.amazon.com/about-aws/global-infrastructure/localzones/locations/).

Cuando invoca un perfil de inferencia entre regiones en Amazon Bedrock, su solicitud se origina en una región de origen y se enruta automáticamente a una de las regiones de destino definidas en ese perfil, lo que optimiza el rendimiento. Las regiones de destino de los perfiles de inferencia global entre regiones incluyen todas las regiones comerciales.

El perfil de inferencia global entre regiones de un modelo específico puede cambiar con el tiempo, ya que AWS añade más regiones comerciales en las que se pueden procesar sus solicitudes. Sin embargo, si un perfil de inferencia está vinculado a una región geográfica (como EE. UU., la UE o APAC), su lista de regiones de destino nunca cambiará. AWS podría crear nuevos perfiles de inferencia que incorporen nuevas regiones. Puede actualizar sus sistemas para usar estos perfiles de inferencia cambiando los ID de su configuración por otros nuevos.

**nota**  
Las regiones de destino de un perfil de inferencia entre regiones pueden incluir **regiones opcionales**, que son regiones que debe habilitar de forma explícita en el nivel de Cuenta de AWS o de organización. Para obtener más información, consulte [Activación o desactivación de Regiones de AWS en su cuenta](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-regions.html). Si utiliza un perfil de inferencia entre regiones, su solicitud de inferencia se puede enrutar a cualquiera de las regiones de destino del perfil, incluso si no ha optado por utilizar dichas regiones en su cuenta.

Las políticas de control de servicio (SCP) y las políticas de AWS Identity and Access Management (IAM) funcionan conjuntamente para controlar dónde se permite la inferencia entre regiones. Con las SCP, puede controlar qué regiones puede usar Amazon Bedrock para la inferencia y, con las políticas de IAM, puede definir qué usuarios o roles tienen permiso para ejecutar la inferencia. Si alguna región de destino de un perfil de inferencia entre regiones está bloqueada en sus SCP, la solicitud fallará aunque se permita el acceso a otras regiones. Para garantizar un funcionamiento eficiente con la inferencia entre regiones, puede actualizar sus políticas de SCP e IAM para permitir todas las acciones de inferencia requeridas de Amazon Bedrock (por ejemplo, `bedrock:InvokeModel*` o `bedrock:CreateModelInvocationJob`) en todas las regiones de destino incluidas en el perfil de inferencia elegido. Para obtener más información, consulte [https://aws.amazon.com/blogs/machine-learning/enable-amazon-bedrock-cross-region-inference-in-multi-account-environments/](https://aws.amazon.com/blogs/machine-learning/enable-amazon-bedrock-cross-region-inference-in-multi-account-environments/)Activación de la inferencia entre regiones de Amazon Bedrock en entornos de varias cuentas.

# Influencia sobre la generación de respuestas con parámetros de inferencia
<a name="inference-parameters"></a>

Al ejecutar la inferencia del modelo, se pueden ajustar los parámetros de inferencia para influir en la respuesta del modelo. Los parámetros de inferencia pueden cambiar el conjunto de posibles salidas que el modelo considera durante la generación o pueden limitar la respuesta final.

Los valores e intervalos predeterminados de los parámetros de inferencia dependen del modelo. Para obtener más información sobre los parámetros de inferencia de los diferentes modelos, consulte [Parámetros de solicitud de inferencia y campos de respuesta para los modelos fundacionales](model-parameters.md).

Las siguientes categorías de parámetros suelen encontrarse en diferentes modelos:

**Topics**
+ [Asignación al azar y diversidad](#inference-randomness)
+ [Longitud](#inference-length)

## Asignación al azar y diversidad
<a name="inference-randomness"></a>

Para cualquier secuencia dada, un modelo determina una distribución de probabilidad de las opciones para el siguiente token de la secuencia. Para generar cada token en una salida, el modelo toma muestras de esta distribución. La asignación al azar y la diversidad se refieren a la cantidad de variación en la respuesta de un modelo. Puede controlar estos factores limitando o ajustando la distribución. Los modelos fundacionales suelen admitir los siguientes parámetros para controlar la asignación al azar y la diversidad de la respuesta.
+ **Temperatura**: afecta a la forma de la distribución de la probabilidad de la salida prevista e influye en la probabilidad de que el modelo seleccione salidas con una menor probabilidad.
  + Elija un valor más bajo para influir en el modelo y que seleccione salidas de mayor probabilidad.
  + Elija un valor más alto para influir en el modelo y que seleccione salidas de menor probabilidad.

  En términos técnicos, la temperatura modula la función de masa de probabilidad para el siguiente token. Una temperatura más baja aumenta la pendiente de la función y produce respuestas más deterministas, y una temperatura más alta aplana la función y genera respuestas más aleatorias.
+ **K superior**: el número de candidatos más probables que el modelo considera para el siguiente token.
  + Elija un valor más bajo para reducir el tamaño del conjunto y limitar las opciones a los resultados más probables.
  + Elija un valor más alto para aumentar el tamaño del conjunto y permitir que el modelo tenga en cuenta resultados menos probables.

  Por ejemplo, si selecciona un valor de 50 para K superior, el modelo selecciona entre los 50 tokens más probables que podrían ser los siguientes en la secuencia.
+ **P superior**: porcentaje de candidatos más probables que el modelo considera para el siguiente token.
  + Elija un valor más bajo para reducir el tamaño del conjunto y limitar las opciones a los resultados más probables.
  + Elija un valor más alto para aumentar el tamaño del conjunto y permitir que el modelo tenga en cuenta resultados menos probables.

  En términos técnicos, el modelo calcula la distribución probabilística acumulada para el conjunto de respuestas y tiene en cuenta solo el P % superior de la distribución.

  Por ejemplo, si selecciona un valor de 0,8 para P superior, el modelo selecciona entre el 80 % superior en la probabilidad de distribución de tokens que podrían ser los siguientes en la secuencia.

En la siguiente tabla se resumen los efectos de estos parámetros.


****  

| Parámetro | Efecto de un valor inferior | Efecto de un valor superior | 
| --- | --- | --- | 
| Temperatura | Aumentar la probabilidad de que aparezcan tokens de mayor probabilidad Reducir la probabilidad de que aparezcan tokens de menor probabilidad | Aumentar la probabilidad de que aparezcan tokens de menor probabilidadReducir la probabilidad de que aparezcan tokens de mayor probabilidad | 
| K superior | Eliminar los tokens de menor probabilidad | Permitir los tokens de menor probabilidad | 
| Top P | Eliminar los tokens de menor probabilidad | Permitir los tokens de menor probabilidad | 

Como ejemplo para entender estos parámetros, observe la petición de ejemplo **I hear the hoof beats of "**. Supongamos que el modelo determina que las siguientes tres palabras son candidatas para el siguiente token. El modelo también asigna una probabilidad a cada palabra.

```
{
    "horses": 0.7,
    "zebras": 0.2,
    "unicorns": 0.1
}
```
+ Si establece una **temperatura** alta, la distribución de probabilidad se aplana y las probabilidades se vuelven menos diferentes, lo que aumentaría la probabilidad de elegir “unicorns” y disminuiría la probabilidad de elegir “horses”.
+ Si establece **K superior** como 2, el modelo solo considera a los dos candidatos más probables: “horses” y “zebras”.
+ Si establece **P superior** en 0,7, el modelo solo considera “horses”, ya que es el único candidato que se encuentra en el 70 % superior de la distribución de probabilidad. Si establece **P superior** en 0,9, el modelo considera los “horses” y “zebras”, ya que se encuentran en el 90 % superior de la distribución de probabilidad.

## Longitud
<a name="inference-length"></a>

Los modelos fundacionales suelen admitir los siguientes parámetros que limitan la longitud de la respuesta. A continuación se proporcionan ejemplos de estos parámetros.
+ **Longitud de la respuesta**: un valor exacto para especificar la cantidad mínima o máxima de tokens que se devolverán en la respuesta generada.
+ **Penalizaciones**: especifique el grado en el que se penalizarán los resultados de una respuesta. Algunos ejemplos son los siguientes:
  + Longitud de la respuesta.
  + Tokens repetidos en una respuesta.
  + Frecuencia de los tokens en una respuesta.
  + Tipos de tokens en una respuesta.
+ **Secuencias de parada**: especifique secuencias de caracteres que provocan que el modelo deje de generar más tokens. Si el modelo genera la secuencia de parada que haya especificado, dejará de generar tokens después de haber generado esa secuencia.

# Regiones y modelos compatibles con la ejecución de inferencia de modelos
<a name="inference-supported"></a>

La inferencia de modelos mediante modelos fundacionales se admite en todas las regiones y con todos los modelos compatibles con Amazon Bedrock. Para ver las regiones y los modelos compatibles con Amazon Bedrock, consulte [Modelos fundacionales compatibles en Amazon Bedrock](models-supported.md).

También puede ejecutar la inferencia de modelos con recursos de Amazon Bedrock distintos de los modelos fundacionales. Consulte las siguientes páginas para ver la disponibilidad de los distintos recursos por región y modelo:
+ [Regiones y modelos compatibles con los perfiles de inferencia](inference-profiles-support.md)
+ [Regiones y modelos compatibles con la administración de peticiones](prompt-management-supported.md)
**nota**  
[InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html) e [InvokeModelWithResponseStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModelWithResponseStream.html) solo funcionan con las peticiones de Administración de peticiones cuya configuración especifique un modelo Anthropic Claude o Meta Llama.
+ [Modelos y regiones compatibles para realizar ajustes](custom-model-fine-tuning.md#custom-model-supported)
+ [Uso de la importación de modelos personalizados para importar un modelo de código abierto personalizado a Amazon Bedrock](model-customization-import-model.md)
+ [Regiones y modelos compatibles con Barreras de protección para Amazon Bedrock](guardrails-supported.md)

# Requisitos previos para ejecutar la inferencia de modelos
<a name="inference-prereq"></a>

Para que un rol ejecute la inferencia de modelos, debe permitirle realizar las acciones de la API de invocación de modelos. Si su función tiene la política [AmazonBedrockFullAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonBedrockFullAccess)AWSgestionada adjunta, puede omitir esta sección. De lo contrario, asocie los siguientes permisos al rol para que pueda usar [InvokeModel[InvokeModelWithResponseStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModelWithResponseStream.html)](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html), [Converse](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html) y [ConverseStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ConverseStream.html)las acciones con todos los recursos compatibles en Amazon Bedrock:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ModelInvocationPermissions",
            "Effect": "Allow",
            "Action": [
                "bedrock:InvokeModel",
                "bedrock:InvokeModelWithResponseStream",
                "bedrock:GetInferenceProfile",
                "bedrock:ListInferenceProfiles",
                "bedrock:RenderPrompt",
                "bedrock:GetCustomModel",
                "bedrock:ListCustomModels",
                "bedrock:GetImportedModel",
                "bedrock:ListImportedModels",
                "bedrock:GetProvisionedModelThroughput",
                "bedrock:ListProvisionedModelThroughputs",
                "bedrock:GetGuardrail",
                "bedrock:ListGuardrails",
                "bedrock:ApplyGuardrail"
            ],
            "Resource": "*"
        }
    ]
}
```

------

Para restringir aún más los permisos, puede omitir acciones o puede especificar recursos y claves de condición para filtrar los permisos. Para obtener más información sobre las acciones, los recursos y las claves de condición, consulte los siguientes temas en la *Referencia de autorizaciones de servicio*:
+ [Acciones definidas por Amazon Bedrock](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrock.html#amazonbedrock-actions-as-permissions): obtenga información sobre las acciones, los tipos de recursos a los que puede aplicarlas en el campo `Resource` y las claves de condición que puede usar para filtrar los permisos en el campo `Condition`.
+ [Tipos de recursos definidos por Amazon Bedrock](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrock.html#amazonbedrock-resources-for-iam-policies): obtenga información sobre los tipos de recursos de Amazon Bedrock.
+ [Claves de condición de Amazon Bedrock](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonbedrock.html#amazonbedrock-policy-keys): obtenga información sobre las claves de condición de Amazon Bedrock.

En la siguiente lista se indica si necesita una acción, en función de su caso de uso:
+ `bedrock:InvokeModel`: necesario para realizar la invocación del modelo. Permite que el rol llame a las operaciones de la API [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html)y a las de [Converse.](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html)
+ `bedrock:InvokeModelWithResponseStream`: necesario para realizar la invocación del modelo y devolver las respuestas de streaming. Permite que el rol llame a las operaciones de la API [InvokeModelWithResponseStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModelWithResponseStream.html)y a las de [Converse](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html) Stream.
+ Las siguientes acciones permiten a un rol ejecutar la inferencia con recursos de Amazon Bedrock distintos de los modelos fundacionales:
  + `bedrock:GetInferenceProfile`: necesario para ejecutar la inferencia con un [perfil de inferencia](inference-profiles.md).
  + `bedrock:RenderPrompt`: necesario para invocar una petición de [Administración de peticiones](prompt-management.md).
  + `bedrock:GetCustomModel`: necesario para ejecutar la inferencia con un [modelo personalizado](custom-models.md).
  + `bedrock:GetImportedModel`: necesario para ejecutar la inferencia con un [modelo importado](model-customization-import-model.md).
  + `bedrock:GetProvisionedModelThroughput`— necesario para ejecutar la inferencia con [rendimiento aprovisionado](prov-throughput.md).
+ Las siguientes acciones permiten a un rol ver los recursos de Amazon Bedrock distintos de los modelos fundacionales en la consola de Amazon Bedrock y seleccionarlos:
  + `bedrock:ListInferenceProfiles`: necesario para elegir un [perfil de inferencia](custom-models.md) en la consola de Amazon Bedrock.
  + `bedrock:ListCustomModels`: necesario para elegir un [modelo personalizado](custom-models.md) en la consola de Amazon Bedrock.
  + `bedrock:ListImportedModels`: necesario para elegir un [modelo importado](model-customization-import-model.md) en la consola de Amazon Bedrock.
  + `bedrock:ListProvisionedModelThroughputs`: necesario para elegir un [rendimiento aprovisionado](prov-throughput.md) en la consola de Amazon Bedrock.
+ Las siguientes acciones permiten que un rol acceda a las barreras de protección y las aplique desde [Barreras de protección para Amazon Bedrock](guardrails.md) durante la invocación del modelo:
  + `bedrock:GetGuardrail`: necesario para usar una barrera de protección durante la invocación del modelo.
  + `bedrock:ApplyGuardrail`: necesario para aplicar una barrera de protección durante la invocación del modelo.
  + `bedrock:ListGuardrails`: necesario para elegir una barrera de protección en la consola de Amazon Bedrock.

# Generación de respuestas en la consola mediante áreas de juego
<a name="playgrounds"></a>

Los parques infantiles de Amazon Bedrock son una herramienta Consola de administración de AWS que proporciona una interfaz visual para experimentar con la ejecución de inferencias en diferentes modelos y utilizando diferentes configuraciones. Puede usar las áreas de juego para probar diferentes modelos y valores antes de integrarlos en su aplicación.

Ejecutar un mensaje en un patio de recreo equivale a realizar una solicitud [InvokeModel[InvokeModelWithResponseStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModelWithResponseStream.html)](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html), una [conversación](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html) o una [ConverseStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ConverseStream.html)solicitud en la API.

Amazon Bedrock ofrece las siguientes áreas de juego con las que puede experimentar:
+ **Chat o texto**: envíe peticiones de texto y genere respuestas o interactúe con la voz. Puede elegir uno de los siguientes modos:
  + **Chat**: envíe una petición de texto o interactúe con la voz. En el caso de las peticiones de texto, también puede incluir imágenes o documentos que complementen la petición. Las siguientes peticiones que envíe incluirán las anteriores como contexto, de forma que la secuencia de peticiones y respuestas se asemeja a una conversación.
  + **Petición única**: envía una sola petición y se genera una respuesta.
**nota**  
Speech-to-speech modelos como Amazon Nova Sonic solo están disponibles en modo chat. El modo de comparación no es compatible con los speech-to-speech modelos.
+ **Image**: envía una petición de texto para generar una imagen. También puede enviar una petición de imagen y especificar si desea editarla o generar variaciones de la misma.
+ **Multimodal (vista previa)**: envíe mensajes de texto y genere contenido multimodal. También es compatible con los modos de chat y de mensaje único.

El siguiente procedimiento describe cómo enviar una petición en el área de juego, las opciones que puede adaptar y las acciones que puede realizar una vez que el modelo genere una respuesta.

**Para usar un área de pruebas**

1. Si aún no lo ha hecho, solicite acceso a los modelos que quiera utilizar. Para obtener más información, consulte [Acceso a los modelos fundacionales de Amazon Bedrock](model-access.md).

1. Inicie sesión Consola de administración de AWS con una identidad de IAM que tenga permisos para usar la consola Amazon Bedrock. A continuación, abra la consola de Amazon Bedrock en [https://console.aws.amazon.com/bedrock.](https://console.aws.amazon.com/bedrock)

1. **En el panel de navegación, en Probar, selecciona Playground.**

1. Si está en el área de juego **Chat/texto**, seleccione un **Modo**.

1. Elija **Seleccionar modelo**. A continuación, elija un proveedor, un modelo y el rendimiento a usar. Para obtener más información sobre cómo aumentar el rendimiento, consulte [Aumento del rendimiento con la inferencia entre regiones](cross-region-inference.md) y [Aumento de la capacidad de invocación de modelos con el rendimiento aprovisionado en Amazon Bedrock](prov-throughput.md).

1. Envíe la siguiente información para generar una respuesta:
   + Petición: suele ser una o más frases de texto que configuran un escenario, una pregunta o una tarea para un modelo. Para obtener información sobre la creación de peticiones, consulte [Conceptos de ingeniería de peticiones](prompt-engineering-guidelines.md).

     Algunos modelos (consulte[Modelos y características del modelo compatibles](conversation-inference-supported-models-features.md)) permiten incluir un archivo de las siguientes maneras:
     + Seleccione el icono del archivo adjunto y elija el archivo que desea cargar.
     + Seleccione el icono del archivo adjunto y elija el objeto de Amazon S3 que desea cargar.
     + Arrastre un archivo hasta la petición.

     Incluya archivos para complementar su petición. Puede hacer referencia al archivo en el texto de la petición. Por ejemplo, puede escribir **Summarize this document for me** o **Tell me what's in this image**. Puede incluir los siguientes tipos de archivos:
     + **Documentos**: añada documentos para complementar la petición. Para obtener una lista de los tipos de archivos compatibles, consulte el `format` campo de [DocumentBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_DocumentBlock.html).
**aviso**  
Los nombres de documento son vulnerables a las inyecciones de peticiones, ya que el modelo podría interpretarlas como instrucciones por error. Por lo tanto, le recomendamos que especifique un nombre neutro.
     + **Imágenes**: agregue imágenes para complementar la petición, si el modelo admite entradas de imágenes y texto multimodales. Para ver una lista de los tipos de archivos compatibles, consulta el `format` campo de [ImageBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ImageBlock.html).
     + **Vídeos**: agregue vídeos para complementar la petición, si el modelo admite entradas de vídeo y texto multimodales. Para obtener una lista de los tipos de archivos compatibles, consulte el `format` campo del [VideoBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_VideoBlock.html).
**nota**  
Las restricciones de contenido varían según el modelo y la operación de la API subyacente. Para obtener más información, consulta [las restricciones de la API](inference-api-restrictions.md).
   + Configuraciones: ajustes que se adaptan para modificar la respuesta del modelo. Las configuraciones son las siguientes:
     + Parámetros de inferencia: valores que afectan o limitan la forma en que el modelo genera la respuesta. Para obtener más información, consulte [Influencia sobre la generación de respuestas con parámetros de inferencia](inference-parameters.md). Para ver los parámetros de inferencia de modelos específicos, consulte [Parámetros de solicitud de inferencia y campos de respuesta para los modelos fundacionales](model-parameters.md).
     + Peticiones del sistema: peticiones que proporcionan instrucciones o contexto al modelo acerca de la tarea que debe realizar o el personaje que debe adoptar. Para obtener más información y una lista de modelos que admiten las peticiones del sistema, consulte [Cómo mantener una conversación con las operaciones de la API Converse](conversation-inference.md).
     + Barreras de protección: filtra el contenido dañino o no deseado en las peticiones y modela las respuestas. Para obtener más información, consulte [Detección y filtrado del contenido dañino mediante Barreras de protección para Amazon Bedrock](guardrails.md).

1. (Opcional) Si un modelo admite la transmisión, el comportamiento predeterminado es transmitir las respuestas. Para desactivar la transmisión, seleccione el icono de opciones (![\[Vertical ellipsis icon representing a menu or more options.\]](http://docs.aws.amazon.com/es_es/bedrock/latest/userguide/images/icons/vertical-ellipsis.png)) y modifique la opción **Preferencias de streaming**.

1. (Opcional) Algunos modelos de generación de texto admiten la evaluación comparativa. Puede comparar las respuestas de diferentes modelos de la siguiente manera:

   1. Active el **Modo de comparación**.

   1. Elija **Seleccionar modelo**. A continuación, elija un proveedor, un modelo y el rendimiento a usar.

   1. Elija el icono de configuración (![\[Three horizontal sliders with adjustable circular controls for settings or parameters.\]](http://docs.aws.amazon.com/es_es/bedrock/latest/userguide/images/icons/configurations.png)) para modificar las configuraciones que se van a utilizar.

   1. Para añadir más modelos para compararlos, pulse el icono \$1 de la derecha, seleccione un modelo y modifique las configuraciones según sea necesario.

1. (Opcional) Si un modelo admite el almacenamiento en caché de peticiones, puede abrir el panel **Configuraciones** y activar **Almacenamiento en caché de peticiones** para permitir el almacenamiento en caché de las respuestas de entrada y del modelo a fin de reducir el costo y la latencia. Para obtener más información, consulte [Almacenamiento en caché de peticiones para una inferencia de modelos más rápida](prompt-caching.md).

1. Elija **Ejecutar** para ejecutar la consulta. Amazon Bedrock no almacena ningún texto, imagen ni documento que proporcione usted. Los datos solo se utilizan para generar la respuesta. 
**nota**  
Si la respuesta infringe la política de moderación de contenido, Amazon Bedrock no la mostrará. Si ha activado el streaming, Amazon Bedrock borra toda la respuesta si genera contenido que infrinja la política. Para obtener más información, diríjase a la consola de Amazon Bedrock, seleccione **Proveedores** y lea el texto de la sección **Limitaciones de contenido**.

1. El modelo devuelve la respuesta. Si utilizas el modo de chat del patio de recreo, puedes enviar un mensaje para responder a la respuesta y generar otra respuesta.

1. Después de generar una respuesta, tiene las siguientes opciones:
   + Para exportar la respuesta como archivo JSON, elija el icono de opciones (![\[Vertical ellipsis icon representing a menu or more options.\]](http://docs.aws.amazon.com/es_es/bedrock/latest/userguide/images/icons/vertical-ellipsis.png)) y seleccione **Exportar como JSON**.
   + Para ver la solicitud de la API que ha realizado, seleccione el icono de opciones (![\[Vertical ellipsis icon representing a menu or more options.\]](http://docs.aws.amazon.com/es_es/bedrock/latest/userguide/images/icons/vertical-ellipsis.png)) y **Ver solicitud de API**.
   + En el modo de chat del patio de recreo, puedes ver las métricas en la sección **Métricas del modelo**. Están disponibles las siguientes métricas del modelo:
     + **Latencia**: el tiempo que transcurre entre el momento en que Amazon Bedrock recibe la solicitud y el momento en que se devuelve la respuesta (en el caso de las respuestas que no son de transmisión) o el momento en que se completa la transmisión de la respuesta (en el caso de la transmisión de respuestas).
     + **Recuento de tokens de entrada**: la cantidad de tokens que se introducen en el modelo como entrada durante la inferencia.
     + **Recuento de tokens de salida**: la cantidad de tokens generados en respuesta a una petición. Las respuestas más largas y conversacionales requieren más tokens.
     + **Costo**: el costo de procesar la entrada y generar los tokens de salida.

     Para establecer los criterios de medición con los que desea que coincida la respuesta, elija **Definir criterios de medición** y defina las condiciones con las que debe coincidir el modelo. Después de aplicar los criterios, la sección **Métricas del modelo** muestra cuántos y qué criterios cumple la respuesta.

     Si no se cumplen los criterios, puede elegir un modelo diferente, volver a escribir la petición o modificar las configuraciones y volver a ejecutar la petición.

# Mejora de las respuestas de los modelos con el razonamiento de modelos
<a name="inference-reasoning"></a>

Algunos modelos fundacionales son capaces de realizar un razonamiento de modelos, mediante el cual pueden tomar una tarea más grande y compleja y dividirla en pasos más pequeños y sencillos. Este proceso a menudo se denomina razonamiento de cadena de pensamiento (CoT). Generalmente, el razonamiento de cadena de pensamiento puede mejorar la precisión del modelo al darle la oportunidad de pensar antes de responder. El razonamiento del modelo es más útil para tareas como el análisis de varios pasos, problemas matemáticos y tareas de razonamiento complejas. 

Por ejemplo, al abordar un problema matemático expresado en palabras, el modelo puede identificar primero las variables relevantes, luego construir ecuaciones a partir de la información proporcionada y, finalmente, resolver esas ecuaciones para llegar a la solución. Esta estrategia no solo minimiza los errores, sino que también hace que el proceso de razonamiento sea más transparente y fácil de seguir, lo que mejora la calidad de la salida del modelo fundacional.

El razonamiento del modelo no es necesario para todas las tareas y conlleva una sobrecarga adicional, que incluye un aumento de la latencia y de los tokens de salida. Las tareas sencillas que no necesitan explicaciones adicionales no son buenas candidatas para el razonamiento CoT.

Tenga en cuenta que no todos los modelos permiten configurar el número de tokens de salida que se asignan para el razonamiento del modelo.

El razonamiento del modelo está disponible para los siguientes modelos.


| Modelo fundacional | ID del modelo | Número de tokens | Configuración de razonamiento | 
| --- | --- | --- | --- | 
| Anthropic Claude Opus 4 | anthropic.claude-opus-4-20250514-v1:0 | Este modelo tendrá 32 768 tokens, que incluyen tanto los tokens de salida como los de razonamiento. | El razonamiento se puede activar o desactivar en este modelo mediante un presupuesto de tokens configurable. El razonamiento está deshabilitado de forma predeterminada. | 
| Anthropic Claude Sonnet 4 | anthropic.claude-sonnet-4-20250514-v1:0 | Este modelo tendrá 65 536 tokens, que incluyen tanto los tokens de salida como los de razonamiento. | El razonamiento se puede activar o desactivar en este modelo mediante un presupuesto de tokens configurable. El razonamiento está deshabilitado de forma predeterminada. | 
| Anthropic Claude 3.7 Sonnet | anthropic.claude-3-7-sonnet-20250219-v 1:0 | Este modelo tendrá 65 536 tokens, que incluyen tanto los tokens de salida como los de razonamiento. | El razonamiento se puede activar o desactivar en este modelo mediante un presupuesto de tokens configurable. El razonamiento está deshabilitado de forma predeterminada. | 
| DeepSeek DeepSeek-R1 | deepseek.r1-v1:0 | Este modelo tendrá 8192 tokens, que incluyen tanto los tokens de salida como los de razonamiento. La cantidad de tokens de pensamiento no se puede configurar y la cantidad máxima de tokens de salida no debe ser superior a 8192. | El razonamiento siempre está habilitado para este modelo. El modelo no admite la activación y desactivación de la capacidad de razonamiento. | 

# Optimización de la inferencia del modelo para la latencia
<a name="latency-optimized-inference"></a>

**nota**  
La función de inferencia optimizada para la latencia se encuentra en una versión preliminar Amazon Bedrock y está sujeta a cambios.

La inferencia optimizada con latencia para los modelos básicos Amazon Bedrock ofrece tiempos de respuesta más rápidos y una capacidad de respuesta mejorada para las aplicaciones de IA. Las versiones optimizadas de [https://docs.aws.amazon.com/nova/latest/userguide/what-is-nova.html](https://docs.aws.amazon.com/nova/latest/userguide/what-is-nova.html), el [modelo Haiku Claude 3.5 de Anthropic](https://aws.amazon.com/bedrock/claude/) y los [modelos Llama 3.1 405B y 70B de Meta](https://aws.amazon.com/bedrock/llama/) ofrecen una latencia significativamente reducida sin comprometer la precisión. 

El acceso a la capacidad de optimización de la latencia no requiere una configuración adicional ni el refinamiento del modelo, lo que permite mejorar inmediatamente las aplicaciones existentes con tiempos de respuesta más rápidos. Puede establecer el parámetro “Latency” en “optimized” al llamar a la API en tiempo de ejecución de Amazon Bedrock. Si selecciona “standard” como opción de invocación, sus solicitudes se atenderán con una inferencia estándar. De forma predeterminada, todas las solicitudes se envían a través de la opción “standard”.

```
"performanceConfig" : {
    "latency" : "standard | optimized" 
}
```

Cuando alcance la cuota de uso para la optimización de la latencia de un modelo, intentaremos atender la solicitud con una latencia estándar. En esos casos, la solicitud se cobrará según las tarifas de latencia estándar. La configuración de latencia de una solicitud atendida está visible en las respuestas y los registros de la API. AWS CloudTrail También puedes ver las métricas de las solicitudes optimizadas para la latencia en los Amazon CloudWatch registros, en la sección «model-id\$1latency-optimization».

La inferencia optimizada para latencia está disponible para los modelos Llama 3.1 70B y 405B de Meta, así como para el modelo Haiku Claude 3.5 de Anthropic, en las regiones Este de EE. UU. (Ohio) y Oeste de EE. UU. (Oregón) a través de la [inferencia entre regiones](https://docs.aws.amazon.com/bedrock/latest/userguide/cross-region-inference.html).

La inferencia optimizada para latencia está disponible para Amazon Nova Pro en las regiones Este de EE. UU (Norte de Virginia), Este de EE. UU. (Ohio) y Oeste de EE. UU. (Oregón) a través de la [inferencia entre regiones](https://docs.aws.amazon.com/bedrock/latest/userguide/cross-region-inference.html).

Para obtener más información sobre los precios, consulte la [página de precios](https://aws.amazon.com/bedrock/pricing/).

**nota**  
 Actualmente, la inferencia optimizada para latencia de Llama 3.1 405B admite solicitudes con un número total de tokens de entrada y salida de hasta 11 000. Las solicitudes con mayor cantidad de tokens se revertirán al modo estándar. 

En la siguiente tabla se muestran los perfiles de inferencia que admiten la optimización de la latencia:


| Proveedor | Modelo | ID del modelo | Compatibilidad con perfiles de inferencia entre regiones | 
| --- | --- | --- | --- | 
| Amazon | Nova Pro | amazon. nova-pro-v1:0 |  us-east-1 us-east-2  | 
| Anthropic | Claude 3.5 Haiku | anthropic.claude-3-5-haiku-20241022-v1:0 |  us-east-2 us-west-2  | 
| Meta | Llama 3.1 405B Instruct | metal.llama3-1-405 1:0 b-instruct-v |  us-east-2  | 
| Meta | Llama 3.1 70B Instruct | b-instruct-vmeta.llama3-1-70 1:0 |  us-east-2 us-west-2  | 

Para obtener más información sobre los perfiles de inferencia, consulte [Regiones y modelos compatibles con los perfiles de inferencia](inference-profiles-support.md).

# Genere respuestas utilizando OpenAI APIs
<a name="bedrock-mantle"></a>

Amazon Bedrock proporciona puntos de enlace de API OpenAI compatibles para la inferencia de modelos, con la tecnología de Mantle, un motor de inferencia distribuido para el servicio de modelos de aprendizaje automático a gran escala. Estos puntos de enlace le permiten utilizar los modelos OpenAI SDKs y herramientas familiares de Amazon Bedrock, lo que le permite migrar las aplicaciones existentes con cambios de código mínimos; basta con actualizar la URL base y la clave de API.

También ofrece otras ventajas como las siguientes:
+ Inferencia **asíncrona: Support para cargas de trabajo de inferencia** de larga duración a través de la API de respuestas
+ **Gestión de conversaciones avanzada:** reconstruye automáticamente el contexto sin pasar manualmente el historial de conversaciones con cada solicitud
+ **Uso simplificado de las herramientas**: integración optimizada para los flujos de trabajo de los agentes
+ **Modos de respuesta flexibles**: Support para respuestas de streaming y no streaming
+ **Migración sencilla**: compatible con las bases de código OpenAI del SDK existentes

## Regiones y puntos finales compatibles
<a name="bedrock-mantle-supported"></a>

Amazon Bedrock está disponible en las siguientes AWS regiones:


| Nombre de la región | Región | Punto de conexión | 
| --- | --- | --- | 
| Este de EE. UU. (Ohio) | us-east-2 | bedrock-mantle.us-east-2.api.aws | 
| Este de EE. UU. (Norte de Virginia) | us-east-1 | bedrock-mantle.us-east-1.api.aws | 
| Oeste de EE. UU. (Oregón) | us-west-2 | bedrock-mantle.us-west-2.api.aws | 
| Asia-Pacífico (Yakarta) | ap-southeast-3 | bedrock-mantle.ap-southeast-3.api.aws | 
| Asia-Pacífico (Mumbai) | ap-south-1 | bedrock-mantle.ap-south-1.api.aws | 
| Asia-Pacífico (Tokio) | ap-northeast-1 | bedrock-mantle.ap-northeast-1.api.aws | 
| Europa (Fráncfort) | eu-central-1 | bedrock-mantle.eu-central-1.api.aws | 
| Europa (Irlanda) | eu-west-1 | bedrock-mantle.eu-west-1.api.aws | 
| Europa (Londres) | eu-west-2 | bedrock-mantle.eu-west-2.api.aws | 
| Europa (Milán) | eu-south-1 | bedrock-mantle.eu-south-1.api.aws | 
| Europa (Estocolmo) | eu-north-1 | bedrock-mantle.eu-north-1.api.aws | 
| América del Sur (São Paulo) | sa-east-1 | bedrock-mantle.sa-east-1.api.aws | 

## Requisitos previos
<a name="bedrock-mantle-prereq"></a>

Antes de usarlo, asegúrese de tener lo siguiente: OpenAI APIs
+ **Autenticación**: puede autenticarse mediante:
  + Clave de API de Amazon Bedrock (necesaria para el OpenAI SDK)
  + AWS credenciales (compatibles con las solicitudes HTTP)
+ **OpenAISDK** (opcional): instala el SDK de OpenAI Python si utilizas solicitudes basadas en el SDK.
+ **Variables de entorno**: defina las siguientes variables de entorno:
  + `OPENAI_API_KEY`— Configúrelo en su clave de API de Amazon Bedrock
  + `OPENAI_BASE_URL`— Configúrelo en el punto final de Amazon Bedrock de su región (por ejemplo,` https://bedrock-mantle.us-east-1.api.aws/v1`)

## API de modelos
<a name="bedrock-mantle-models"></a>

La API de modelos te permite descubrir los modelos disponibles en Amazon Bedrock con tecnología Mantle. Use esta API para recuperar una lista de modelos que puede usar con la API de respuestas y la API de finalización de chats. Para obtener información completa sobre la API, consulta la [documentación de OpenAI los modelos](https://platform.openai.com/docs/api-reference/models).

### Enumere los modelos disponibles
<a name="bedrock-mantle-models-list"></a>

Para ver una lista de los modelos disponibles, selecciona la pestaña del método que prefieras y, a continuación, sigue los pasos:

------
#### [ OpenAI SDK (Python) ]

```
# List all available models using the OpenAI SDK
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables

from openai import OpenAI

client = OpenAI()

models = client.models.list()

for model in models.data:
    print(model.id)
```

------
#### [ HTTP request ]

Realiza una solicitud GET a`/v1/models`:

```
# List all available models
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables

curl -X GET $OPENAI_BASE_URL/models \
   -H "Authorization: Bearer $OPENAI_API_KEY"
```

------

## API de respuestas
<a name="bedrock-mantle-responses"></a>

La API de respuestas proporciona una gestión de conversaciones con estado y admite la transmisión, el procesamiento en segundo plano y las interacciones en varios turnos. Para obtener información completa sobre la API, consulta la documentación de [OpenAIRespuestas](https://platform.openai.com/docs/api-reference/responses).

### Solicitud básica
<a name="bedrock-mantle-responses-create"></a>

Para crear una respuesta, selecciona la pestaña del método que prefieras y, a continuación, sigue estos pasos:

------
#### [ OpenAI SDK (Python) ]

```
# Create a basic response using the OpenAI SDK
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables

from openai import OpenAI

client = OpenAI()

response = client.responses.create(
    model="openai.gpt-oss-120b",
    input=[
        {"role": "user", "content": "Hello! How can you help me today?"}
    ]
)

print(response)
```

------
#### [ HTTP request ]

Realiza una solicitud POST a`/v1/responses`:

```
# Create a basic response
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables

curl -X POST $OPENAI_BASE_URL/responses \
   -H "Content-Type: application/json" \
   -H "Authorization: Bearer $OPENAI_API_KEY" \
   -d '{
    "model": "openai.gpt-oss-120b",
    "input": [
        {"role": "user", "content": "Hello! How can you help me today?"}
    ]
}'
```

------

### Transmita las respuestas
<a name="bedrock-mantle-responses-streaming"></a>

Para recibir los eventos de respuesta de forma incremental, elige la pestaña del método que prefieras y, a continuación, sigue estos pasos:

------
#### [ OpenAI SDK (Python) ]

```
# Stream response events incrementally using the OpenAI SDK
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables

from openai import OpenAI

client = OpenAI()

stream = client.responses.create(
    model="openai.gpt-oss-120b",
    input=[{"role": "user", "content": "Tell me a story"}],
    stream=True
)

for event in stream:
    print(event)
```

------
#### [ HTTP request ]

Realiza una solicitud POST `/v1/responses` con el siguiente `stream` valor: `true`

```
# Stream response events incrementally
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables

curl -X POST $OPENAI_BASE_URL/responses \
   -H "Content-Type: application/json" \
   -H "Authorization: Bearer $OPENAI_API_KEY" \
   -d '{
    "model": "openai.gpt-oss-120b",
    "input": [
        {"role": "user", "content": "Tell me a story"}
    ],
    "stream": true
}'
```

------

## API de finalización de chat
<a name="bedrock-mantle-chat-completions"></a>

La API Chat Completions genera respuestas conversacionales. Para obtener información completa sobre la API, consulta la documentación de [OpenAIChat Completions](https://platform.openai.com/docs/api-reference/chat/create).

### Creación de una finalización de chat
<a name="bedrock-mantle-chat-completions-create"></a>

Para crear un chat completo, elige la pestaña del método que prefieras y, a continuación, sigue estos pasos:

------
#### [ OpenAI SDK (Python) ]

Configure el OpenAI cliente mediante variables de entorno:

```
# Create a chat completion using the OpenAI SDK
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables

from openai import OpenAI

client = OpenAI()

completion = client.chat.completions.create(
    model="openai.gpt-oss-120b",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Hello!"}
    ]
)

print(completion.choices[0].message)
```

------
#### [ HTTP request ]

Realice una solicitud POST a`/v1/chat/completions`:

```
# Create a chat completion
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables

curl -X POST $OPENAI_BASE_URL/chat/completions \
   -H "Content-Type: application/json" \
   -H "Authorization: Bearer $OPENAI_API_KEY" \
   -d '{
    "model": "openai.gpt-oss-120b",
    "messages": [
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Hello!"}
    ]
}'
```

------

### Habilitar la transmisión
<a name="bedrock-mantle-chat-completions-streaming"></a>

Para recibir respuestas de forma incremental, selecciona la pestaña del método que prefieras y sigue los pasos:

------
#### [ OpenAI SDK (Python) ]

```
# Stream chat completion responses incrementally using the OpenAI SDK
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables

from openai import OpenAI

client = OpenAI()

stream = client.chat.completions.create(
    model="openai.gpt-oss-120b",
    messages=[{"role": "user", "content": "Tell me a story"}],
    stream=True
)

for chunk in stream:
    if chunk.choices[0].delta.content is not None:
        print(chunk.choices[0].delta.content, end="")
```

------
#### [ HTTP request ]

Realiza una solicitud POST `/v1/chat/completions` con el siguiente ` stream` ajuste: `true`

```
# Stream chat completion responses incrementally
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables

curl -X POST $OPENAI_BASE_URL/chat/completions \
   -H "Content-Type: application/json" \
   -H "Authorization: Bearer $OPENAI_API_KEY" \
   -d '{
    "model": "openai.gpt-oss-120b",
    "messages": [
        {"role": "user", "content": "Tell me a story"}
    ],
    "stream": true
}'
```

------

# Envío de solicitudes y generación de respuestas mediante la API
<a name="inference-api"></a>

Amazon Bedrock ofrece las siguientes operaciones de API para realizar la inferencia de modelos:
+ [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html)— Envíe un mensaje y genere una respuesta. El cuerpo de la solicitud es específico del modelo. Para generar respuestas en streaming, utilice [InvokeModelWithResponseStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModelWithResponseStream.html).
+ [Converse](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html): envíe una petición y genere respuestas con una estructura unificada en todos los modelos. Los campos de solicitud específicos del modelo se pueden especificar en el campo `additionalModelRequestFields`. También puede incluir peticiones del sistema y conversaciones anteriores para ofrecer contexto. Para generar respuestas de streaming, utilice [ConverseStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ConverseStream.html).
+ [StartAsyncInvoke](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_StartAsyncInvoke.html)— Envíe un mensaje y genere una respuesta de forma asíncrona que se pueda recuperar más adelante. Se utiliza para generar vídeos.
+ [InvokeModelWithBidirectionalStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModelWithBidirectionalStream.html) – 
+ API Chat Completions de OpenAI: utilice la [API Chat Completions de OpenAI](https://platform.openai.com/docs/api-reference/chat/create) con los modelos compatibles con Amazon Bedrock para generar una respuesta.

**nota**  
Se aplican restricciones a las siguientes operaciones:`InvokeModel`,`InvokeModelWithResponseStream`, `Converse` y. `ConverseStream` Consulte [las restricciones de la API](inference-api-restrictions.md) para obtener más información.

Para la inferencia del modelo, debe determinar los siguientes parámetros:
+ ID de modelo: el ID o nombre de recurso de Amazon (ARN) del modelo o perfil de inferencia que se va a utilizar en el campo `modelId` para la inferencia. En la siguiente tabla se describe cómo IDs buscar diferentes tipos de recursos:  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/bedrock/latest/userguide/inference-api.html)
+ Cuerpo de la solicitud: contiene los parámetros de inferencia de un modelo y otras configuraciones. Cada modelo base tiene sus propios parámetros de inferencia. Los parámetros de inferencia de un modelo personalizado o aprovisionado dependen del modelo base a partir del cual se creó. Para obtener más información, consulte [Parámetros de solicitud de inferencia y campos de respuesta para los modelos fundacionales](model-parameters.md).

Seleccione un tema para aprender a usar la invocación APIs modelo.

**Topics**
+ [Envíe un único mensaje con InvokeModel](inference-invoke.md)
+ [Invocación de un modelo con la API Chat Completions de OpenAI](inference-chat-completions.md)
+ [Cómo mantener una conversación con las operaciones de la API Converse](conversation-inference.md)
+ [Restricciones de API](inference-api-restrictions.md)

# Envíe un único mensaje con InvokeModel
<a name="inference-invoke"></a>

La inferencia se realiza en una sola solicitud mediante las operaciones [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html)y la [InvokeModelWithResponseStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModelWithResponseStream.html)API y especificando un modelo. Los modelos de Amazon Bedrock difieren en cuanto a si aceptan entradas de texto, imagen o vídeo y si pueden producir salidas de texto, imagen o incrustaciones. Algunos modelos pueden devolver la respuesta en una secuencia. Para comprobar la compatibilidad del modelo con la entrada, la salida y la transmisión, realice una de las siguientes acciones:
+ Compruebe el valor en las columnas **Modalidades de entrada**, **Modalidades de salida** o **Compatibles con la transmisión** para un modelo en [Modelos fundacionales compatibles en Amazon Bedrock](models-supported.md).
+ Envía una [GetFoundationModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_GetFoundationModel.html)solicitud con el ID del modelo y comprueba los valores del `responseStreamingSupported` campo `inputModalities``outputModalities`, y.

Ejecute la inferencia del modelo en un mensaje enviando una [InvokeModelWithResponseStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModelWithResponseStream.html)solicitud [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html)o con un punto de [ejecución de Amazon Bedrock](https://docs.aws.amazon.com/general/latest/gr/bedrock.html#br-rt).

**nota**  
Se aplican restricciones a las siguientes operaciones:`InvokeModel`, `InvokeModelWithResponseStream``Converse`, y. `ConverseStream` Consulte [las restricciones de la API](inference-api-restrictions.md) para obtener más información.

Los siguientes campos son obligatorios:


****  

| Campo | Caso de uso | 
| --- | --- | 
| modelId | Especificar el modelo, el perfil de inferencia o la petición desde Administración de peticiones que se va a utilizar. Para obtener más información sobre cómo encontrar este valor, consulte [Envío de solicitudes y generación de respuestas mediante la API](inference-api.md). | 
| cuerpo | Para especificar los parámetros de inferencia de un modelo. Para ver los parámetros de inferencia de los diferentes modelos, consulte [Parámetros de solicitud de inferencia y campos de respuesta para los modelos fundacionales](model-parameters.md). Si especifica una petición desde Administración de peticiones en el campo modelId, omita este campo (si lo incluye, se ignorará). | 

Los siguientes campos son opcionales:


****  

| Campo | Caso de uso | 
| --- | --- | 
| accept | Para especificar el tipo de soporte del cuerpo de la solicitud. Para obtener más información, consulte Media types en el [sitio web de Swagger](https://swagger.io/specification/). | 
| contentType | Para especificar el tipo de soporte del cuerpo de la respuesta. Para obtener más información, consulte Media types en el [sitio web de Swagger](https://swagger.io/specification/). | 
| performanceConfigLatency | Especificar si se debe optimizar un modelo para la latencia. Para obtener más información, consulte [Optimización de la inferencia del modelo para la latencia](latency-optimized-inference.md). | 
| guardrailIdentifier | Para especificar una barrera de protección para aplicarla a la petición y a la respuesta. Para obtener más información, consulte [Prueba de la barrera de protección](guardrails-test.md). | 
| guardrailVersion | Para especificar una barrera de protección para aplicarla a la petición y a la respuesta. Para obtener más información, consulte [Prueba de la barrera de protección](guardrails-test.md). | 
| trace | Para especificar si se debe devolver el seguimiento de la barrera de protección que especifique. Para obtener más información, consulte [Prueba de la barrera de protección](guardrails-test.md). | 
| ServiceTier | Para especificar el nivel de servicio de una solicitud. Para obtener más información, consulte [Niveles de servicio para optimizar el rendimiento y los costes](service-tiers-inference.md). | 

## Ejemplos de código de modelo de invocación
<a name="inference-example-invoke"></a>

En este tema se proporcionan algunos ejemplos básicos para ejecutar inferencias mediante una única solicitud con la [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html)API. Para ver más ejemplos con diferentes modelos, consulte los siguientes recursos:
+ Elija un ejemplo en el tema [Ejemplos de código para Amazon Bedrock Runtime mediante AWS SDKs](service_code_examples_bedrock-runtime.md).
+ Consulte la referencia del parámetro de inferencia del modelo deseado en [Parámetros de solicitud de inferencia y campos de respuesta para los modelos fundacionales](model-parameters.md).

En los ejemplos siguientes se supone que ha configurado el acceso mediante programación de forma que se autentica automáticamente en el AWS CLI SDK para Python (Boto3) de forma predeterminada al ejecutar estos ejemplos. Región de AWS Para obtener información acerca de cómo configurar el acceso mediante programación, consulte [Introducción a la API](getting-started-api.md).

**nota**  
Consulte los puntos siguientes antes de probar los ejemplos:  
Debe probar estos ejemplos en Este de EE. UU. (Norte de Virginia) (us-east-1), que admite todos los modelos utilizados en los ejemplos.
El parámetro `body` puede ser grande, por lo que, en algunos ejemplos de la CLI, se le pedirá que cree un archivo JSON y lo incluya en el argumento `--body` en lugar de especificarlo en la línea de comandos.
Para los ejemplos de imagen y vídeo, se le pedirá que utilice su propia imagen y vídeo. En los ejemplos se supone que el archivo de imagen tiene un nombre *image.png* y que el archivo de vídeo tiene un nombre. *video.mp4*
Puede que tenga que convertir las imágenes o vídeos en una cadena codificada en base64 o cargarlos en una ubicación de Amazon S3. En los ejemplos, tendrá que reemplazar los marcadores de posición por la cadena codificada en base64 o la ubicación en S3 reales.

Expanda una sección para probar algunos ejemplos de código básicos.

### Generación de texto con una petición de texto
<a name="w2aac13c32c33c17c19c13b1"></a>

Los siguientes ejemplos generan una respuesta de texto a una petición de texto utilizando el modelo Amazon Titan Text Premier. Elija la pestaña del método que prefiera y siga estos pasos:

------
#### [ CLI ]

Ejecute el siguiente comando en una terminal y busque la respuesta generada en un archivo llamado*invoke-model-output.txt*.

```
aws bedrock-runtime invoke-model \
    --model-id amazon.titan-text-premier-v1:0 \
    --body '{
        "inputText": "Describe the purpose of a 'hello world' program in one line.",
        "textGenerationConfig": {
            "maxTokenCount": 512,
            "temperature": 0.5
        }
    }' \
    --cli-binary-format raw-in-base64-out \
    invoke-model-output.txt
```

------
#### [ Python ]

Ejecute el siguiente ejemplo de código de Python para generar una respuesta de texto:

```
# Use the native inference API to send a text message to Amazon Titan Text.

import boto3
import json

from botocore.exceptions import ClientError

# Create a Bedrock Runtime client in the AWS Region of your choice.
client = boto3.client("bedrock-runtime", region_name="us-east-1")

# Set the model ID, e.g., Titan Text Premier.
model_id = "amazon.titan-text-premier-v1:0"

# Define the prompt for the model.
prompt = "Describe the purpose of a 'hello world' program in one line."

# Format the request payload using the model's native structure.
native_request = {
    "inputText": prompt,
    "textGenerationConfig": {
        "maxTokenCount": 512,
        "temperature": 0.5,
    },
}

# Convert the native request to JSON.
request = json.dumps(native_request)

try:
    # Invoke the model with the request.
    response = client.invoke_model(modelId=model_id, body=request)

except (ClientError, Exception) as e:
    print(f"ERROR: Can't invoke '{model_id}'. Reason: {e}")
    exit(1)

# Decode the response body.
model_response = json.loads(response["body"].read())

# Extract and print the response text.
response_text = model_response["results"][0]["outputText"]
print(response_text)
```

------

### Genere texto con un mensaje de texto utilizando el nivel de servicio
<a name="w2aac13c32c33c17c19c13b3"></a>

Los siguientes ejemplos generan una respuesta de texto a una solicitud de texto mediante el modelo OpenAI GPT con un nivel de servicio para priorizar la solicitud. Elija la pestaña del método que prefiera y siga estos pasos:

------
#### [ CLI ]

Ejecuta el siguiente comando en un terminal y valida el nivel de servicio en la respuesta.

```
aws bedrock-runtime invoke-model \
    --model-id openai.gpt-oss-120b-1:0 \
    --body '{
        "messages": [
            {
                "role": "user",
                "content": "Describe the purpose of a '\''hello world'\'' program in one line."
            }
        ],
        "max_tokens": 512,
        "temperature": 0.7
    }' \
    --content-type application/json \
    --accept application/json \
    --service-tier priority \
    --cli-binary-format raw-in-base64-out
```

------
#### [ Python ]

Ejecute el siguiente ejemplo de código de Python para generar una respuesta de texto con el nivel de servicio:

```
import boto3
import json

# Create a Bedrock Runtime client
bedrock_runtime = boto3.client(
    service_name="bedrock-runtime",
    region_name="us-east-1"
)

# Define the model ID and request body
model_id = "openai.gpt-oss-120b-1:0"
body = json.dumps({
    "messages": [
        {
            "role": "user",
            "content": "Describe the purpose of a 'hello world' program in one line."
        }
    ],
    "max_tokens": 512,
    "temperature": 0.7
})

# Make the request with service tier
response = bedrock_runtime.invoke_model(
    modelId=model_id,
    body=body,
    contentType="application/json",
    accept="application/json",
    serviceTier="priority"
)

# Parse and print the response
response_body = json.loads(response["body"])
print(response_body)
```

------

### Generación de una imagen mediante un petición de texto
<a name="w2aac13c32c33c17c19c13b5"></a>

Los siguientes ejemplos de código generan una imagen mediante una petición de texto con el modelo Stable Diffusion XL 1.0. Elija la pestaña del método que prefiera y siga estos pasos:

------
#### [ CLI ]

Ejecute el siguiente comando en una terminal y busque la respuesta generada en un archivo llamado*invoke-model-output.txt*. Los bytes que representan la imagen se encuentran en el campo `base64` de la respuesta:

```
aws bedrock-runtime invoke-model \
    --model-id stability.stable-diffusion-xl-v1 \
    --body '{
        "text_prompts": [{"text": "A stylized picture of a cute old steampunk robot."}],
        "style_preset": "photographic",
        "seed": 0,
        "cfg_scale": 10,
        "steps": 30
    }' \
    --cli-binary-format raw-in-base64-out \
    invoke-model-output.txt
```

------
#### [ Python ]

Ejecute el siguiente ejemplo de código de Python para generar una imagen y buscar el archivo de *stability\$11.png* imagen resultante en una carpeta llamada*output*.

```
# Use the native inference API to create an image with Amazon Titan Image Generator

import base64
import boto3
import json
import os
import random

# Create a Bedrock Runtime client in the AWS Region of your choice.
client = boto3.client("bedrock-runtime", region_name="us-east-1")

# Set the model ID, e.g., Titan Image Generator G1.
model_id = "amazon.titan-image-generator-v2:0"

# Define the image generation prompt for the model.
prompt = "A stylized picture of a cute old steampunk robot."

# Generate a random seed.
seed = random.randint(0, 2147483647)

# Format the request payload using the model's native structure.
native_request = {
    "taskType": "TEXT_IMAGE",
    "textToImageParams": {"text": prompt},
    "imageGenerationConfig": {
        "numberOfImages": 1,
        "quality": "standard",
        "cfgScale": 8.0,
        "height": 512,
        "width": 512,
        "seed": seed,
    },
}

# Convert the native request to JSON.
request = json.dumps(native_request)

# Invoke the model with the request.
response = client.invoke_model(modelId=model_id, body=request)

# Decode the response body.
model_response = json.loads(response["body"].read())

# Extract the image data.
base64_image_data = model_response["images"][0]

# Save the generated image to a local folder.
i, output_dir = 1, "output"
if not os.path.exists(output_dir):
    os.makedirs(output_dir)
while os.path.exists(os.path.join(output_dir, f"titan_{i}.png")):
    i += 1

image_data = base64.b64decode(base64_image_data)

image_path = os.path.join(output_dir, f"titan_{i}.png")
with open(image_path, "wb") as file:
    file.write(image_data)

print(f"The generated image has been saved to {image_path}")
```

------

### Generación de incrustaciones a partir de texto
<a name="w2aac13c32c33c17c19c13b9"></a>

Los siguientes ejemplos utilizan el modelo Amazon Titan Text Embeddings V2 para generar incrustaciones binarias para una entrada de texto. Elija la pestaña del método que prefiera y siga estos pasos:

------
#### [ CLI ]

Ejecuta el siguiente comando en una terminal y busca la respuesta generada en un archivo llamado*invoke-model-output.txt*. Las incrustaciones resultantes están en el campo `binary`.

```
aws bedrock-runtime invoke-model \
    --model-id amazon.titan-embed-text-v2:0 \
    --body '{
        "inputText": "What are the different services that you offer?",
        "embeddingTypes": ["binary"]
    }' \
    --cli-binary-format raw-in-base64-out \
    invoke-model-output.txt
```

------
#### [ Python ]

Ejecute el siguiente ejemplo de código de Python para generar incrustaciones para el texto proporcionado:

```
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to generate an embedding with the Amazon Titan Text Embeddings V2 Model
"""

import json
import logging
import boto3


from botocore.exceptions import ClientError


logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)


def generate_embedding(model_id, body):
    """
    Generate an embedding with the vector representation of a text input using Amazon Titan Text Embeddings G1 on demand.
    Args:
        model_id (str): The model ID to use.
        body (str) : The request body to use.
    Returns:
        response (JSON): The embedding created by the model and the number of input tokens.
    """

    logger.info("Generating an embedding with Amazon Titan Text Embeddings V2 model %s", model_id)

    bedrock = boto3.client(service_name='bedrock-runtime')

    accept = "application/json"
    content_type = "application/json"

    response = bedrock.invoke_model(
        body=body, modelId=model_id, accept=accept, contentType=content_type
    )

    response_body = json.loads(response.get('body').read())

    return response_body


def main():
    """
    Entrypoint for Amazon Titan Embeddings V2 - Text example.
    """

    logging.basicConfig(level=logging.INFO,
                        format="%(levelname)s: %(message)s")

    model_id = "amazon.titan-embed-text-v2:0"
    input_text = "What are the different services that you offer?"


    # Create request body.
    body = json.dumps({
        "inputText": input_text,
        "embeddingTypes": ["binary"]
    })


    try:

        response = generate_embedding(model_id, body)

        print(f"Generated an embedding: {response['embeddingsByType']['binary']}") # returns binary embedding
        print(f"Input text: {input_text}")
        print(f"Input Token count:  {response['inputTextTokenCount']}")

    except ClientError as err:
        message = err.response["Error"]["Message"]
        logger.error("A client error occurred: %s", message)
        print("A client error occured: " +
              format(message))

    else:
        print(f"Finished generating an embedding with Amazon Titan Text Embeddings V2 model {model_id}.")


if __name__ == "__main__":
    main()
```

------

### Generación de incrustaciones a partir de una imagen
<a name="w2aac13c32c33c17c19c13c11"></a>

Los siguientes ejemplos utilizan el modelo Amazon Titan Multimodal Embeddings G1 para generar incrustaciones para una entrada de imagen. Elija la pestaña del método que prefiera y siga estos pasos:

------
#### [ CLI ]

Abra una nueva ventana de terminal de la siguiente manera:

1. Convierte una imagen titulada *image.png* en tu carpeta actual en una cadena codificada en base64 y escríbela en un archivo titulado *image.txt* ejecutando el siguiente comando:

   ```
   base64 -i image.png -o image.txt
   ```

1. Crea un archivo JSON llamado *image-input-embeddings-output.json* y pega el siguiente JSON y *\$1\$1image-base64\$1* sustitúyelo por el contenido del *image.txt* archivo (asegúrate de que no haya ninguna línea nueva al final de la cadena):

   ```
   {
       "inputImage": "${image-base64}",
       "embeddingConfig": {
           "outputEmbeddingLength": 256
       }
   }
   ```

1. Ejecute el siguiente comando, especificando el *image-input-embeddings-output.json* archivo como cuerpo.

   ```
   aws bedrock-runtime invoke-model \
       --model-id amazon.titan-embed-image-v1 \
       --body file://image-input-embeddings-output.json \
       --cli-binary-format raw-in-base64-out \
       invoke-model-output.txt
   ```

1. Busque las incrustaciones resultantes en el archivo. *invoke-model-output.txt*

------
#### [ Python ]

En el siguiente script de Python, */path/to/image* sustitúyalo por la ruta a una imagen real. A continuación, ejecute el script para generar incrustaciones:

```
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to generate embeddings from an image with the Amazon Titan Multimodal Embeddings G1 model (on demand).
"""

import base64
import json
import logging
import boto3

from botocore.exceptions import ClientError

class EmbedError(Exception):
    "Custom exception for errors returned by Amazon Titan Multimodal Embeddings G1"

    def __init__(self, message):
        self.message = message

logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)


def generate_embeddings(model_id, body):
    """
    Generate a vector of embeddings for an image input using Amazon Titan Multimodal Embeddings G1 on demand.
    Args:
        model_id (str): The model ID to use.
        body (str) : The request body to use.
    Returns:
        response (JSON): The embeddings that the model generated, token information, and the
        reason the model stopped generating embeddings.
    """

    logger.info("Generating embeddings with Amazon Titan Multimodal Embeddings G1 model %s", model_id)

    bedrock = boto3.client(service_name='bedrock-runtime')

    accept = "application/json"
    content_type = "application/json"

    response = bedrock.invoke_model(
        body=body, modelId=model_id, accept=accept, contentType=content_type
    )

    response_body = json.loads(response.get('body').read())

    finish_reason = response_body.get("message")

    if finish_reason is not None:
        raise EmbedError(f"Embeddings generation error: {finish_reason}")

    return response_body


def main():
    """
    Entrypoint for Amazon Titan Multimodal Embeddings G1 example.
    """

    logging.basicConfig(level=logging.INFO,
                        format="%(levelname)s: %(message)s")

    # Read image from file and encode it as base64 string.
    with open("/path/to/image", "rb") as image_file:
        input_image = base64.b64encode(image_file.read()).decode('utf8')

    model_id = 'amazon.titan-embed-image-v1'
    output_embedding_length = 256

    # Create request body.
    body = json.dumps({
        "inputImage": input_image,
        "embeddingConfig": {
            "outputEmbeddingLength": output_embedding_length
        }
    })


    try:

        response = generate_embeddings(model_id, body)

        print(f"Generated image embeddings of length {output_embedding_length}: {response['embedding']}")

    except ClientError as err:
        message = err.response["Error"]["Message"]
        logger.error("A client error occurred: %s", message)
        print("A client error occured: " +
              format(message))
        
    except EmbedError as err:
        logger.error(err.message)
        print(err.message)

    else:
        print(f"Finished generating image embeddings with Amazon Titan Multimodal Embeddings G1 model {model_id}.")


if __name__ == "__main__":
    main()
```

------

### Generación de una respuesta de texto a una imagen con una petición del texto que la acompaña
<a name="w2aac13c32c33c17c19c13c13"></a>

Elija la pestaña del método que prefiera y siga estos pasos:

------
#### [ CLI ]

En el siguiente ejemplo, se utiliza el modelo Anthropic Claude 3 Haiku para generar una respuesta, dada una imagen y una petición de texto que pregunta por el contenido de la imagen. Abra una nueva ventana de terminal de la siguiente manera:

1. Convierte una imagen titulada *image.png* en tu carpeta actual en una cadena codificada en base64 y escríbela en un archivo titulado *image.txt* ejecutando el siguiente comando:

   ```
   base64 -i image.png -o image.txt
   ```

1. Crea un archivo JSON llamado *image-text-input.json* y pega el siguiente JSON y *\$1\$1image-base64\$1* sustitúyelo por el contenido del *image.txt* archivo (asegúrate de que no haya ninguna línea nueva al final de la cadena):

   ```
   {
       "anthropic_version": "bedrock-2023-05-31",
       "max_tokens": 1000,
       "messages": [
           {               
               "role": "user",
               "content": [
                   {
                       "type": "image",
                       "source": {
                           "type": "base64",
                           "media_type": "image/png", 
                           "data": "${image-base64}"
                       }
                   },
                   {
                       "type": "text",
                       "text": "What's in this image?"
                   }
               ]
           }
       ]
   }
   ```

1. Ejecute el siguiente comando para generar una salida de texto, basada en la imagen y el mensaje de texto que la acompaña, en un archivo llamado*invoke-model-output.txt*:

   ```
   aws bedrock-runtime invoke-model \
       --model-id anthropic.claude-3-haiku-20240307-v1:0 \
       --body file://image-text-input.json \
       --cli-binary-format raw-in-base64-out \
       invoke-model-output.txt
   ```

1. Busca el resultado en el *invoke-model-output.txt* archivo de la carpeta actual.

------
#### [ Python ]

En el siguiente script de Python, */path/to/image.png* sustitúyalo por la ruta real a la imagen antes de ejecutar el script:

```
# 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_text = "What's in this image?"
        input_image = "/path/to/image" # Replace with actual path to image file
 
        # Read reference image from file and encode as base64 strings.
        image_ext = input_image.split(".")[-1]
        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": f"image/{image_ext}", 
                        "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 occurred: " +
              format(message))


if __name__ == "__main__":
    main()
```

------

### Generación de una respuesta de texto a un vídeo cargado en Amazon S3 con una petición del texto que lo acompaña
<a name="w2aac13c32c33c17c19c13c15"></a>

Los siguientes ejemplos muestran cómo generar una respuesta con el modelo Amazon Nova Lite, dado un vídeo que se carga en un bucket de S3 y la petición del texto que lo acompaña.

**Requisito previo:** Suba un vídeo titulado *video.mp4* a un bucket de Amazon S3 de su cuenta siguiendo los pasos que se indican en [Carga de objetos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html#upload-objects-procedure) en la Guía del usuario de Amazon Simple Storage Service. Anote la URI de S3 del video.

Elija la pestaña del método que prefiera y siga estos pasos:

------
#### [ CLI ]

Abre una terminal y ejecuta el siguiente comando, sustituyéndola por *s3://amzn-s3-demo-bucket/video.mp4* la ubicación real de tu vídeo en S3:

```
aws bedrock-runtime invoke-model \
    --model-id amazon.nova-lite-v1:0 \
    --body '{
        "messages": [          
            {               
                "role": "user",
                "content": [      
                    {                       
                        "video": {     
                            "format": "mp4",   
                            "source": {
                                "s3Location": {
                                    "uri": "s3://amzn-s3-demo-bucket/video.mp4"
                                }
                            }
                        }                                    
                    },
                    {
                        "text": "What happens in this video?"
                    }
                ]
            }                              
        ]                  
    }' \
    --cli-binary-format raw-in-base64-out \
    invoke-model-output.txt
```

Busca el resultado en el *invoke-model-output.txt* archivo de la carpeta actual.

------
#### [ Python ]

En la siguiente secuencia de comandos de Python, *s3://amzn-s3-demo-bucket/video.mp4* sustitúyala por la ubicación S3 real del vídeo. A continuación, ejecute el script.

```
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to run a multimodal prompt with Nova Lite (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(
        {
            "messages": messages,
            "inferenceConfig": {
                "maxTokens": max_tokens
            }
        }
    )

    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 Nova Lite video prompt example.
    """

    try:

        bedrock_runtime = boto3.client(service_name='bedrock-runtime')

        model_id = "amazon.nova-lite-v1:0"
        max_tokens = 1000
        input_video_s3_uri = "s3://amzn-s3-demo-bucket/video.mp4" # Replace with real S3 URI
        video_ext = input_video_s3_uri.split(".")[-1]
        input_text = "What happens in this video?"

        message = {
            "role": "user",
            "content": [
                {
                    "video": {
                        "format": video_ext,
                        "source": {
                            "s3Location": {
                                "uri": input_video_s3_uri
                            }
                        }
                    }
                },
                {
                    "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()
```

------

### Generación de una respuesta de texto a un vídeo convertido en una cadena codificada en base64 con una petición del texto que lo acompaña
<a name="w2aac13c32c33c17c19c13c17"></a>

Los siguientes ejemplos muestran cómo generar una respuesta con el modelo Amazon Nova Lite, dado un vídeo convertido en una cadena codificada en base64 y la petición del texto que lo acompaña. Elija la pestaña del método que prefiera y siga estos pasos:

------
#### [ CLI ]

Haga lo siguiente:

1. Convierte un vídeo titulado *video.mp4* en tu carpeta actual a base64 ejecutando el siguiente comando:

   ```
   base64 -i video.mp4 -o video.txt
   ```

1. Crea un archivo JSON llamado *video-text-input.json* y pega el siguiente JSON, *\$1\$1video-base64\$1* sustituyéndolo por el contenido del `video.txt` archivo (asegúrate de que no haya ninguna línea nueva al final):

   ```
   {
       "messages": [          
           {               
               "role": "user",
               "content": [      
                   {                       
                       "video": {     
                           "format": "mp4",   
                           "source": {
                               "bytes": ${video-base64}
                           }
                       }                                    
                   },
                   {
                       "text": "What happens in this video?"
                   }
               ]
           }                              
       ]                  
   }
   ```

1. Ejecute el siguiente comando para generar una salida de texto basada en el vídeo y el mensaje de texto que lo acompaña en un archivo llamado*invoke-model-output.txt*:

   ```
   aws bedrock-runtime invoke-model \
       --model-id amazon.nova-lite-v1:0 \
       --body file://video-text-input.json \
       --cli-binary-format raw-in-base64-out \
       invoke-model-output.txt
   ```

1. Busca el resultado en el *invoke-model-output.txt* archivo de la carpeta actual.

------
#### [ Python ]

En la siguiente secuencia de comandos de Python, */path/to/video.mp4* sustitúyala por la ruta real al vídeo. A continuación, ejecute el script.

```
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to run a multimodal prompt with Nova Lite (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(
        {
            "messages": messages,
            "inferenceConfig": {
                "maxTokens": max_tokens
            }
        }
    )

    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 Nova Lite video prompt example.
    """

    try:

        bedrock_runtime = boto3.client(service_name='bedrock-runtime')

        model_id = "amazon.nova-lite-v1:0"
        max_tokens = 1000
        input_video = "/path/to/video.mp4" # Replace with real path to video
        video_ext = input_video.split(".")[-1]
        input_text = "What happens in this video?"

        # Read reference video from file and encode as base64 string.
        with open(input_video, "rb") as video_file:
            content_video = base64.b64encode(video_file.read()).decode('utf8')\

        message = {
            "role": "user",
            "content": [
                {
                    "video": {
                        "format": video_ext,
                        "source": {
                            "bytes": content_video
                        }
                    }
                },
                {
                    "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()
```

------

## Ejemplos de código de modelo de invocación con transmisión
<a name="inference-examples-stream"></a>

**nota**  
 AWS CLI No es compatible con la transmisión.

El siguiente ejemplo muestra cómo usar la [InvokeModelWithResponseStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModelWithResponseStream.html)API para generar texto en streaming con Python mediante la línea de comandos*write an essay for living on mars in 1000 words*.

```
import boto3
import json

brt = boto3.client(service_name='bedrock-runtime')

body = json.dumps({
    'prompt': '\n\nHuman: write an essay for living on mars in 1000 words\n\nAssistant:',
    'max_tokens_to_sample': 4000
})
                   
response = brt.invoke_model_with_response_stream(
    modelId='anthropic.claude-v2', 
    body=body
)
    
stream = response.get('body')
if stream:
    for event in stream:
        chunk = event.get('chunk')
        if chunk:
            print(json.loads(chunk.get('bytes').decode()))
```

# Invocación de un modelo con la API Chat Completions de OpenAI
<a name="inference-chat-completions"></a>

Puede ejecutar la inferencia de modelos mediante la [API Create chat completion de OpenAI](https://platform.openai.com/docs/api-reference/chat/create) con los modelos de Amazon Bedrock.

Puede llamar a la API Create chat completion de las formas siguientes:
+ Realice una solicitud HTTP con un punto de conexión de Tiempo de ejecución de Amazon Bedrock.
+ Use una solicitud SDK de OpenAI con un punto de conexión de Tiempo de ejecución de Amazon Bedrock.

Elija un tema para obtener más información:

**Topics**
+ [Modelos y regiones compatibles con la API Chat Completions de OpenAI](#inference-chat-completions-supported)
+ [Requisitos previos para usar la API Chat Completions](#inference-chat-completions-prereq)
+ [Creación de una finalización de chat](#inference-chat-completions-create)
+ [Inclusión de una barrera de protección en una finalización de chat](#inference-chat-completions-guardrails)

## Modelos y regiones compatibles con la API Chat Completions de OpenAI
<a name="inference-chat-completions-supported"></a>

Puede usar la API Create para completar chats con todos los OpenAI modelos compatibles con Amazon Bedrock y en las AWS regiones que admiten estos modelos. Para obtener más información acerca de los modelos y regiones compatibles, consulte [Modelos fundacionales compatibles en Amazon Bedrock](models-supported.md).

## Requisitos previos para usar la API Chat Completions
<a name="inference-chat-completions-prereq"></a>

Para ver los requisitos previos para usar la API Chat Completions, elija la pestaña que corresponda al método que prefiera y, a continuación, siga estos pasos:

------
#### [ OpenAI SDK ]
+ **Autenticación**: el SDK de OpenAI solo admite la autenticación con una clave de API de Amazon Bedrock. Genere una clave de API de Amazon Bedrock para autenticar la solicitud. Para obtener más información sobre las claves de API de Amazon Bedrock y cómo generarlas, consulte la sección de claves de API del capítulo Creación.
+ **Punto final**: busque el punto de enlace que corresponda a la AWS región para usarlo en los [puntos de enlace y las cuotas de Amazon Bedrock Runtime](https://docs.aws.amazon.com/general/latest/gr/bedrock.html#br-rt). Si usa un AWS SDK, es posible que solo necesite especificar el código de región y no todo el punto final al configurar el cliente.
+ **Instalar un SDK de OpenAI**: para obtener más información, consulte [Bibliotecas](https://platform.openai.com/docs/libraries) en la documentación de OpenAI.

------
#### [ HTTP request ]
+ **Autenticación**: puede autenticarse con sus AWS credenciales o con una clave de API de Amazon Bedrock.

  Configure sus AWS credenciales o genere una clave de API de Amazon Bedrock para autenticar su solicitud.
  + Para obtener más información sobre cómo configurar sus AWS credenciales, consulte [Acceso programático con AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds-programmatic-access.html) credenciales de seguridad.
  + Para obtener más información sobre las claves de API de Amazon Bedrock y cómo generarlas, consulte la sección de claves de API del capítulo Creación.
+ **Punto final**: busque el punto de enlace que corresponda a la AWS región para usarlo en los [puntos de enlace y las cuotas de Amazon Bedrock Runtime](https://docs.aws.amazon.com/general/latest/gr/bedrock.html#br-rt). Si usa un AWS SDK, es posible que solo necesite especificar el código de región y no todo el punto final al configurar el cliente.

------

## Creación de una finalización de chat
<a name="inference-chat-completions-create"></a>

Consulte los siguientes recursos de la documentación de OpenAI para obtener más información sobre la API Create chat completion:
+ [Parámetros del cuerpo de la solicitud](https://platform.openai.com/docs/api-reference/chat/create)
+ [Parámetros del cuerpo de la respuesta](https://platform.openai.com/docs/api-reference/chat/object)

**nota**  
Amazon Bedrock actualmente no admite las demás operaciones de la API Chat completion de OpenAI.

Para obtener más información sobre cómo usar la API Create chat completion de OpenAI, seleccione la pestaña correspondiente al método que prefiera y siga los pasos:

------
#### [ OpenAI SDK (Python) ]

Para crear una finalización de chat con el SDK de OpenAI, haga lo siguiente:

1. Importe el SDK de OpenAI y configure el cliente con los siguientes campos:
   + `base_url`: añada el punto de conexión de Tiempo de ejecución de Amazon Bedrock delante de `/openai/v1`, como en el siguiente formato:

     ```
     https://${bedrock-runtime-endpoint}/openai/v1
     ```
   + `api_key`: especifique una clave de API de Amazon Bedrock.
   + `default_headers`: si necesita incluir algún encabezado, puede incluirlo como pares de clave-valor en este objeto. También puede especificar los encabezados en los `extra_headers` cuando realice una llamada a la API específica.

1. Use el método `chat.completions.create()` con el cliente y especifique como mínimo `model` y `messages` en el cuerpo de la solicitud.

En el siguiente ejemplo, se llama a la API Create chat completion en `us-west-2`. *\$1AWS\$1BEARER\$1TOKEN\$1BEDROCK*Sustitúyala por tu clave de API actual.

```
from openai import OpenAI

client = OpenAI(
    base_url="https://bedrock-runtime.us-west-2.amazonaws.com/openai/v1", 
    api_key="$AWS_BEARER_TOKEN_BEDROCK" # Replace with actual API key
)

completion = client.chat.completions.create(
    model="openai.gpt-oss-20b-1:0",
    messages=[
        {
            "role": "developer",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user",
            "content": "Hello!"
        }
    ]
)

print(completion.choices[0].message)
```

------
#### [ HTTP request ]

Para crear una finalización de chat con una solicitud HTTP directa, haga lo siguiente:

1. Especifique la URL añadiendo el punto de conexión de Tiempo de ejecución de Amazon Bedrock delante de `/openai/v1/chat/completions`, como en el siguiente formato:

   ```
   https://${bedrock-runtime-endpoint}/openai/v1/chat/completions
   ```

1. Especifique sus AWS credenciales o una clave de API de Amazon Bedrock en el `Authorization` encabezado.

1. En el cuerpo de la solicitud, especifique al menos `model` y `messages`.

En el siguiente ejemplo, se usa curl para llamar a la API Create chat completion en `us-west-2`. *\$1AWS\$1BEARER\$1TOKEN\$1BEDROCK*Sustitúyala por tu clave de API actual:

```
curl -X POST https://bedrock-runtime.us-west-2.amazonaws.com/openai/v1/chat/completions \
   -H "Content-Type: application/json" \
   -H "Authorization: Bearer $AWS_BEARER_TOKEN_BEDROCK" \
   -d '{
    "model": "openai.gpt-oss-20b-1:0",
    "messages": [
        {
            "role": "developer",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user",
            "content": "Hello!"
        }
    ]
}'
```

------

## Inclusión de una barrera de protección en una finalización de chat
<a name="inference-chat-completions-guardrails"></a>

Para incluir medidas de seguridad en las entradas y respuestas del modelo, aplique una [barrera de protección](guardrails.md) al ejecutar la invocación del modelo e incluya los siguientes [parámetros adicionales](https://github.com/openai/openai-python#undocumented-request-params) como campos en el cuerpo de la solicitud:
+ `extra_headers`: se asigna a un objeto que contiene los siguientes campos, que especifican encabezados adicionales de la solicitud:
  + `X-Amzn-Bedrock-GuardrailIdentifier` (obligatorio): el ID de la barrera de protección.
  + `X-Amzn-Bedrock-GuardrailVersion` (obligatorio): la versión de la barrera de protección.
  + `X-Amzn-Bedrock-Trace` (opcional): si se debe habilitar o no el seguimiento de la barrera de protección.
+ `extra_body`: se asigna a un objeto. En ese objeto, puede incluir el campo `amazon-bedrock-guardrailConfig`, que se asigna a un objeto que contiene los siguientes campos:
  + `tagSuffix` (opcional): incluya este campo para [etiquetar las entradas](guardrails-tagging.md).

Para obtener más información sobre estos parámetros en Barreras de protección para Amazon Bedrock, consulte [Prueba de la barrera de protección](guardrails-test.md).

Para ver ejemplos del uso de barreras de protección con finalizaciones de chat de OpenAI, seleccione la pestaña correspondiente al método que prefiera y siga los pasos:

------
#### [ OpenAI SDK (Python) ]

```
import openai
from openai import OpenAIError

# Endpoint for Amazon Bedrock Runtime
bedrock_endpoint = "https://bedrock-runtime.us-west-2.amazonaws.com/openai/v1"

# Model ID
model_id = "openai.gpt-oss-20b-1:0"

# Replace with actual values
bedrock_api_key = "$AWS_BEARER_TOKEN_BEDROCK"
guardrail_id = "GR12345"
guardrail_version = "DRAFT"

client = openai.OpenAI(
    api_key=bedrock_api_key,
    base_url=bedrock_endpoint,
)

try:
    response = client.chat.completions.create(
        model=model_id,
        # Specify guardrail information in the header
        extra_headers={
            "X-Amzn-Bedrock-GuardrailIdentifier": guardrail_id,
            "X-Amzn-Bedrock-GuardrailVersion": guardrail_version,
            "X-Amzn-Bedrock-Trace": "ENABLED",
        },
        # Additional guardrail information can be specified in the body
        extra_body={
            "amazon-bedrock-guardrailConfig": {
                "tagSuffix": "xyz"  # Used for input tagging
            }
        },
        messages=[
            {
                "role": "system",
                "content": "You are a helpful assistant."
            },
            {
                "role": "assistant", 
                "content": "Hello! How can I help you today?"
            },
            {
                "role": "user",
                "content": "What is the weather like today?"
            }
        ]
    )

    request_id = response._request_id
    print(f"Request ID: {request_id}")
    print(response)
    
except OpenAIError as e:
    print(f"An error occurred: {e}")
    if hasattr(e, 'response') and e.response is not None:
        request_id = e.response.headers.get("x-request-id")
        print(f"Request ID: {request_id}")
```

------
#### [ OpenAI SDK (Java) ]

```
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.core.http.HttpResponseFor;
import com.openai.models.chat.completions.ChatCompletion;
import com.openai.models.chat.completions.ChatCompletionCreateParams;

// Endpoint for Amazon Bedrock Runtime
String bedrockEndpoint = "http://bedrock-runtime.us-west-2.amazonaws.com/openai/v1"

// Model ID
String modelId = "openai.gpt-oss-20b-1:0"

// Replace with actual values
String bedrockApiKey = "$AWS_BEARER_TOKEN_BEDROCK"
String guardrailId = "GR12345"
String guardrailVersion = "DRAFT"

OpenAIClient client = OpenAIOkHttpClient.builder()
        .apiKey(bedrockApiKey)
        .baseUrl(bedrockEndpoint)
        .build()

ChatCompletionCreateParams request = ChatCompletionCreateParams.builder()
        .addUserMessage("What is the temperature in Seattle?")
        .model(modelId)
        // Specify additional headers for the guardrail
        .putAdditionalHeader("X-Amzn-Bedrock-GuardrailIdentifier", guardrailId)
        .putAdditionalHeader("X-Amzn-Bedrock-GuardrailVersion", guardrailVersion)
        // Specify additional body parameters for the guardrail
        .putAdditionalBodyProperty(
                "amazon-bedrock-guardrailConfig",
                JsonValue.from(Map.of("tagSuffix", JsonValue.of("xyz"))) // Allows input tagging
        )
        .build();
        
HttpResponseFor<ChatCompletion> rawChatCompletionResponse =
        client.chat().completions().withRawResponse().create(request);

final ChatCompletion chatCompletion = rawChatCompletionResponse.parse();

System.out.println(chatCompletion);
```

------

# Cómo mantener una conversación con las operaciones de la API Converse
<a name="conversation-inference"></a>

Puede usar la API Converse de Amazon Bedrock para crear aplicaciones conversacionales que envíen y reciban mensajes desde y hacia un modelo de Amazon Bedrock. Por ejemplo, puede crear un bot de chat que mantenga una conversación durante varios turnos y utilice un personaje o tono que se adapte exclusivamente a sus necesidades, como un asistente de soporte técnico.

Para usar la Converse API, usa las operaciones de [Converse](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html) o [ConverseStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ConverseStream.html)(para las respuestas de streaming) para enviar mensajes a un modelo. Es posible utilizar las operaciones de inferencia base existentes ([InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html)o [InvokeModelWithResponseStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModelWithResponseStream.html)) para aplicaciones de conversación. Sin embargo, le recomendamos que use la API Converse, ya que proporciona una API coherente que funciona con todos los modelos de Amazon Bedrock que admiten mensajes. Esto significa que puede escribir el código una vez y usarlo con diferentes modelos. Si un modelo tiene parámetros de inferencia únicos, la API Converse también le permite pasar esos parámetros únicos a una estructura específica del modelo. 

Puede usar la API Converse para implementar el [uso de herramientas](tool-use.md) y las [barreras de protección](guardrails-use-converse-api.md) en sus aplicaciones. 

**nota**  
Con los modelos Mistral AI y Meta, la API Converse incorpora los datos introducidos en una plantilla de peticiones específica del modelo que permite mantener conversaciones. 
Se aplican restricciones a las siguientes operaciones:`InvokeModel`, `InvokeModelWithResponseStream``Converse`, y`ConverseStream`. Consulte [las restricciones de la API](inference-api-restrictions.md) para obtener más información.

Para ejemplos de código, consulte lo siguiente:
+ Ejemplos de Python de este tema: [Ejemplos de la API Converse](conversation-inference-examples.md)
+ Varios lenguajes y modelos: [Ejemplos de código para Amazon Bedrock Runtime mediante AWS SDKs](service_code_examples_bedrock-runtime.md)
+ Tutorial de Java: [A Java developer's guide to Bedrock's new Converse API](https://community.aws/content/2hUiEkO83hpoGF5nm3FWrdfYvPt/amazon-bedrock-converse-api-java-developer-guide)
+ JavaScript tutorial: [una guía para desarrolladores sobre la nueva Converse API de Bedrock](https://community.aws/content/2dtauBCeDa703x7fDS9Q30MJoBA/amazon-bedrock-converse-api-developer-guide)

**Topics**
+ [Modelos y características del modelo compatibles](conversation-inference-supported-models-features.md)
+ [Mediante la API de Converse](conversation-inference-call.md)
+ [Ejemplos de la API Converse](conversation-inference-examples.md)

# Modelos y características del modelo compatibles
<a name="conversation-inference-supported-models-features"></a>

La API Converse es compatible con los siguientes modelos de Amazon Bedrock y características del modelo. La API Converse no admite ningún modelo de incrustación o generación de imágenes.


| Modelo | Converse | ConverseStream | Peticiones del sistema | Chat de documentos | Visión | Uso de herramienta | Uso de una herramienta de transmisión | Barreras de protección | Enlaces de Amazon S3 para contenido multimedia | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| AI21 Jamba-Instruct | Sí | Sí | Sí | No | No | No | No | No | No | 
| AI21 Labs Jurassic-2 (Text) | Limitado. No admite chat. | No | No | No | No | No | No | Sí | No | 
| AI21 Labs Jamba 1.5 Large | Sí | Sí | Sí | Sí | No | Sí | Sí | Sí | No | 
| AI21 Labs Jamba 1.5 Mini | Sí | Sí | Sí | Sí | No | Sí | Sí | Sí | No | 
| Amazon Nova Premier | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | 
| Amazon Nova Pro | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | 
| Amazon Nova Lite | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | 
| Amazon Nova Micro | Sí | Sí | Sí | No | No | Sí | Sí | Sí | No | 
| Modelos Amazon Titan | Sí | Sí | No | Sí (excepto Titan Text Premier) | No | No | No | Sí | No | 
| Modelos Anthropic Claude 2.x y anteriores | Sí | Sí | Sí | Sí | No | No | No | Sí | No | 
| Modelos Anthropic Claude 3 | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | No | 
| Anthropic Claude 3.5 Sonnet | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | No | 
| Anthropic Claude 3.5 Sonnet v2 | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | No | 
| Anthropic Claude 3.7 Sonnet | Sí | Sí | Sí | Sí | Sí | Sí | Sí | Sí | No | 
| Anthropic Claude 3.5 Haiku | Sí | Sí | Sí | Sí | No | Sí | Sí | No | No | 
| Anthropic Claude Sonnet 4 | Sí | Sí | Sí | Sí | Sí | Sí | Sí | No | No | 
| AnthropicClaude Opus4 | Sí | Sí | Sí | Sí | Sí | Sí | Sí | No | No | 
| Anthropic Claude Sonnet 4.5 | Sí | Sí | Sí | Sí | Sí | Sí | Sí | No | No | 
| Anthropic Claude Haiku 4.5 | Sí | Sí | Sí | Sí | Sí | Sí | Sí | No | No | 
| AnthropicClaude Opus4.1 | Sí | Sí | Sí | Sí | Sí | Sí | Sí | No | No | 
| Claude Opus4.5 | Sí | Sí | Sí | Sí | Sí | Sí | Sí | No | No | 
| Cohere Command | Limitado. No admite chat. | Limitado. No admite chat. | No | Sí | No | No | No | Sí | No | 
| Cohere Command Light | Limitado. No admite chat. | Limitado. No admite chat. | No | No | No | No | No | Sí | No | 
| Cohere y Command RCommand R\$1 | Sí | Sí | Sí | Sí | No | Sí | Sí | No | No | 
| DeepSeek-R1 | Sí | Sí | Sí | Sí | No | No | No | Sí | No | 
| Meta y Llama 2Llama 3 | Sí | Sí | Sí | Sí | No | No | No | Sí | No | 
| Meta Llama 3.1 | Sí | Sí | Sí | Sí | No | Sí | No | Sí | No | 
| Meta Llama 3.2 1b and Llama 3.2 3b | Sí | Sí | Sí | Sí | No | No | No | Sí | No | 
| Meta Llama 3.2 11b and Llama 3.2 90b | Sí | Sí | Sí | Sí | Sí | Sí | No | Sí | No | 
| Meta Llama 4 Maverick 17B and Llama 4.0 Scout 17B | Sí | Sí | Sí | Sí | Sí | Sí | No | Sí | No | 
| Mistral AI Instruct | Sí | Sí | No | Sí | No | No | No | Sí | No | 
| Mistral Large | Sí | Sí | Sí | Sí | No | Sí | No | Sí | No | 
| Mistral Large 2 (24.07) | Sí | Sí | Sí | Sí | No | Sí | No | Sí | No | 
| Mistral Small | Sí | Sí | Sí | No | No | Sí | No | Sí | No | 
| Pixtral Large (25.02) | Sí | Sí | Sí | Sí | No | Sí | No | Sí | No | 
| Writer Palmyra X4 | Sí | Sí | Sí | Sí | No | Sí | No | Sí | No | 
| Writer Palmyra X5 | Sí | Sí | Sí | Sí | No | Sí | No | Sí | No | 

Para ver una tabla de las regiones que admiten cada modelo, consulte [Soporte de modelos realizado por Región de AWS Amazon Bedrock](models-regions.md).

**nota**  
Cohere Command (Text) y AI21 Labs Jurassic-2 (Text) no permiten chatear con la API Converse. Los modelos solo pueden gestionar un mensaje de usuario a la vez y no pueden mantener el historial de una conversación. Se produce un error si intenta pasar más de un mensaje.

# Mediante la API de Converse
<a name="conversation-inference-call"></a>

Para usar la API Converse, debe llamar a las operaciones `Converse` o `ConverseStream` para enviar mensajes a un modelo. Para llamar a `Converse` se requiere permiso para la operación `bedrock:InvokeModel`. Para llamar a `ConverseStream` se requiere permiso para la operación `bedrock:InvokeModelWithResponseStream`.

**Topics**
+ [Solicitud](#conversation-inference-call-request)
+ [Respuesta](#conversation-inference-call-response)

**nota**  
Se aplican restricciones a las siguientes operaciones: InvokeModel, InvokeModelWithResponseStream, Converse y ConverseStream. Consulta las [restricciones de la API](inference-api-restrictions.md) para obtener más información.

## Solicitud
<a name="conversation-inference-call-request"></a>

Cuando realiza una solicitud [Converse](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html) con un [punto de conexión en tiempo de ejecución de Amazon Bedrock](https://docs.aws.amazon.com/general/latest/gr/bedrock.html#br-rt), puede incluir los siguientes campos:
+ **modelId:** parámetro obligatorio del encabezado que permite especificar el recurso que se va a utilizar para la inferencia.
+ Los siguientes campos permiten personalizar la petición:
  + **messages**: se utiliza para especificar el contenido y el rol de las peticiones.
  + **system**: se utiliza para especificar las peticiones del sistema, que definen las instrucciones o el contexto del modelo.
  + **inferenceConfig**: se utiliza para especificar los parámetros de inferencia que son comunes a todos los modelos. Los parámetros de inferencia influyen en la generación de la respuesta.
  + **additionalModelRequestCampos**: se utilizan para especificar los parámetros de inferencia que son específicos del modelo con el que se ejecuta la inferencia.
  + **promptVariables**: (si utiliza una petición de Administración de peticiones) Utilice este campo para definir las variables de la petición que se van a rellenar y los valores con los que se van a rellenar.
+ Los siguientes campos permiten personalizar la forma en que se devuelve la respuesta:
  + **guardrailConfig**: utilice este campo para incluir una barrera de protección que se aplique a toda la petición.
  + **toolConfig**: utilice este campo para incluir una herramienta que ayude a un modelo a generar respuestas.
  + **additionalModelResponseFieldPaths**— Utilice este campo para especificar los campos que se devolverán como un objeto puntero JSON.
  + **ServiceTier**: utilice este campo para especificar el nivel de servicio de una solicitud concreta
+ **requestMetadata**: utilice este campo para incluir los metadatos que se pueden filtrar al utilizar los registros de invocación.

**nota**  
Se aplican las siguientes restricciones cuando se utiliza una petición de Administración de peticiones con `Converse` o `ConverseStream`:  
No puede incluir los campos `additionalModelRequestFields`, `inferenceConfig`, `system` ni `toolConfig`.
Si incluye el campo `messages`, los mensajes se anexan después de los mensajes definidos en la petición.
Si incluye el campo `guardrailConfig`, la barrera de protección se aplica a toda la petición. Si incluye `guardContent` bloques en el [ContentBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ContentBlock.html)campo, la barandilla solo se aplicará a esos bloques.

Expanda una sección para obtener más información sobre un campo del cuerpo de la solicitud `Converse`:

### Mensajes
<a name="converse-messages"></a>

El campo `messages` es una matriz de objetos [Message](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Message.html), cada uno de los cuales define un mensaje entre el usuario y el modelo. Un objeto `Message` contiene los siguientes campos:
+ **role**: define si el mensaje proviene de `user` (la petición enviada al modelo) o `assistant` (la respuesta del modelo).
+ **content**: define el contenido de la petición.
**nota**  
Amazon Bedrock no almacena ningún texto, imagen ni documento que proporcione como contenido. Los datos solo se utilizan para generar la respuesta.

Para mantener el contexto de la conversación, incluya todos los mensajes de la conversación en solicitudes `Converse` posteriores y utilice el campo `role` para especificar si el mensaje proviene del usuario o del modelo.

El `content` campo se asigna a una matriz de [ContentBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ContentBlock.html)objetos. Dentro de cada uno de ellos [ContentBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ContentBlock.html), puede especificar uno de los siguientes campos (para ver qué modelos admiten qué bloques, consulte[Modelos y características del modelo compatibles](conversation-inference-supported-models-features.md)):

------
#### [ text ]

El campo `text` se asigna a una cadena que especifica la petición. El `text` campo se interpreta junto con otros campos que se especifican en el mismo [ContentBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ContentBlock.html).

A continuación se muestra un objeto [Message](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Message.html) con una `content` matriz que contiene solo un texto [ContentBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ContentBlock.html):

```
{
    "role": "user",
    "content": [
        {
            "text": "string"
        }
    ]
}
```

------
#### [ image ]

El `image` campo se asigna a un [ImageBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ImageBlock.html). Transfiera los bytes sin procesar, codificados en base64, a una imagen del campo `bytes`. Si utilizas un AWS SDK, no necesitas codificar los bytes en base64.

Si excluye el campo `text`, el modelo describirá la imagen.

A continuación, se muestra un ejemplo de objeto [Message](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Message.html) con una `content` matriz que contiene solo una imagen: [ContentBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ContentBlock.html)

```
{
    "role": "user",
    "content": [
        {
            "image": {
                "format": "png",
                "source": {
                    "bytes": "image in bytes"
                }
            }
        }
    ]
}
```

También puede especificar un URI de Amazon S3 en lugar de pasar los bytes directamente al cuerpo de la solicitud. A continuación, se muestra un objeto `Message` de ejemplo con una matriz de contenido que contiene el origen pasado a través de un URI de Amazon S3.

```
{
    "role": "user",
    "content": [
        {
            "image": {
                "format": "png",
                "source": {
                    "s3Location": {
                        "uri": "s3://amzn-s3-demo-bucket/myImage",
                        "bucketOwner": "111122223333"
                    }
                }
            }
        }
    ]
}
```

------
#### [ document ]

El `document` campo se asigna a un [DocumentBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_DocumentBlock.html). Si incluye un `DocumentBlock`, compruebe que su solicitud cumpla las siguientes restricciones:
+ En el campo `content` del objeto [Message](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Message.html), también debe incluir un campo `text` con una petición relacionada con el documento.
+ Transfiera los bytes sin procesar, codificados en base64, a un documento en el campo `bytes`. Si utiliza un AWS SDK, no necesita codificar los bytes del documento en base64.
+ El campo `name` solo puede contener los siguientes caracteres:
  + Caracteres alfanuméricos
  + Caracteres en blanco (no más de uno en una fila)
  + Guiones
  + Paréntesis
  + Corchetes
**nota**  
El campo `name` es vulnerable a las inyecciones de peticiones, ya que el modelo podría interpretarlas como instrucciones por error. Por lo tanto, le recomendamos que especifique un nombre neutro.

Al usar un documento, puede habilitar la etiqueta `citations`, que proporcionará citas específicas del documento en respuesta a la llamada a la API. Consulte la [DocumentBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_DocumentBlock.html)API para obtener más detalles.

A continuación, se muestra un ejemplo de objeto [Message](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Message.html) con una `content` matriz que contiene solo un documento [ContentBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ContentBlock.html)y el texto adjunto obligatorio [ContentBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ContentBlock.html).

```
{
    "role": "user",
    "content": [
        {
            "text": "string"
        },
        {
            "document": {
                "format": "pdf",
                "name": "MyDocument",
                "source": {
                    "bytes": "document in bytes"
                }
            }
        }
    ]
}
```

También puede especificar un URI de Amazon S3 en lugar de pasar los bytes directamente al cuerpo de la solicitud. A continuación, se muestra un objeto `Message` de ejemplo con una matriz de contenido que contiene el origen pasado a través de un URI de Amazon S3.

```
{
    "role": "user",
    "content": [
        {
            "text": "string"
        },
        {
            "document": {
                "format": "pdf",
                "name": "MyDocument",
                "source": {
                    "s3Location": {
                      "uri": "s3://amzn-s3-demo-bucket/myDocument",
                      "bucketOwner": "111122223333"
                    }
                }
            }
        }
    ]
}
```

------
#### [ video ]

El `video` campo se asigna a un [VideoBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_VideoBlock.html)objeto. Pase los bytes sin procesar, codificados en base64, al campo `bytes`. Si usa el AWS SDK, no necesita codificar los bytes en base64.

Si no incluye el campo `text`, el modelo describirá el vídeo.

A continuación, se muestra un ejemplo de objeto [Message](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Message.html) con una `content` matriz que contiene solo un vídeo. [ContentBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ContentBlock.html)

```
{
    "role": "user",
    "content": [
        {
            "video": {
                "format": "mp4",
                "source": {
                    "bytes": "video in bytes"
                }
            }
        }
    ]
}
```

También puede especificar un URI de Amazon S3 en lugar de pasar los bytes directamente al cuerpo de la solicitud. A continuación, se muestra un objeto `Message` de ejemplo con una matriz de contenido que contiene el origen pasado a través de un URI de Amazon S3.

```
{
    "role": "user",
    "content": [
        {
            "video": {
                "format": "mp4",
                "source": {
                    "s3Location": {
                        "uri": "s3://amzn-s3-demo-bucket/myVideo",
                        "bucketOwner": "111122223333"
                    }
                }
            }
        }
    ]
}
```

**nota**  
El rol asumido debe tener el permiso `s3:GetObject` para el URI de Amazon S3. El campo `bucketOwner` es opcional, pero debe especificarse si la cuenta que realiza la solicitud no es propietaria del bucket en el que se encuentra el URI de Amazon S3. Para obtener más información, consulte [Configuración del acceso a buckets de Amazon S3](s3-bucket-access.md).

------
#### [ cachePoint ]

Puede añadir puntos de comprobación de caché en forma de bloque en un mensaje junto con la petición correspondiente. Para ello, utilice los campos `cachePoint` para usar el almacenamiento en caché de peticiones. El almacenamiento en caché de peticiones es una característica que le permite empezar a almacenar en caché el contexto de las conversaciones para ahorrar costos y latencia. Para obtener más información, consulte [Almacenamiento en caché de peticiones para una inferencia de modelos más rápida](prompt-caching.md).

A continuación se muestra un ejemplo de objeto [Message](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Message.html) con una `content` matriz que contiene un documento [ContentBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ContentBlock.html)y el texto correspondiente obligatorio [ContentBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ContentBlock.html), así como un **CachePoint** que añade el contenido del documento y del texto a la caché.

```
{
    "role": "user",
    "content": [
        {
            "text": "string"
        },
        {
            "document": {
                "format": "pdf",
                "name": "string",
                "source": {
                    "bytes": "document in bytes"
                }
            }
        },
        {
            "cachePoint": {
                "type": "default"
            }
        }
    ]
}
```

------
#### [ guardContent ]

El `guardContent` campo se asigna a un [GuardrailConverseContentBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_GuardrailConverseContentBlock.html)objeto. Puede usar este campo para seleccionar una entrada para que la evalúe la barrera de protección definida en el campo `guardrailConfig`. Si no especifica este campo, la barrera de protección evalúa todos los mensajes del cuerpo de la solicitud. Puede pasar los siguientes tipos de contenido a un `GuardBlock`:
+ **texto**: a continuación se muestra un ejemplo de objeto [Message](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Message.html) con una `content` matriz que contiene solo un texto [GuardrailConverseContentBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_GuardrailConverseContentBlock.html):

  ```
  {
      "role": "user",
      "content": [
          {
              "text": "Tell me what stocks to buy.",
              "qualifiers": [
                  "guard_content"
              ]
          }
      ]
  }
  ```

  Usted define el texto que se va a evaluar e incluye los calificadores que desee utilizar como [fundamento contextual](guardrails-contextual-grounding-check.md).
+ **imagen**: a continuación se muestra un objeto [Message](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Message.html) con una `content` matriz que contiene solo una imagen [GuardrailConverseContentBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_GuardrailConverseContentBlock.html):

  ```
  {
      "role": "user",
      "content": [
          {
              "format": "png",
              "source": {
                  "bytes": "image in bytes"
              }
          }
      ]
  }
  ```

  Debe especificar el formato de la imagen y definir la imagen en bytes.

Para obtener más información acerca de las barreras de protección, consulte [Detección y filtrado del contenido dañino mediante Barreras de protección para Amazon Bedrock](guardrails.md).

------
#### [ reasoningContent ]

El `reasoningContent` campo se asigna a [ReasoningContentBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ReasoningContentBlock.html). Este bloque incluye contenido sobre el razonamiento llevado a cabo por el modelo para generar la respuesta en el `ContentBlock` adjunto.

A continuación, se muestra un objeto `Message` con una matriz `content` que contiene solo un `ReasoningContentBlock` y un `ContentBlock` de texto adjunto.

```
{
    "role": "user",
    "content": [
        {
            "text": "string"
        },
        {
            "reasoningContent": {
                "reasoningText": {
                    "text": "string",
                    "signature": "string"
                }
                "redactedContent": "base64-encoded binary data object"
            }
        }
    ]
}
```

`ReasoningContentBlock` contiene el razonamiento utilizado para generar el contenido adjunto en el campo `reasoningText`, además de cualquier contenido del razonamiento que haya sido cifrado por el proveedor del modelo por motivos de confianza y seguridad en el campo `redactedContent`.

Dentro del campo `reasoningText`, los campos `text` describen el razonamiento. El campo `signature` es un hash de todos los mensajes de la conversación y una medida de seguridad contra la manipulación del razonamiento utilizado por el modelo. Debe incluir la firma y todos los mensajes anteriores en las solicitudes `Converse` posteriores. Si se cambia alguno de los mensajes, la respuesta produce un error.

------
#### [ toolUse ]

Contiene información sobre la herramienta que debe utilizar el modelo. Para obtener más información, consulte [Uso de una herramienta para completar una respuesta modelo de Amazon Bedrock](tool-use.md).

------
#### [ toolResult ]

Contiene información sobre el resultado del modelo mediante el uso de una herramienta. Para obtener más información, consulte [Uso de una herramienta para completar una respuesta modelo de Amazon Bedrock](tool-use.md).

------

En el siguiente ejemplo de `messages`, el usuario solicita una lista de tres canciones pop y el modelo genera una lista de canciones. 

```
[
    {
        "role": "user",
        "content": [
            {
                "text": "Create a list of 3 pop songs."
            }
        ]
    },
    {
        "role": "assistant",
        "content": [
            {
                "text": "Here is a list of 3 pop songs by artists from the United Kingdom:\n\n1. \"As It Was\" by Harry Styles\n2. \"Easy On Me\" by Adele\n3. \"Unholy\" by Sam Smith and Kim Petras"
            }
        ]
    }
]
```

### sistema
<a name="converse-system"></a>

Una petición del sistema es un tipo de petición que proporciona instrucciones o contexto al modelo acerca de la tarea que debe realizar o el personaje que debe adoptar durante la conversación. Puede especificar una lista de solicitudes del sistema para la solicitud en el campo `system` ([SystemContentBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_SystemContentBlock.html)), como se muestra en el siguiente ejemplo.

```
[
    {
        "text": "You are an app that creates play lists for a radio station that plays rock and pop music. Only return song names and the artist. "
    }
]
```

### inferenceConfig
<a name="converse-inference"></a>

La Converse API admite un conjunto básico de parámetros de inferencia que se establecen en el `inferenceConfig` campo () [InferenceConfiguration](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InferenceConfiguration.html). El conjunto básico de parámetros de inferencia es:
+ **maxTokens**: cantidad máxima de tokens que se permiten en la respuesta generada. 
+ **stopSequences**: lista de secuencias de detención. Una secuencia de detención es una secuencia de caracteres que hace que el modelo deje de generar la respuesta. 
+ **temperature**: probabilidad de que el modelo seleccione las opciones más viables al generar una respuesta. 
+ **topP**: porcentaje de candidatos más probables que el modelo considera para el siguiente token.

Para obtener más información, consulte [Influencia sobre la generación de respuestas con parámetros de inferencia](inference-parameters.md).

En el siguiente ejemplo, el JSON establece el parámetro de inferencia `temperature`. 

```
{"temperature": 0.5}
```

### additionalModelRequestCampos
<a name="converse-additional-model-request-fields"></a>

Si el modelo que utiliza tiene parámetros de inferencia adicionales, puede establecer esos parámetros especificándolos como JSON en el campo `additionalModelRequestFields`. El siguiente ejemplo de JSON muestra cómo configurar `top_k`, que está disponible en los modelos de Anthropic Claude, pero que no es un parámetro de inferencia base en la API de mensajes. 

```
{"top_k": 200}
```

### promptVariables
<a name="converse-prompt-variables"></a>

Si especifica una petición de [Administración de peticiones](prompt-management.md) en el `modelId` como el recurso sobre el que se debe ejecutar la inferencia, utilice este campo para rellenar las variables de la petición con valores reales. El campo `promptVariables` se asigna a un objeto JSON con claves que corresponden a las variables definidas en las peticiones y los valores por los que se van a reemplazar las variables.

Por ejemplo, supongamos que tiene una petición que dice **Make me a *\$1\$1genre\$1\$1* playlist consisting of the following number of songs: *\$1\$1number\$1\$1*.**. El ID de la petición es `PROMPT12345` y su versión es `1`. Puede enviar la siguiente solicitud `Converse` para reemplazar las variables:

```
POST /model/arn:aws:bedrock:us-east-1:111122223333:prompt/PROMPT12345:1/converse HTTP/1.1
Content-type: application/json

{
   "promptVariables": { 
      "genre" : "pop",
      "number": 3
   }
}
```

### guardrailConfig
<a name="converse-guardrail"></a>

Puede aplicar una barrera de protección que haya creado con [Barreras de protección para Amazon Bedrock](guardrails.md) incluyendo este campo. Para aplicar la barrera a un mensaje específico de la conversación, incluye el mensaje en un. [GuardrailConverseContentBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_GuardrailConverseContentBlock.html) Si no incluye ningún `GuardrailConverseContentBlock` en el cuerpo de la solicitud, la barrera de protección se aplicará a todos los mensajes del campo `messages`. Para ver un ejemplo, consulta [Inclusión de una barrera de protección con la API Converse](guardrails-use-converse-api.md).

### toolConfig
<a name="converse-tool"></a>

Este campo le permite definir una herramienta para que el modelo la utilice para ayudar a generar una respuesta. Para obtener más información, consulte [Uso de una herramienta para completar una respuesta modelo de Amazon Bedrock](tool-use.md).

### additionalModelResponseFieldPaths
<a name="converse-additional-model-response-field-paths"></a>

También puede especificar las rutas de los parámetros del modelo adicionales en el campo `additionalModelResponseFieldPaths`, tal como se muestra en el siguiente ejemplo.

```
[ "/stop_sequence" ]
```

La API devuelve los campos adicionales que solicite en el campo `additionalModelResponseFields`. 

### requestMetadata
<a name="converse-request-metadata"></a>

Este campo se asigna a un objeto JSON. Puede especificar las claves y los valores de metadatos a los que se asignan dentro de este objeto. Puede usar los metadatos de las solicitudes para filtrar los registros de invocación del modelo.

### Nivel de servicio
<a name="inference-service-tiers"></a>

Este campo se asigna a un objeto JSON. Puede especificar el nivel de servicio para una solicitud concreta.

El siguiente ejemplo muestra la `serviceTier` estructura:

```
"serviceTier": {
  "type": "reserved" | "priority" | "default" | "flex"
}
```

Para obtener información detallada sobre los niveles de servicio, incluidas las características de precio y rendimiento, consulte[Niveles de servicio para optimizar el rendimiento y los costes](service-tiers-inference.md).

Si lo desea, también puede añadir puntos de comprobación de caché a los campos `tools` o `system` para utilizar el almacenamiento en caché de peticiones, según el modelo que utilice. Para obtener más información, consulte [Almacenamiento en caché de peticiones para una inferencia de modelos más rápida](prompt-caching.md).

## Respuesta
<a name="conversation-inference-call-response"></a>

La respuesta que reciba de la API Converse depende de la operación a la que llame: `Converse` o `ConverseStream`.

**Topics**
+ [Respuesta de Converse](#conversation-inference-call-response-converse)
+ [ConverseStream respuesta](#conversation-inference-call-response-converse-stream)

### Respuesta de Converse
<a name="conversation-inference-call-response-converse"></a>

En la respuesta de`Converse`, el `output` campo ([ConverseOutput](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ConverseOutput.html)) contiene el mensaje ([Mensaje](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Message.html)) que genera el modelo. El contenido del mensaje está en el campo `content` ([ContentBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ContentBlock.html)) y el rol (`user`o`assistant`) al que corresponde el mensaje está en el `role` campo. 

Si usó el [almacenamiento en caché de peticiones](prompt-caching.md), en el campo de uso, `cacheReadInputTokensCount` y `cacheWriteInputTokensCount` le indicarán cuántos tokens en total se leyeron de la caché y se escribieron en ella, respectivamente.

Si usó [niveles de servicio](#inference-service-tiers), en el campo de respuesta, se `service tier` le indicará qué nivel de servicio se usó para la solicitud.

El `metrics` campo ([ConverseMetrics](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ConverseMetrics.html)) incluye las métricas de la llamada. Para determinar por qué el modelo ha dejado de generar contenido, compruebe el campo `stopReason`. Para obtener información sobre los tokens transferidos al modelo en la solicitud y los tokens generados en la respuesta, marque el `usage` campo ([TokenUsage](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_TokenUsage.html)). Si ha especificado campos de respuesta adicionales en la solicitud, la API los devolverá como JSON en el campo `additionalModelResponseFields`. 

En el siguiente ejemplo se muestra la respuesta de `Converse` al pasar la petición descrita en [Solicitud](#conversation-inference-call-request).

```
{
    "output": {
        "message": {
            "role": "assistant",
            "content": [
                {
                    "text": "Here is a list of 3 pop songs by artists from the United Kingdom:\n\n1. \"Wannabe\" by Spice Girls\n2. \"Bitter Sweet Symphony\" by The Verve \n3. \"Don't Look Back in Anger\" by Oasis"
                }
            ]
        }
    },
    "stopReason": "end_turn",
    "usage": {
        "inputTokens": 125,
        "outputTokens": 60,
        "totalTokens": 185
    },
    "metrics": {
        "latencyMs": 1175
    }
}
```

### ConverseStream respuesta
<a name="conversation-inference-call-response-converse-stream"></a>

Si llama a `ConverseStream` para transmitir la respuesta de un modelo, la transmisión se devuelve en el campo de respuesta `stream`. La transmisión emite los siguientes eventos en este orden.

1. `messageStart`([MessageStartEvent](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_MessageStartEvent.html)). El evento de inicio de un mensaje. Incluye el rol del mensaje.

1. `contentBlockStart`([ContentBlockStartEvent](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ContentBlockStartEvent.html)). Un evento de inicio de un bloque de contenido. Solo para uso de la herramienta. 

1. `contentBlockDelta`([ContentBlockDeltaEvent](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ContentBlockDeltaEvent.html)). Un evento delta de bloques de contenido. Incluye uno de los siguientes:
   + `text`: el texto parcial que genera el modelo.
   + `reasoningContent`: el razonamiento parcial llevado a cabo por el modelo para generar la respuesta. Debe enviar el elemento `signature` devuelto, además de todos los mensajes anteriores en solicitudes `Converse` posteriores. Si se cambia alguno de los mensajes, la respuesta produce un error.
   + `toolUse`: el objeto JSON de entrada parcial para el uso de herramientas.

1. `contentBlockStop`([ContentBlockStopEvent](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ContentBlockStopEvent.html)). Un evento de interrupción del bloqueo de contenido.

1. `messageStop`([MessageStopEvent](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_MessageStopEvent.html)). El evento de parada del mensaje. Incluye el motivo por el que el modelo ha dejado de generar resultados. 

1. `metadata`([ConverseStreamMetadataEvent](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ConverseStreamMetadataEvent.html)). Metadatos de la solicitud. Los metadatos incluyen el uso del token en `usage` ([TokenUsage](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_TokenUsage.html)) y las métricas de la llamada en `metrics` ([ConverseStreamMetadataEvent](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ConverseStreamMetadataEvent.html)).

ConverseStream transmite un bloque de contenido completo como un `ContentBlockStartEvent` evento, uno o más `ContentBlockDeltaEvent` eventos y un `ContentBlockStopEvent` evento. Use el campo `contentBlockIndex` como índice para correlacionar los eventos que componen un bloque de contenido.

El siguiente ejemplo es una respuesta parcial desde `ConverseStream`. 

```
{'messageStart': {'role': 'assistant'}}
{'contentBlockDelta': {'delta': {'text': ''}, 'contentBlockIndex': 0}}
{'contentBlockDelta': {'delta': {'text': ' Title'}, 'contentBlockIndex': 0}}
{'contentBlockDelta': {'delta': {'text': ':'}, 'contentBlockIndex': 0}}
.
.
.
{'contentBlockDelta': {'delta': {'text': ' The'}, 'contentBlockIndex': 0}}
{'messageStop': {'stopReason': 'max_tokens'}}
{'metadata': {'usage': {'inputTokens': 47, 'outputTokens': 20, 'totalTokens': 67}, 'metrics': {'latencyMs': 100.0}}}
```

# Ejemplos de la API Converse
<a name="conversation-inference-examples"></a>

En los siguientes ejemplos se muestra cómo se utilizas las operaciones `Converse` y `ConverseStream`.

------
#### [ Text ]

En este ejemplo se muestra cómo llamar a la operación `Converse` con el modelo *Anthropic Claude 3 Sonnet*. El ejemplo muestra cómo enviar el texto de entrada, los parámetros de inferencia y los parámetros adicionales que son exclusivos del modelo. El código inicia una conversación pidiéndole al modelo que cree una lista de canciones. Luego, continúa la conversación pidiendo que las canciones sean de artistas del Reino Unido.

```
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to use the <noloc>Converse</noloc> API with Anthropic Claude 3 Sonnet (on demand).
"""

import logging
import boto3

from botocore.exceptions import ClientError


logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)


def generate_conversation(bedrock_client,
                          model_id,
                          system_prompts,
                          messages):
    """
    Sends messages to a model.
    Args:
        bedrock_client: The Boto3 Bedrock runtime client.
        model_id (str): The model ID to use.
        system_prompts (JSON) : The system prompts for the model to use.
        messages (JSON) : The messages to send to the model.

    Returns:
        response (JSON): The conversation that the model generated.

    """

    logger.info("Generating message with model %s", model_id)

    # Inference parameters to use.
    temperature = 0.5
    top_k = 200

    # Base inference parameters to use.
    inference_config = {"temperature": temperature}
    # Additional inference parameters to use.
    additional_model_fields = {"top_k": top_k}

    # Send the message.
    response = bedrock_client.converse(
        modelId=model_id,
        messages=messages,
        system=system_prompts,
        inferenceConfig=inference_config,
        additionalModelRequestFields=additional_model_fields
    )

    # Log token usage.
    token_usage = response['usage']
    logger.info("Input tokens: %s", token_usage['inputTokens'])
    logger.info("Output tokens: %s", token_usage['outputTokens'])
    logger.info("Total tokens: %s", token_usage['totalTokens'])
    logger.info("Stop reason: %s", response['stopReason'])

    return response

def main():
    """
    Entrypoint for Anthropic Claude 3 Sonnet example.
    """

    logging.basicConfig(level=logging.INFO,
                        format="%(levelname)s: %(message)s")

    model_id = "anthropic.claude-3-sonnet-20240229-v1:0"

    # Setup the system prompts and messages to send to the model.
    system_prompts = [{"text": "You are an app that creates playlists for a radio station that plays rock and pop music. Only return song names and the artist."}]
    message_1 = {
        "role": "user",
        "content": [{"text": "Create a list of 3 pop songs."}]
    }
    message_2 = {
        "role": "user",
        "content": [{"text": "Make sure the songs are by artists from the United Kingdom."}]
    }
    messages = []

    try:

        bedrock_client = boto3.client(service_name='bedrock-runtime')

        # Start the conversation with the 1st message.
        messages.append(message_1)
        response = generate_conversation(
            bedrock_client, model_id, system_prompts, messages)

        # Add the response message to the conversation.
        output_message = response['output']['message']
        messages.append(output_message)

        # Continue the conversation with the 2nd message.
        messages.append(message_2)
        response = generate_conversation(
            bedrock_client, model_id, system_prompts, messages)

        output_message = response['output']['message']
        messages.append(output_message)

        # Show the complete conversation.
        for message in messages:
            print(f"Role: {message['role']}")
            for content in message['content']:
                print(f"Text: {content['text']}")
            print()

    except ClientError as err:
        message = err.response['Error']['Message']
        logger.error("A client error occurred: %s", message)
        print(f"A client error occured: {message}")

    else:
        print(
            f"Finished generating text with model {model_id}.")


if __name__ == "__main__":
    main()
```

------
#### [ Image ]

En este ejemplo se muestra cómo enviar una imagen como parte de un mensaje y se solicita al modelo que describa la imagen. El ejemplo utiliza la operación `Converse` y el modelo *Anthropic Claude 3 Sonnet*. 

```
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to send an image with the <noloc>Converse</noloc> API with an accompanying text prompt to Anthropic Claude 3 Sonnet (on demand).
"""

import logging
import boto3


from botocore.exceptions import ClientError


logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)


def generate_conversation(bedrock_client,
                          model_id,
                          input_text,
                          input_image):
    """
    Sends a message to a model.
    Args:
        bedrock_client: The Boto3 Bedrock runtime client.
        model_id (str): The model ID to use.
        input text : The text prompt accompanying the image.
        input_image : The path to the input image.

    Returns:
        response (JSON): The conversation that the model generated.

    """

    logger.info("Generating message with model %s", model_id)

    # Get image extension and read in image as bytes
    image_ext = input_image.split(".")[-1]
    with open(input_image, "rb") as f:
        image = f.read()

    message = {
        "role": "user",
        "content": [
            {
                "text": input_text
            },
            {
                "image": {
                    "format": image_ext,
                    "source": {
                        "bytes": image
                    }
                }
            }
        ]
    }

    messages = [message]

    # Send the message.
    response = bedrock_client.converse(
        modelId=model_id,
        messages=messages
    )

    return response


def main():
    """
    Entrypoint for Anthropic Claude 3 Sonnet example.
    """

    logging.basicConfig(level=logging.INFO,
                        format="%(levelname)s: %(message)s")

    model_id = "anthropic.claude-3-sonnet-20240229-v1:0"
    input_text = "What's in this image?"
    input_image = "path/to/image"

    try:

        bedrock_client = boto3.client(service_name="bedrock-runtime")

        response = generate_conversation(
            bedrock_client, model_id, input_text, input_image)

        output_message = response['output']['message']

        print(f"Role: {output_message['role']}")

        for content in output_message['content']:
            print(f"Text: {content['text']}")

        token_usage = response['usage']
        print(f"Input tokens:  {token_usage['inputTokens']}")
        print(f"Output tokens:  {token_usage['outputTokens']}")
        print(f"Total tokens:  {token_usage['totalTokens']}")
        print(f"Stop reason: {response['stopReason']}")

    except ClientError as err:
        message = err.response['Error']['Message']
        logger.error("A client error occurred: %s", message)
        print(f"A client error occured: {message}")

    else:
        print(
            f"Finished generating text with model {model_id}.")


if __name__ == "__main__":
    main()
```

------
#### [ Document ]

En este ejemplo se muestra cómo enviar un documento como parte de un mensaje y se solicita al modelo que describa el contenido del documento. El ejemplo utiliza la operación `Converse` y el modelo *Anthropic Claude 3 Sonnet*. 

```
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to send an document as part of a message to Anthropic Claude 3 Sonnet (on demand).
"""

import logging
import boto3


from botocore.exceptions import ClientError


logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)


def generate_message(bedrock_client,
                     model_id,
                     input_text,
                     input_document_path):
    """
    Sends a message to a model.
    Args:
        bedrock_client: The Boto3 Bedrock runtime client.
        model_id (str): The model ID to use.
        input text : The input message.
        input_document_path : The path to the input document.

    Returns:
        response (JSON): The conversation that the model generated.

    """

    logger.info("Generating message with model %s", model_id)

    # Get format from path and read the path
    input_document_format = input_document_path.split(".")[-1]
    with open(input_document_path, 'rb') as input_document_file:
        input_document = input_document_file.read()

    # Message to send.
    message = {
        "role": "user",
        "content": [
            {
                "text": input_text
            },
            {
                "document": {
                    "name": "MyDocument",
                    "format": input_document_format,
                    "source": {
                        "bytes": input_document
                    }
                }
            }
        ]
    }

    messages = [message]

    # Send the message.
    response = bedrock_client.converse(
        modelId=model_id,
        messages=messages
    )

    return response


def main():
    """
    Entrypoint for Anthropic Claude 3 Sonnet example.
    """

    logging.basicConfig(level=logging.INFO,
                        format="%(levelname)s: %(message)s")

    model_id = "anthropic.claude-3-sonnet-20240229-v1:0"
    input_text = "What's in this document?"
    input_document_path = "path/to/document"

    try:

        bedrock_client = boto3.client(service_name="bedrock-runtime")


        response = generate_message(
            bedrock_client, model_id, input_text, input_document_path)

        output_message = response['output']['message']

        print(f"Role: {output_message['role']}")

        for content in output_message['content']:
            print(f"Text: {content['text']}")

        token_usage = response['usage']
        print(f"Input tokens:  {token_usage['inputTokens']}")
        print(f"Output tokens:  {token_usage['outputTokens']}")
        print(f"Total tokens:  {token_usage['totalTokens']}")
        print(f"Stop reason: {response['stopReason']}")

    except ClientError as err:
        message = err.response['Error']['Message']
        logger.error("A client error occurred: %s", message)
        print(f"A client error occured: {message}")

    else:
        print(
            f"Finished generating text with model {model_id}.")


if __name__ == "__main__":
    main()
```

------
#### [ Streaming ]

En este ejemplo se muestra cómo llamar a la operación `ConverseStream` con el modelo *Anthropic Claude 3 Sonnet*. El ejemplo muestra cómo enviar el texto de entrada, los parámetros de inferencia y los parámetros adicionales que son exclusivos del modelo.

```
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to use the <noloc>Converse</noloc> API to stream a response from Anthropic Claude 3 Sonnet (on demand).
"""

import logging
import boto3


from botocore.exceptions import ClientError


logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)


def stream_conversation(bedrock_client,
                    model_id,
                    messages,
                    system_prompts,
                    inference_config,
                    additional_model_fields):
    """
    Sends messages to a model and streams the response.
    Args:
        bedrock_client: The Boto3 Bedrock runtime client.
        model_id (str): The model ID to use.
        messages (JSON) : The messages to send.
        system_prompts (JSON) : The system prompts to send.
        inference_config (JSON) : The inference configuration to use.
        additional_model_fields (JSON) : Additional model fields to use.

    Returns:
        Nothing.

    """

    logger.info("Streaming messages with model %s", model_id)

    response = bedrock_client.converse_stream(
        modelId=model_id,
        messages=messages,
        system=system_prompts,
        inferenceConfig=inference_config,
        additionalModelRequestFields=additional_model_fields
    )

    stream = response.get('stream')
    if stream:
        for event in stream:

            if 'messageStart' in event:
                print(f"\nRole: {event['messageStart']['role']}")

            if 'contentBlockDelta' in event:
                print(event['contentBlockDelta']['delta']['text'], end="")

            if 'messageStop' in event:
                print(f"\nStop reason: {event['messageStop']['stopReason']}")

            if 'metadata' in event:
                metadata = event['metadata']
                if 'usage' in metadata:
                    print("\nToken usage")
                    print(f"Input tokens: {metadata['usage']['inputTokens']}")
                    print(
                        f":Output tokens: {metadata['usage']['outputTokens']}")
                    print(f":Total tokens: {metadata['usage']['totalTokens']}")
                if 'metrics' in event['metadata']:
                    print(
                        f"Latency: {metadata['metrics']['latencyMs']} milliseconds")


def main():
    """
    Entrypoint for streaming message API response example.
    """

    logging.basicConfig(level=logging.INFO,
                        format="%(levelname)s: %(message)s")

    model_id = "anthropic.claude-3-sonnet-20240229-v1:0"
    system_prompt = """You are an app that creates playlists for a radio station
      that plays rock and pop music. Only return song names and the artist."""

    # Message to send to the model.
    input_text = "Create a list of 3 pop songs."

    message = {
        "role": "user",
        "content": [{"text": input_text}]
    }
    messages = [message]
    
    # System prompts.
    system_prompts = [{"text" : system_prompt}]

    # inference parameters to use.
    temperature = 0.5
    top_k = 200
    # Base inference parameters.
    inference_config = {
        "temperature": temperature
    }
    # Additional model inference parameters.
    additional_model_fields = {"top_k": top_k}

    try:
        bedrock_client = boto3.client(service_name='bedrock-runtime')

        stream_conversation(bedrock_client, model_id, messages,
                        system_prompts, inference_config, additional_model_fields)

    except ClientError as err:
        message = err.response['Error']['Message']
        logger.error("A client error occurred: %s", message)
        print("A client error occured: " +
              format(message))

    else:
        print(
            f"Finished streaming messages with model {model_id}.")


if __name__ == "__main__":
    main()
```

------
#### [ Video ]

En este ejemplo se muestra cómo enviar un vídeo como parte de un mensaje y se solicita al modelo que describa el vídeo. El ejemplo utiliza la operación `Converse` y el modelo Amazon Nova Pro.

```
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to send a video with the <noloc>Converse</noloc> API to Amazon Nova Pro (on demand).
"""

import logging
import boto3


from botocore.exceptions import ClientError


logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)


def generate_conversation(bedrock_client,
                          model_id,
                          input_text,
                          input_video):
    """
    Sends a message to a model.
    Args:
        bedrock_client: The Boto3 Bedrock runtime client.
        model_id (str): The model ID to use.
        input text : The input message.
        input_video : The input video.

    Returns:
        response (JSON): The conversation that the model generated.

    """

    logger.info("Generating message with model %s", model_id)

    # Message to send.

    with open(input_video, "rb") as f:
        video = f.read()

    message = {
        "role": "user",
        "content": [
            {
                "text": input_text
            },
            {
                    "video": {
                        "format": 'mp4',
                        "source": {
                            "bytes": video
                        }
                    }
            }
        ]
    }

    messages = [message]

    # Send the message.
    response = bedrock_client.converse(
        modelId=model_id,
        messages=messages
    )

    return response


def main():
    """
    Entrypoint for Amazon Nova Pro example.
    """

    logging.basicConfig(level=logging.INFO,
                        format="%(levelname)s: %(message)s")

    model_id = "amazon.nova-pro-v1:0"
    input_text = "What's in this video?"
    input_video = "path/to/video"

    try:

        bedrock_client = boto3.client(service_name="bedrock-runtime")

        response = generate_conversation(
            bedrock_client, model_id, input_text, input_video)

        output_message = response['output']['message']

        print(f"Role: {output_message['role']}")

        for content in output_message['content']:
            print(f"Text: {content['text']}")

        token_usage = response['usage']
        print(f"Input tokens:  {token_usage['inputTokens']}")
        print(f"Output tokens:  {token_usage['outputTokens']}")
        print(f"Total tokens:  {token_usage['totalTokens']}")
        print(f"Stop reason: {response['stopReason']}")

    except ClientError as err:
        message = err.response['Error']['Message']
        logger.error("A client error occurred: %s", message)
        print(f"A client error occured: {message}")

    else:
        print(
            f"Finished generating text with model {model_id}.")


if __name__ == "__main__":
    main()
```

------

# Restricciones de API
<a name="inference-api-restrictions"></a>

Las siguientes restricciones se aplican a las `ConverseStream` operaciones `InvokeModel` `InvokeModelWithResponseStream``Converse`,, y. Algunas restricciones varían según la operación o el modelo, como se indica a continuación:
+ Al utilizar estas operaciones, solo puede incluir imágenes y documentos si `role` es así`user`.
+ **Generación de vídeo:** la generación de vídeo no es compatible con `InvokeModel` y`InvokeModelWithResponseStream`. En su lugar, puede utilizar la [StartAsyncInvoke](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_StartAsyncInvoke.html)operación. Para ver un ejemplo, consulte [Uso de Amazon Nova Reel para generar un vídeo a partir de una petición de texto](https://docs.aws.amazon.com/bedrock/latest/userguide/bedrock-runtime_example_bedrock-runtime_Scenario_AmazonNova_TextToVideo_section.html).
+ **Soporte de documentos en el cuerpo de la solicitud:** no se admite incluir documentos en el cuerpo de la solicitud cuando se utiliza `InvokeModel` y`InvokeModelWithResponseStream`. Para incluir un documento durante la inferencia, utilice el [campo de juego de chat/texto](playgrounds.md) de las operaciones Consola de administración de AWS o utilice las `Converse` operaciones o. `ConverseStream`
+ **Recuento y tamaño de los documentos:** puede incluir hasta 5 documentos por solicitud. Cada documento no puede tener un tamaño superior a 4,5 MB. Para Claude 4 y versiones posteriores, la restricción de tamaño del documento de 4,5 MB no se aplica al `PDF` formato. En los modelos Nova, la restricción de tamaño de documento de 4,5 MB no se aplica a `PDF` ningún `DOCX` formato. Estas restricciones siguen aplicándose en la consola Bedrock. Los modelos individuales pueden tener restricciones de contenido adicionales a las aplicadas por Amazon Bedrock. Para obtener más información, consulte los **requisitos para proveedores de modelos externos**.
+ **Recuento y tamaño de imágenes**: Amazon Bedrock no impone restricciones en cuanto al número y tamaño de las imágenes. Sin embargo, los modelos individuales pueden tener requisitos de imagen específicos. Para obtener más información, consulte los **requisitos de los proveedores de modelos externos**.
+ **Requisitos de proveedores de modelos externos:** los requisitos de los proveedores de modelos externos se aplican cuando utilizas `InvokeModel` `InvokeModelWithResponseStream``Converse`, y `ConverseStream` operaciones y, si no los cumples, pueden provocar un error. Si utiliza un modelo de terceros a través de Amazon Bedrock (por ejemplo, Anthropic Claude), consulte la guía del usuario y la documentación de la API del proveedor para evitar errores inesperados. Por ejemplo, el terminal estándar de Anthropic Messages admite un tamaño máximo de solicitud de 32 MB. Claude también tiene requisitos de contenido específicos, como un máximo de 100 `PDF` páginas por solicitud y un tamaño máximo de imagen de 8000 x 8000 px. Para obtener la información más reciente sobre las solicitudes y respuestas de Anthropic Claude Messages, incluidos el tamaño de las solicitudes y los requisitos de contenido, consulte la siguiente documentación de Anthropic Claude: [Descripción general de la API de Anthropic Claude, Referencia de la API](https://platform.claude.com/docs/en/api/overview) [de Anthropic Claude Messages](https://docs.anthropic.com/claude/reference/messages_post), [Build with Claude: Vision](https://platform.claude.com/docs/en/build-with-claude/vision) y [Build with Claude:](https://platform.claude.com/docs/en/build-with-claude/pdf-support) PDF Support.

**sugerencia**  
Claude exige que los documentos PDF tengan un máximo de 100 páginas por solicitud. Si tiene documentos PDF más grandes, le recomendamos dividirlos en varios de PDFs menos de 100 páginas cada uno o consolidar más texto en menos páginas.

# Obtenga resultados JSON validados de los modelos
<a name="structured-output"></a>

Los resultados estructurados son una capacidad de Amazon Bedrock que garantiza que las respuestas de los modelos se ajusten a los esquemas JSON y las definiciones de herramientas definidos por el usuario, lo que reduce la necesidad de mecanismos personalizados de análisis y validación en las implementaciones de IA de producción.

## Ventajas
<a name="structured-output-benefits"></a>

Los resultados estructurados abordan los desafíos críticos de las aplicaciones de IA de producción:
+ **Garantiza el cumplimiento del esquema**: elimina las tasas de error y los ciclos de reintento propios de los enfoques basados en solicitudes
+ **Menor complejidad de desarrollo**: elimina la necesidad de una lógica de análisis y validación personalizada
+ **Menores costos operativos**: reduce las solicitudes y los reintentos fallidos
+ **Fiabilidad de producción**: permite un despliegue seguro de aplicaciones de IA que requieren resultados predecibles y legibles por máquina

## Funcionamiento
<a name="structured-output-how-it-works"></a>

Las salidas estructuradas limitan las respuestas del modelo para que sigan un esquema específico, lo que garantiza una salida válida y analizable para el procesamiento posterior. Puede utilizar salidas estructuradas a través de dos mecanismos complementarios:

### Formato de salida del esquema JSON
<a name="structured-output-json-schema"></a>

Para la InvokeModel API con modelos Anthropic Claude, utilice el campo de `output_config.format` solicitud. En el caso de los modelos de peso abierto, utilice el campo de `response_format` solicitud. Para Converse APIs, usa el campo de `outputConfig.textFormat` solicitud. La respuesta del modelo se ajustará al esquema JSON especificado.

### Uso estricto de la herramienta
<a name="structured-output-strict-tool-use"></a>

Añada la `strict: true` marca a las definiciones de las herramientas para permitir la validación del esquema en los nombres y las entradas de las herramientas. A continuación, las llamadas a las herramientas del modelo seguirán el esquema de entrada de herramientas definido.

Estos mecanismos se pueden usar de forma independiente o juntos en la misma solicitud. Consulte la [documentación de la API de Bedrock](https://docs.aws.amazon.com/bedrock/latest/APIReference/welcome.html) para obtener más información.

### Solicite un flujo de trabajo
<a name="structured-output-request-workflow"></a>

A continuación, se describe cómo Amazon Bedrock procesa las solicitudes con resultados estructurados:

1. **Solicitud inicial**: incluye un esquema JSON mediante la definición de `outputConfig.textFormat``output_config.format`, o un `response_format` parámetro o una herramienta con la `strict: true` marca en su solicitud de inferencia.

1. **Validación del esquema**: Amazon Bedrock valida el formato de esquema JSON con el subconjunto JSON Schema Draft 2020-12 compatible. Si el esquema contiene funciones no compatibles, Amazon Bedrock devuelve inmediatamente un error 400.

1. **Compilación por primera vez**: para los esquemas nuevos, Amazon Bedrock compila la gramática, lo que puede tardar unos minutos.

1. **Almacenamiento en caché**: las gramáticas compiladas correctamente se almacenan en caché durante 24 horas desde el primer acceso. Las gramáticas almacenadas en caché se cifran con claves administradas por AWS.

1. **Solicitudes posteriores**: los esquemas idénticos de la misma cuenta utilizan gramáticas en caché, lo que da como resultado una latencia de inferencia comparable a la de las solicitudes estándar con una sobrecarga mínima.

1. **Respuesta**: recibe respuestas de inferencia estándar con un estricto cumplimiento del esquema.

## Compatible con nuestras APIs funciones
<a name="structured-output-supported-apis"></a>

Puede utilizar salidas estructuradas en las siguientes funciones de Amazon Bedrock:

**Converse y ConverseStream APIs**: utilice salidas estructuradas con Converse y ConverseStream APIs para realizar inferencias conversacionales.

**InvokeModel y InvokeModelWithResponseStream APIs**: utilice salidas estructuradas con y para la inferencia de un solo InvokeModel giro InvokeModelWithResponseStream APIs .

**Inferencia entre regiones: utilice resultados estructurados dentro de la inferencia** entre regiones sin ninguna configuración adicional.

**Inferencia por lotes**: utilice salidas estructuradas dentro de la inferencia por lotes sin ninguna configuración adicional.

**nota**  
Los resultados estructurados son incompatibles con las citas de los modelos antrópicos. Si habilita las citas mientras utiliza salidas estructuradas, el modelo devolverá un error de 400.

## Modelos compatibles
<a name="structured-output-supported-models"></a>

Las salidas estructuradas están generalmente disponibles en todas las regiones comerciales de AWS para algunos modelos sin servidor de Amazon Bedrock. Para ver la lista de modelos compatibles, consulte Soporte de modelos por función.

### Ver todos los modelos compatibles
<a name="w2aac13c32c35c11b5b1"></a>

Anthropic  
+ Claude Haiku 4.5 () `anthropic.claude-haiku-4-5-20251001-v1:0`
+ Soneto Claude 4.5 () `anthropic.claude-sonnet-4-5-20250929-v1:0`
+ Claudio Opus 4.5 () `anthropic.claude-opus-4-5-20251101-v1:0`
+ Claude Opus 4.6 () `anthropic.claude-opus-4-6-v1`

Qwen  
+ Qwen3 235 B A2 B 2507 () `qwen.qwen3-235b-a22b-2507-v1:0`
+ Qen3 32B (denso) () `qwen.qwen3-32b-v1:0`
+ Qwen3-Coder-30B-A3B-Instruct () `qwen.qwen3-coder-30b-a3b-v1:0`
+ Codificador Qwen3 480B A35B Instruct () `qwen.qwen3-coder-480b-a35b-v1:0`
+ Qwen3 Next 80B A3B `qwen.qwen3-next-80b-a3b` ()
+ Qwen3 VL 235B A2B () `qwen.qwen3-vl-235b-a22b`

OpenAI  
+ `openai.gpt-oss-120b-1:0`gpt-oss-120b ()
+ gpt-oss-20b () `openai.gpt-oss-20b-1:0`
+ GPT OSS Safeguard 120B () `openai.gpt-oss-safeguard-120b`
+ GPT OSS Safeguard 20B () `openai.gpt-oss-safeguard-20b`

DeepSeek  
+ DeepSeek-V3.1 () `deepseek.v3-v1:0`

Google  
+ Gemma 3 12 B IT () `google.gemma-3-12b-it`
+ Gemma 3 27B PT () `google.gemma-3-27b-it`

MiniMax  
+ MiniMax M2 (2) `minimax.minimax-m2`

Mistral AI  
+ Magistral Small 2509 () `mistral.magistral-small-2509`
+ Ministral 3B () `mistral.ministral-3-3b-instruct`
+ Ministerial 3 (8B) `mistral.ministral-3-8b-instruct`
+ Ministral 14B 3.0 () `mistral.ministral-3-14b-instruct`
+ Mistral Large (3) `mistral.mistral-large-3-675b-instruct`
+ Voxtral Mini 3B 2507 () `mistral.voxtral-mini-3b-2507`
+ Voxtral Pequeño 24V 2507 () `mistral.voxtral-small-24b-2507`

Moonshot AI  
+ Kimi K2 Pensando () `moonshot.kimi-k2-thinking`

NVIDIA  
+ NVIDIA Nemotron Nano 12B v2 VL () BF16 `nvidia.nemotron-nano-12b-v2`
+ NVIDIA Nemotron Nano 9B v2 () `nvidia.nemotron-nano-9b-v2`

## Solicitudes de ejemplo
<a name="structured-output-examples"></a>

### Formato de salida del esquema JSON
<a name="structured-output-json-schema-examples"></a>

Los siguientes ejemplos muestran cómo utilizar el formato de salida del esquema JSON con salidas estructuradas.

#### API de Converse
<a name="json-schema-converse"></a>

##### Ver ejemplo
<a name="w2aac13c32c35c13b3b5b3b1"></a>

```
{
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "Given the following unstructured data, extract it into the provided structure."
        },
        {
          "text": "..."
        }
      ]
    }
  ],
  "outputConfig": {
    "textFormat": {
      "type": "json_schema",
      "structure": {
        "jsonSchema": {
          "schema": "{\"type\": \"object\", \"properties\": {\"title\": {\"type\": \"string\", \"description\": \"title\"}, \"summary\": {\"type\": \"string\", \"description\": \"summary\"}, \"next_steps\": {\"type\": \"string\", \"description\": \"next steps\"}}, \"required\": [\"title\", \"summary\", \"next_steps\"], \"additionalProperties\": false}",
          "name": "data_extraction",
          "description": "Extract structured data from unstructured text"
        }
      }
    }
  }
}
```

#### InvokeModel (Claude antrópico)
<a name="json-schema-invokemodel-claude"></a>

##### Ver ejemplo
<a name="w2aac13c32c35c13b3b7b3b1"></a>

```
{
  "anthropic_version": "bedrock-2023-05-31",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "Given the following unstructured data, extract it into the provided structure."
        },
        {
          "type": "text",
          "text": "..."
        }
      ]
    }
  ],
  "max_tokens": 3000,
  "temperature": 1.0,
  "output_config": {
    "format": {
      "type": "json_schema",
      "schema": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "description": "title"
          },
          "summary": {
            "type": "string",
            "description": "summary"
          },
          "next_steps": {
            "type": "string",
            "description": "next steps"
          }
        },
        "required": [
          "title",
          "summary",
          "next_steps"
        ],
        "additionalProperties": false
      }
    }
  }
}
```

#### InvokeModel (Modelos de peso abierto)
<a name="json-schema-invokemodel-openweight"></a>

##### Ver ejemplo
<a name="w2aac13c32c35c13b3b9b3b1"></a>

```
{
  "messages": [
    {
      "role": "user",
      "content": "Given the following unstructured data, extract it into the provided structure."
    },
    {
      "role": "user",
      "content": "..."
    }
  ],
  "inferenceConfig": {
    "maxTokens": 3000,
    "temperature": 1.0
  },
  "response_format": {
    "json_schema": {
      "name": "summarizer",
      "schema": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "description": "title"
          },
          "summary": {
            "type": "string",
            "description": "summary"
          },
          "next_steps": {
            "type": "string",
            "description": "next steps"
          }
        },
        "required": [
          "title",
          "summary",
          "next_steps"
        ],
        "additionalProperties": false
      }
    },
    "type": "json_schema"
  }
}
```

### Uso estricto de la herramienta
<a name="structured-output-strict-tool-examples"></a>

Los siguientes ejemplos muestran cómo utilizar el campo estricto con el uso de herramientas.

#### API de Converse
<a name="strict-tool-converse"></a>

##### Ver ejemplo
<a name="w2aac13c32c35c13b5b5b3b1"></a>

```
{
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "What's the weather like in New York?"
        }
      ]
    }
  ],
  "toolConfig": {
    "tools": [
      {
        "toolSpec": {
          "name": "get_weather",
          "description": "Get the current weather for a specified location",
          "strict": true,
          "inputSchema": {
            "json": {
              "type": "object",
              "properties": {
                "location": {
                  "type": "string",
                  "description": "The city and state, e.g. San Francisco, CA"
                },
                "unit": {
                  "type": "string",
                  "enum": [
                    "fahrenheit",
                    "celsius"
                  ],
                  "description": "The temperature unit to use"
                }
              },
              "required": [
                "location",
                "unit"
              ]
            }
          }
        }
      }
    ]
  }
}
```

#### InvokeModel (Claude antrópico)
<a name="strict-tool-invokemodel-claude"></a>

##### Ver ejemplo
<a name="w2aac13c32c35c13b5b7b3b1"></a>

```
{
  "anthropic_version": "bedrock-2023-05-31",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "What's the weather like in San Francisco?"
        }
      ]
    }
  ],
  "max_tokens": 3000,
  "temperature": 1.0,
  "tools": [
    {
      "name": "get_weather",
      "description": "Get the current weather for a specified location",
      "strict": true,
      "input_schema": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "description": "The city and state, e.g. San Francisco, CA"
          },
          "unit": {
            "type": "string",
            "enum": [
              "fahrenheit",
              "celsius"
            ],
            "description": "The temperature unit to use"
          }
        },
        "required": [
          "location",
          "unit"
        ],
        "additionalProperties": false
      }
    }
  ]
}
```

#### InvokeModel (Modelos de peso abierto)
<a name="strict-tool-invokemodel-openweight"></a>

##### Ver ejemplo
<a name="w2aac13c32c35c13b5b9b3b1"></a>

```
{
  "messages": [
    {
      "role": "user",
      "content": "What's the weather like in San Francisco?"
    }
  ],
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "get_weather",
        "description": "Get the current weather for a specified location",
        "strict": true,
        "parameters": {
          "type": "object",
          "properties": {
            "location": {
              "type": "string",
              "description": "The city and state, e.g. San Francisco, CA"
            },
            "unit": {
              "type": "string",
              "enum": [
                "fahrenheit",
                "celsius"
              ],
              "description": "The temperature unit to use"
            }
          },
          "required": [
            "location",
            "unit"
          ]
        }
      }
    }
  ],
  "tool_choice": "auto",
  "max_tokens": 2000,
  "temperature": 1.0
}
```

# Uso de la característica Uso de computadora para completar una respuesta del modelo de Amazon Bedrock
<a name="computer-use"></a>

Uso del equipo es una capacidad del modelo Anthropic Claude (en versión beta) disponible únicamente con Anthropic Claude 3.7 Sonnet y Claude 3.5 Sonnet v2. Con Uso de computadora, Claude puede ayudarlo a automatizar tareas mediante acciones básicas de la GUI.

**aviso**  
La función de uso del ordenador está disponible para usted como un «Servicio beta», tal como se define en los Términos del AWS servicio. Está sujeto a su acuerdo con AWS él, a las condiciones del AWS servicio y al modelo de EULA aplicable. Tenga en cuenta que la API de Computer Use presenta riesgos únicos que son distintos de los de las características de la API estándar o de las interfaces de chat. Estos riesgos aumentan cuando se utiliza la API de Computer Use para interactuar con internet. Para minimizar los riesgos, considere tomar las siguientes precauciones:  
Utilice la característica Uso de computadora en una máquina virtual o un contenedor específicos con privilegios mínimos para evitar ataques directos al sistema o accidentes.
Evitar dar a la API de Computer Use acceso a datos o cuentas confidenciales, para prevenir el robo de información.
Limite el acceso a internet de la API de Computer Use a los dominios necesarios para reducir la exposición a contenido malicioso.
Para garantizar una supervisión adecuada, asigne a una persona a las tareas delicadas (como la toma de decisiones que podría tener consecuencias significativas en el mundo real) y para cualquier cosa que requiera un consentimiento afirmativo (como aceptar cookies, ejecutar transacciones financieras o aceptar las condiciones del servicio).
Cualquier contenido que permita que Claude vea o acceda puede anular las instrucciones o provocar que Claude realice errores o acciones no deseadas. Es fundamental tomar las precauciones adecuadas, como aislar a Claude de las superficies sensibles, incluso para evitar los riesgos relacionados con una inyección de peticiones. Antes de habilitar o solicitar los permisos necesarios para activar las características Uso de computadora en sus propios productos, informe a los usuarios finales de los riesgos correspondientes y obtenga su consentimiento, según proceda. 

La API de Computer Use le ofrece varias herramientas de uso de computadora predeterminadas (*computer\$120241022*, *bash\$120241022* y *text\$1editor\$120241022*). A continuación, podrá crear una petición en la solicitud, como “envía un correo electrónico a Ben con las notas de mi última reunión” y una captura de pantalla (si es necesario). La respuesta contiene una lista de acciones de `tool_use` en formato JSON (por ejemplo, scroll\$1down, left\$1button\$1press, screenshot). El código ejecuta las acciones de la computadora y proporciona a Claude una captura de pantalla que muestra los resultados (cuando se solicita).

El parámetro tools se ha actualizado para que acepte tipos de herramientas polimórficas; se ha añadido una nueva propiedad `tool.type` para distinguirlos. `type` es opcional; si se omite, se asume que la herramienta es personalizada (anteriormente, era el único tipo de herramienta compatible). Además, se ha añadido un nuevo parámetro `anthropic_beta` con el correspondiente valor de enumeración: `computer-use-2024-10-22`. Solo las solicitudes realizadas con este parámetro y enumeración pueden usar las nuevas herramientas de uso de computadora. Se puede especificar de la siguiente manera: `"anthropic_beta": ["computer-use-2024-10-22"] `.

Para utilizar un ordenador con la Anthropic Claude 3.5 Sonnet versión 2, puede utilizar la Converse API ([Converse](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html) o [ConverseStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ConverseStream.html)). El uso del equipo se especifica en campos específicos en el campo `additionalModelRequestFields`. Para obtener información general sobre la llamada a la API Converse, consulte [Cómo mantener una conversación con las operaciones de la API Converse](conversation-inference.md).

Es posible utilizar herramientas con las operaciones de inferencia base ([InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html)o [InvokeModelWithResponseStream](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModelWithResponseStream.html)). Para encontrar los parámetros de inferencia que se transfieren en el cuerpo de la solicitud, consulte [API de Messages de Anthropic Claude](model-parameters-anthropic-claude-messages.md).

Para obtener más información, consulte [Uso de computadora (beta)](https://docs.anthropic.com/en/docs/build-with-claude/computer-use) en la documentación de Anthropic.

**Topics**
+ [Código de ejemplo](#computer-use-example-code)
+ [Ejemplo de respuesta](#example-response)

## Código de ejemplo
<a name="computer-use-example-code"></a>

El siguiente código muestra cómo llamar a la API de Computer Use. La entrada es una imagen de la AWS consola. 

```
with open('test_images/console.png', 'rb') as f:
        png = f.read()

    response = bedrock.converse(
        modelId='anthropic.claude-3-5-sonnet-20241022-v2:0',
        messages=[
            {
                'role': 'user',
                'content': [
                    {
                        'text': 'Go to the bedrock console'
                    },
                    {
                        'image': {
                            'format': 'png',
                            'source': {
                                'bytes': png
                            }
                        }
                    }
                ]
            }
        ],
        additionalModelRequestFields={
            "tools": [
                {
                    "type": "computer_20241022",
                    "name": "computer",
                    "display_height_px": 768,
                    "display_width_px": 1024,
                    "display_number": 0
                },
                {
                    "type": "bash_20241022",
                    "name": "bash",

                },
                {
                    "type": "text_editor_20241022",
                    "name": "str_replace_editor",
                }
            ],
            "anthropic_beta": ["computer-use-2024-10-22"]
        },
        toolConfig={
            'tools': [
                {
                    'toolSpec': {
                        'name': 'get_weather',
                        'inputSchema': {
                            'json': {
                                'type': 'object'
                            }
                        }
                    }
                }
            ]
        })

    print(json.dumps(response, indent=4))
```

## Ejemplo de respuesta
<a name="example-response"></a>

El código de ejemplo da un resultado similar al siguiente.

```
{
   "id": "msg_bdrk_01Ch8g9MF3A9FTrmeywrwfMZ",
   "type": "message",
   "role": "assistant",
   "content": [
        {
            "type": "text",
            "text": "I can see from the screenshot that we're already in the AWS Console. To go to the Amazon Bedrock console specifically, I'll click on the Amazon Bedrock service from the \"Recently Visited\" section."
        },
        {
            "type": "tool_use",
            "id": "toolu_bdrk_013sAzs1gsda9wLrfD8bhYQ3",
            "name": "computer",
            "input": {
                "action": "screenshot"
            }
        }
   ],
   "stop_reason": "tool_use",
   "stop_sequence": null,
   "usage": {
       "input_tokens": 3710,
       "output_tokens": 97
   }
}
```