

# Preparación de datos para el SFT en Amazon Nova 2
<a name="nova-data-prep-sft-2"></a>

El SFT en Amazon Nova 2 permite la comprensión de textos, imágenes, videos y documentos, así como la utilización de herramientas, con o sin soporte de razonamiento. En esta página, se describen las restricciones, los formatos compatibles y las prácticas recomendadas para preparar los datos de entrenamiento de SFT para los modelos de comprensión de Amazon Nova 2.

**sugerencia**  
Para validar el formato de su conjunto de datos antes de iniciar un trabajo de entrenamiento, consulte [Herramientas de validación](nova-data-preparation.md#nova-data-validation-tools).

**Topics**
+ [Formato de los datos](#nova-2-data-overview)
+ [Ejemplo de entradas](#nova-2-data-examples)
+ [Características admitidas](#nova-2-supported-features)
+ [Comprensión general/de textos](#sft-general-constraints)
+ [Comprensión de imágenes](#sft-image-understanding)
+ [Comprensión de videos](#sft-video-understanding)
+ [Comprensión de documentos](#sft-document-understanding)
+ [Llamada a herramientas](#sft-tool-calling)
+ [Razonamiento](#sft-reasoning)
+ [Diseño de ejemplos de entrenamiento eficaces](#designing-effective-training-examples)

## Formato de los datos
<a name="nova-2-data-overview"></a>

Los datos del SFT de Amazon Nova 2 utilizan el mismo formato de [Converse API](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference-call.html) que Amazon Nova 1, con la adición de campos opcionales de [contenido de razonamiento](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ReasoningContentBlock.html).

Cada línea de su archivo de entrenamiento JSONL es un objeto JSON con los siguientes campos de nivel superior. Amplíe cada sección para obtener más información:

### Mensajes
<a name="sft-field-messages"></a>

Obligatorio. El campo `messages` es una matriz de objetos de mensajes, cada uno de los cuales define un turno en la conversación. Un objeto de mensaje contiene los siguientes campos:
+ **rol**: obligatorio. Define si el mensaje proviene de `user` (la petición enviada al modelo) o `assistant` (la respuesta del modelo). El primer turno debe ser de `user`, el último debe ser de `assistant` y los turnos deben alternarse.
+ **contenido**: obligatorio. Una matriz de bloques de contenido para este turno.

El campo `content` se asigna a una matriz de bloques de contenido. Los datos SFT de Amazon Nova 2 admiten los siguientes bloques:

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

Una cadena que especifica el contenido del texto. Se admite tanto en turnos de `user` como en turnos de `assistant`.

A continuación, se muestra un objeto de mensaje de ejemplo con una matriz `content` que contiene solo un bloque de contenido de `text`:

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

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

Un objeto de imagen que especifica su formato y ubicación en S3. Solo se admite en turnos de `user`.

A continuación, se muestra un objeto Message de ejemplo con una matriz de contenido que contiene solo un bloque de contenido de imagen:

```
{
    "role": "user",
    "content": [
        {
            "image": {
                "format": "jpeg",
                "source": {
                    "s3Location": {
                        "uri": "s3://{{your-bucket}}/{{your-image.jpg}}",
                        "bucketOwner": "{{account-id}}"
                    }
                }
            }
        }
    ]
}
```

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

Un objeto de video que especifica su formato y ubicación en S3. Solo se admite en turnos de `user`.

A continuación, se muestra un objeto de mensaje de ejemplo con una matriz de contenido que contiene solo un bloque de contenido de imagen:

```
{
    "role": "user",
    "content": [
        {
            "video": {
                "format": "mp4",
                "source": {
                    "s3Location": {
                        "uri": "s3://{{your-bucket}}/{{your-video.mp4}}",
                        "bucketOwner": "{{account-id}}"
                    }
                }
            }
        }
    ]
}
```

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

Un objeto de documento que especifica su formato y ubicación en S3. Solo se admite en turnos de `user`.

A continuación, se muestra un objeto de mensaje de ejemplo con una matriz de contenido que contiene solo un bloque de contenido de documento:

```
{
    "role": "user",
    "content": [
        {
            "document": {
                "format": "pdf",
                "source": {
                    "s3Location": {
                        "uri": "s3://{{your-bucket}}/{{your-document.pdf}}",
                        "bucketOwner": "{{account-id}}"
                    }
                }
            }
        }
    ]
}
```

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

Un objeto de seguimiento de razonamiento. Solo se admite en turnos de `assistant`. Solo se admite el razonamiento basado en texto; no se admite el contenido de razonamiento basado en imágenes.

A continuación, se muestra un objeto de mensaje de ejemplo con una matriz de contenido que contiene solo un bloque de contenido de razonamiento:

```
{
    "role": "assistant",
    "content": [
        {
            "reasoningContent": {
                "reasoningText": {
                    "text": "{{string}}"
                }
            }
        },
        {
            "text": "{{final answer}}"
        }
    ]
}
```

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

Un objeto de invocación de herramientas. Solo se admite en turnos de `assistant`. El `toolUseId` debe ser único por conversación y el `name` debe coincidir con una herramienta definida en `toolConfig`.

A continuación, se muestra un objeto de mensaje de ejemplo con una matriz de contenido que contiene solo un bloque de contenido de uso de herramientas:

```
{
    "role": "assistant",
    "content": [
        {
            "toolUse": {
                "toolUseId": "{{unique-id}}",
                "name": "{{tool-name}}",
                "input": { {{...}} }
            }
        }
    ]
}
```

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

Un objeto de resultado de una herramienta. Solo se admite en turnos de `user`. Cada `toolUseId` debe hacer referencia a un `toolUse` precedente y usarse exactamente una vez. El contenido debe ser solo texto o JSON.

A continuación, se muestra un objeto de mensaje de ejemplo con una matriz de contenido que contiene solo un bloque de contenido de resultado de herramientas:

```
{
    "role": "user",
    "content": [
        {
            "toolResult": {
                "toolUseId": "{{matching-id}}",
                "content": [
                    {
                        "text": "{{result}}"
                    }
                ]
            }
        }
    ]
}
```

------

### sistema
<a name="sft-field-system"></a>

Una matriz opcional que define una petición del sistema: instrucciones o contexto para el modelo acerca de la tarea que debe realizar o el personaje que debe adoptar. Use la misma petición del sistema tanto durante el entrenamiento como durante la inferencia para obtener los mejores resultados.

```
"system": [
    {
        "text": "{{You are a helpful assistant.}}"
    }
]
```

### toolConfig
<a name="sft-field-toolconfig"></a>

Un objeto opcional que define las herramientas disponibles para que el modelo las utilice durante la conversación. Cada herramienta se define con un nombre, una descripción y un esquema JSON para sus parámetros de entrada.

```
"toolConfig": {
    "tools": [
        {
            "toolSpec": {
                "name": "{{tool-name}}",
                "description": "{{tool-description}}",
                "inputSchema": {
                    "json": {
                        "type": "object",
                        "properties": {
                            "{{param}}": {
                                "type": "string",
                                "description": "{{param-description}}"
                            }
                        },
                        "required": ["{{param}}"]
                    }
                }
            }
        }
    ]
}
```

### schemaVersion
<a name="sft-field-schemaversion"></a>

Obligatorio. Un campo de cadena que identifica la versión del esquema. Puede tener cualquier valor de cadena.

```
"schemaVersion": "bedrock-conversation-2024"
```

**Validación de los datos**

Antes de enviar su trabajo de entrenamiento, valide su conjunto de datos para detectar pronto los problemas de formato. Para ver las herramientas de validación disponibles, consulte [Herramientas de validación](nova-data-preparation.md#nova-data-validation-tools).

## Ejemplo de entradas
<a name="nova-2-data-examples"></a>

A continuación, se muestran ejemplos completos de objetos JSON que ilustran cómo combinar los campos y los bloques de contenido para diferentes modalidades.

------
#### [ Text-only (Nova 1.0 compatible) ]

```
{
    "schemaVersion": "bedrock-conversation-2024",
    "system": [
        {
            "text": "You are a digital assistant with a friendly personality"
        }
    ],
    "messages": [
        {
            "role": "user",
            "content": [
                {
                    "text": "What country is right next to Australia?"
                }
            ]
        },
        {
            "role": "assistant",
            "content": [
                {
                    "text": "The closest country is New Zealand"
                }
            ]
        }
    ]
}
```

------
#### [ Image \+ text input ]

```
{
    "schemaVersion": "bedrock-conversation-2024",
    "system": [
        {
            "text": "You are a helpful assistant."
        }
    ],
    "messages": [
        {
            "role": "user",
            "content": [
                {
                    "image": {
                        "format": "jpeg",
                        "source": {
                            "s3Location": {
                                "uri": "s3://your-bucket/your-path/your-image.jpg",
                                "bucketOwner": "your-aws-account-id"
                            }
                        }
                    }
                },
                {
                    "text": "Which country is highlighted in the image?"
                }
            ]
        },
        {
            "role": "assistant",
            "content": [
                {
                    "reasoningContent": {
                        "reasoningText": {
                            "text": "I will determine the highlighted country by examining its location on the map and using my geographical knowledge"
                        }
                    }
                },
                {
                    "text": "The highlighted country is New Zealand"
                }
            ]
        }
    ]
}
```

------
#### [ Video \+ text input ]

```
{
    "schemaVersion": "bedrock-conversation-2024",
    "system": [
        {
            "text": "You are a helpful assistant."
        }
    ],
    "messages": [
        {
            "role": "user",
            "content": [
                {
                    "video": {
                        "format": "mp4",
                        "source": {
                            "s3Location": {
                                "uri": "s3://your-bucket/your-path/your-video.mp4",
                                "bucketOwner": "your-aws-account-id"
                            }
                        }
                    }
                },
                {
                    "text": "What is shown in this video?"
                }
            ]
        },
        {
            "role": "assistant",
            "content": [
                {
                    "reasoningContent": {
                        "reasoningText": {
                            "text": "I will analyze the video content to identify key elements"
                        }
                    }
                },
                {
                    "text": "The video shows a map with New Zealand highlighted"
                }
            ]
        }
    ]
}
```

------
#### [ Document \+ text input ]

```
{
    "schemaVersion": "bedrock-conversation-2024",
    "messages": [
        {
            "role": "user",
            "content": [
                {
                    "text": "What are the ways in which a customer can experience issues during checkout on Amazon?"
                },
                {
                    "document": {
                        "format": "pdf",
                        "source": {
                            "s3Location": {
                                "uri": "s3://my-bucket-name/path/to/documents/customer_service_debugging.pdf",
                                "bucketOwner": "123456789012"
                            }
                        }
                    }
                }
            ]
        },
        {
            "role": "assistant",
            "content": [
                {
                    "reasoningContent": {
                        "reasoningText": {
                            "text": "I need to find the relevant section in the document to answer the question."
                        }
                    }
                },
                {
                    "text": "Customers can experience issues with 1. Data entry, 2. Payment methods, 3. Connectivity while placing the order. Which one would you like to dive into?"
                }
            ]
        }
    ]
}
```

------
#### [ Text with tool calling ]

```
{
    "schemaVersion": "bedrock-conversation-2024",
    "system": [
        {
            "text": "You are an expert in composing function calls."
        }
    ],
    "toolConfig": {
        "tools": [
            {
                "toolSpec": {
                    "name": "getItemAvailability",
                    "description": "Retrieve whether an item is available in a given location",
                    "inputSchema": {
                        "json": {
                            "type": "object",
                            "properties": {
                                "zipcode": {
                                    "type": "string",
                                    "description": "The zipcode of the location to check in"
                                },
                                "quantity": {
                                    "type": "integer",
                                    "description": "The number of items to check availability for"
                                },
                                "item_id": {
                                    "type": "string",
                                    "description": "The ASIN of item to check availability for"
                                }
                            },
                            "required": ["item_id", "zipcode"]
                        }
                    }
                }
            }
        ]
    },
    "messages": [
        {
            "role": "user",
            "content": [
                {
                    "text": "I need to check whether there are twenty pieces of the following item available. Here is the item ASIN on Amazon: id-123. Please check for the zipcode 94086"
                }
            ]
        },
        {
            "role": "assistant",
            "content": [
                {
                    "reasoningContent": {
                        "reasoningText": {
                            "text": "The user wants to check how many pieces of the item with ASIN id-123 are available in the zipcode 94086"
                        }
                    }
                },
                {
                    "toolUse": {
                        "toolUseId": "getItemAvailability_0",
                        "name": "getItemAvailability",
                        "input": {
                            "zipcode": "94086",
                            "quantity": 20,
                            "item_id": "id-123"
                        }
                    }
                }
            ]
        },
        {
            "role": "user",
            "content": [
                {
                    "toolResult": {
                        "toolUseId": "getItemAvailability_0",
                        "content": [
                            {
                                "text": "[{\"name\": \"getItemAvailability\", \"results\": {\"availability\": true}}]"
                            }
                        ]
                    }
                }
            ]
        },
        {
            "role": "assistant",
            "content": [
                {
                    "text": "Yes, there are twenty pieces of item id-123 available at 94086. Would you like to place an order or know the total cost?"
                }
            ]
        }
    ]
}
```

------
#### [ Text with reasoning ]

```
{
    "schemaVersion": "bedrock-conversation-2024",
    "system": [
        {
            "text": "You are a digital assistant with a friendly personality"
        }
    ],
    "messages": [
        {
            "role": "user",
            "content": [
                {
                    "text": "What country is right next to Australia?"
                }
            ]
        },
        {
            "role": "assistant",
            "content": [
                {
                    "reasoningContent": {
                        "reasoningText": {
                            "text": "I need to use my world knowledge of geography to answer this question"
                        }
                    }
                },
                {
                    "text": "The closest country to Australia is New Zealand, located to the southeast across the Tasman Sea."
                }
            ]
        }
    ]
}
```

------

## Características admitidas
<a name="nova-2-supported-features"></a>

En la siguiente tabla se compara la compatibilidad de características con SFT en todas las versiones del modelo Nova.


**Compatibilidad de características de SFT por versión de modelo**  

| Característica | SFT en Nova 2.0 | 
| --- | --- | 
| Comprensión de textos | Compatible con Nova 2.0 Lite. Consulte [Comprensión general/de textos](#sft-general-constraints). | 
| Comprensión de imágenes | Compatible con Nova 2.0 Lite. Consulte [Comprensión de imágenes](#sft-image-understanding). | 
| Comprensión de videos | Compatible con Nova 2.0 Lite. Consulte [Comprensión de videos](#sft-video-understanding). | 
| Comprensión de documentos | Compatible con Nova 2.0 Lite. Consulte [Comprensión de documentos](#sft-document-understanding). | 
| Llamada a herramientas | Compatible con Nova 2.0 Lite. Consulte [Llamada a herramientas](#sft-tool-calling). | 
| Razonamiento | Compatible con Nova 2.0 Lite. Consulte [Razonamiento](#sft-reasoning). | 

## Comprensión general/de textos
<a name="sft-general-constraints"></a>

En esta sección se resumen las restricciones generales para preparar el SFT en los datos de entrenamiento de Amazon Nova 2.

**Restricciones**


**Restricciones del conjunto de datos**  

| Restricción | Details | 
| --- | --- | 
| Formato de conjuntos de datos | JSONL (un objeto JSON por línea). Los nombres de archivo solo pueden estar compuestos por caracteres alfanuméricos, guiones bajos, guiones, barras y puntos. | 
| Muestras mínimas | 8 | 
| Muestras máximas | 20 000 | 
| Longitud del contenido | 32 000 | 
| Homogeneidad del conjunto de datos | Un conjunto de datos no puede mezclar diferentes modalidades multimedia. Use texto con imágenes, texto con videos o texto con documentos, pero no una combinación de estos. | 
| Palabras clave reservadas | User:, Bot:, Assistant:, System:, <image>, <video>, [EOS]. Las peticiones que contengan estas palabras clave harán que el trabajo de entrenamiento no se realice correctamente. Sustitúyalas por palabras clave diferentes con significados similares. | 

**Prácticas recomendadas**
+ El tamaño mínimo de los datos para el afinamiento depende de la tarea (es decir, si es compleja o sencilla), pero recomendamos que tenga al menos 200 muestras para cada tarea que desee que aprenda el modelo.
+ Recomendamos utilizar su petición optimizada en un entorno desde cero tanto durante el entrenamiento como durante la inferencia para lograr los mejores resultados.
+ Priorice la calidad sobre la cantidad. Unos pocos cientos de ejemplos coherentes y de alta calidad suelen ofrecer mejores resultados que miles de ejemplos ruidosos o contradictorios.

**Ejemplo de entrada**
+ `schemaVersion` puede tener cualquier valor de cadena.
+ Los roles compatibles son `user` y `assistant`. El turno `system` (*opcional*) puede ser una petición del sistema personalizada proporcionada por el cliente.
+ El primer turno en `messages` siempre debe comenzar con `"role": "user"`. El último turno corresponde a la respuesta del bot y se identifica mediante `"role": "assistant"`.

### Ejemplo de solo texto
<a name="sft-general-sample"></a>

```
{
  "schemaVersion": "bedrock-conversation-2024",
  "system": [
    {
      "text": "You are a digital assistant with a friendly personality"
    }
  ],
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "What country is right next to Australia?"
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "text": "The closest country is New Zealand"
        }
      ]
    }
  ]
}
```

## Comprensión de imágenes
<a name="sft-image-understanding"></a>

El SFT admite el entrenamiento en tareas basadas en imágenes, lo que permite al modelo aprender a analizar y responder a preguntas sobre imágenes.

**Restricciones**


**Restricciones de imagen**  

| Restricción | Details | 
| --- | --- | 
| Formatos admitidos | PNG, JPEG, GIF, WebP | 
| Número máximo de imágenes por muestra | 10 | 
| Tamaño máximo de archivo de imagen | 10 MB | 
| Homogeneidad del conjunto de datos | Una muestra puede tener imágenes y texto, pero no puede tener imágenes combinadas con otras modalidades (videos, documentos). | 
| Ubicación de S3 | El image.source.s3Location.uri debe estar en el mismo bucket de Amazon S3 que su conjunto de datos. Por ejemplo, si su conjunto de datos está en s3://amzn-s3-demo-bucket/train/train.jsonl, entonces sus imágenes o videos deben estar en s3://amzn-s3-demo-bucket | 

**Prácticas recomendadas**
+ Asegúrese de que las imágenes sean de alta calidad y relevantes para la tarea.
+ Proporcione varios ejemplos que abarquen diferentes tipos de imágenes y formatos de preguntas.
+ Incluya preguntas claras que hagan referencia a aspectos específicos del contenido de la imagen.

**Ejemplo de entrada**

### Ejemplo de imagen y texto
<a name="sft-image-sample"></a>

```
{
  "schemaVersion": "bedrock-conversation-2024",
  "system": [
    {
      "text": "You are a helpful assistant."
    }
  ],
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "image": {
            "format": "jpeg",
            "source": {
              "s3Location": {
                "uri": "s3://your-bucket/your-path/your-image.jpg",
                "bucketOwner": "your-aws-account-id"
              }
            }
          }
        },
        {
          "text": "Which country is highlighted in the image?"
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "text": "The highlighted country is New Zealand"
        }
      ]
    }
  ]
}
```

## Comprensión de videos
<a name="sft-video-understanding"></a>

El SFT admite el entrenamiento en tareas basadas en videos, lo que permite al modelo aprender a analizar y responder a preguntas sobre contenido de videos.

**Restricciones**


**Restricciones de video**  

| Restricción | Details | 
| --- | --- | 
| Formatos admitidos | MOV, MKV, MP4, WebM | 
| Número máximo de videos por muestra | 1 | 
| Tamaño máximo de archivo de video | 50 MB | 
| Duración máxima del video | 15 minutos | 
| Homogeneidad del conjunto de datos | Una muestra puede tener video y texto, pero no puede tener videos combinados con otras modalidades (imágenes, documentos). | 
| Ubicación de S3 | El video.source.s3Location.uri debe estar en el mismo bucket de Amazon S3 que su conjunto de datos. Por ejemplo, si su conjunto de datos está en s3://amzn-s3-demo-bucket/train/train.jsonl, entonces sus videos deben estar en s3://amzn-s3-demo-bucket | 

**Prácticas recomendadas**
+ Mantenga los videos concisos y centrados en el contenido relevante para la tarea.
+ Asegúrese de que la calidad del video sea suficiente para que el modelo extraiga información significativa.
+ Proporcione preguntas claras que hagan referencia a aspectos específicos del contenido de videos.
+ Incluya varios ejemplos que abarquen diferentes tipos de videos y formatos de preguntas.

**Ejemplo de entrada**

### Ejemplo de video y texto
<a name="sft-video-sample"></a>

```
{
  "schemaVersion": "bedrock-conversation-2024",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "What are the ways in which a customer can experience issues during checkout on Amazon?"
        },
        {
          "video": {
            "format": "mp4",
            "source": {
              "s3Location": {
                "uri": "s3://my-bucket-name/path/to/videos/customer_service_debugging.mp4",
                "bucketOwner": "123456789012"
              }
            }
          }
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "text": "Customers can experience issues with 1. Data entry, 2. Payment methods, 3. Connectivity while placing the order. Which one would you like to dive into?"
        }
      ]
    }
  ]
}
```

## Comprensión de documentos
<a name="sft-document-understanding"></a>

El SFT admite el entrenamiento en tareas basadas en documentos, lo que permite al modelo aprender a analizar y responder a preguntas sobre documentos PDF.

**Restricciones**


**Restricciones de documentos**  

| Restricción | Details | 
| --- | --- | 
| Formato admitidos | PDF | 
| Tamaño máximo del documento | 10 MB | 
| Homogeneidad del conjunto de datos | Una muestra puede tener documentos y texto, pero no puede tener documentos mezclados con otras modalidades (imágenes, videos) | 
| Ubicación de S3 | El document.source.s3Location.uri debe estar en el mismo bucket de Amazon S3 que su conjunto de datos. Por ejemplo, si su conjunto de datos está en s3://amzn-s3-demo-bucket/train/train.jsonl, entonces sus videos deben estar en s3://amzn-s3-demo-bucket | 

**Prácticas recomendadas**
+ Asegúrese de que los documentos tengan un formato claro y que el texto sea extraíble.
+ Proporcione varios ejemplos que abarquen diferentes tipos de documentos y formatos de preguntas.
+ Incluya contenido de razonamiento para ayudar al modelo a aprender los patrones de análisis de documentos.

**Ejemplo de entrada**

### Ejemplo de documento y texto
<a name="sft-document-sample"></a>

```
{
  "schemaVersion": "bedrock-conversation-2024",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "What are the ways in which a customer can experience issues during checkout on Amazon?"
        },
        {
          "document": {
            "format": "pdf",
            "source": {
              "s3Location": {
                "uri": "s3://my-bucket-name/path/to/documents/customer_service_debugging.pdf",
                "bucketOwner": "123456789012"
              }
            }
          }
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "text": "Customers can experience issues with 1. Data entry, 2. Payment methods, 3. Connectivity while placing the order. Which one would you like to dive into?"
        }
      ]
    }
  ]
}
```

## Llamada a herramientas
<a name="sft-tool-calling"></a>

El SFT admite modelos de entrenamiento en patrones de uso de herramientas, lo que permite al modelo aprender cuándo y cómo debe invocar herramientas o funciones externas.

**Restricciones**


**Restricciones de llamada a herramientas**  

| Restricción | Details | 
| --- | --- | 
| Formatos admitidos | Texto o JSON para el contenido de ToolResult | 
| Colocación de ToolUse | ToolUse solo debe aparecer en los turnos del asistente. | 
| Colocación de ToolResult | ToolResult solo debe aparecer en los turnos del usuario. | 
| Formato de inputSchema | inputSchema en toolSpec debe ser un objeto de esquema JSON válido | 
| Coincidencia de toolUseId | Cada ToolResult debe hacer referencia a un toolUseId válido de un ToolUse de asistente anterior, y cada toolUseId debe usarse exactamente una vez por conversación. | 

**Prácticas recomendadas**
+ Asegúrese de que las definiciones de las herramientas sean coherentes en todos los ejemplos de entrenamiento.
+ El modelo aprende los patrones de invocación de las herramientas a partir de las demostraciones que usted proporciona.
+ Incluya varios ejemplos de cuándo se debe usar cada herramienta y cuándo no se deben usar herramientas.

**Ejemplo de entrada**

### Ejemplo de texto con llamadas a herramientas
<a name="sft-tool-sample"></a>

```
{
  "schemaVersion": "bedrock-conversation-2024",
  "system": [
    {
      "text": "You are an expert in composing function calls."
    }
  ],
  "toolConfig": {
    "tools": [
      {
        "toolSpec": {
          "name": "getItemAvailability",
          "description": "Retrieve whether an item is available in a given location",
          "inputSchema": {
            "json": {
              "type": "object",
              "properties": {
                "zipcode": {
                  "type": "string",
                  "description": "The zipcode of the location to check in"
                },
                "quantity": {
                  "type": "integer",
                  "description": "The number of items to check availability for"
                },
                "item_id": {
                  "type": "string",
                  "description": "The ASIN of item to check availability for"
                }
              },
              "required": ["item_id", "zipcode"]
            }
          }
        }
      }
    ]
  },
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "I need to check whether there are twenty pieces of the following item available. Here is the item ASIN on Amazon: id-123. Please check for the zipcode 94086"
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "toolUse": {
            "toolUseId": "getItemAvailability_0",
            "name": "getItemAvailability",
            "input": {
              "zipcode": "94086",
              "quantity": 20,
              "item_id": "id-123"
            }
          }
        }
      ]
    },
    {
      "role": "user",
      "content": [
        {
          "toolResult": {
            "toolUseId": "getItemAvailability_0",
            "content": [
              {
                "text": "[{\"name\": \"getItemAvailability\", \"results\": {\"availability\": true}}]"
              }
            ]
          }
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "text": "Yes, there are twenty pieces of item id-123 available at 94086. Would you like to place an order or know the total cost?"
        }
      ]
    }
  ]
}
```

## Razonamiento
<a name="sft-reasoning"></a>

El contenido de razonamiento (conocido también como cadena de pensamiento) captura los pasos de pensamiento intermedios del modelo antes de generar una respuesta final.

**Restricciones**


**Restricciones de razonamiento**  

| Restricción | Details | 
| --- | --- | 
| Formato admitidos | Solo texto. No se admite el contenido de razonamiento basado en imágenes. | 
| Placement | Solo en los turnos del asistente, a través del campo reasoningContent. | 
| Formato | Use texto sin formato. Evite las etiquetas de marcado como <thinking> y </thinking> a menos que la tarea lo requiera específicamente. | 

**Prácticas recomendadas**
+ El contenido de razonamiento de alta calidad debe incluir pensamientos intermedios, deducciones lógicas, enfoques de resolución de problemas paso a paso y conexiones explícitas entre los pasos y las conclusiones.
+ Puedes incluir `reasoningContent` en varios turnos del asistente en conversaciones de varios turnos.
+ Si el conjunto de datos carece de rastros de razonamiento, puede crearlos con un modelo con capacidad de razonamiento como Nova Premier.

**Ejemplo de entrada**

### Texto con un ejemplo de razonamiento
<a name="sft-reasoning-sample"></a>

```
{
  "schemaVersion": "bedrock-conversation-2024",
  "system": [
    {
      "text": "You are a digital assistant with a friendly personality"
    }
  ],
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "What country is right next to Australia?"
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "reasoningContent": {
            "reasoningText": {
              "text": "I need to use my world knowledge of geography to answer this question"
            }
          }
        },
        {
          "text": "The closest country to Australia is New Zealand, located to the southeast across the Tasman Sea."
        }
      ]
    }
  ]
}
```

**Notas adicionales**

Cómo se calcula la pérdida:
+ **Con contenido de razonamiento**: la pérdida de entrenamiento incluye tanto los tokens de razonamiento como los de salida final.
+ **Sin contenido de razonamiento**: la pérdida de entrenamiento se calcula solo en los tokens de salida final.

Establezca `reasoning_enabled: true` en su configuración de entrenamiento cuando los datos de entrenamiento contengan tokens de razonamiento, desee que el modelo genere tokens de pensamiento antes de producir los resultados finales o necesite mejorar el rendimiento en tareas de razonamiento complejas.

Establezca `reasoning_enabled: false` cuando sus datos de entrenamiento no contengan tokens de razonamiento, cuando esté entrenando para realizar tareas sencillas que no se beneficien de pasos de razonamiento explícitos o cuando desee optimizar la velocidad y reducir el uso de tokens.

Se permita entrenar a Nova con un conjunto de datos que no sea de razonamiento con `reasoning_enabled = true`. Sin embargo, hacerlo puede provocar que el modelo pierda sus capacidades de razonamiento, ya que Nova aprende principalmente a generar las respuestas presentadas en los datos sin aplicar el razonamiento. En general, habilite el razonamiento tanto para el entrenamiento como para la inferencia cuando utilice conjuntos de datos de razonamiento y desactívelo para ambos cuando utilice conjuntos de datos sin razonamiento.

## Diseño de ejemplos de entrenamiento eficaces
<a name="designing-effective-training-examples"></a>

Los datos de entrenamiento deben reflejar el *comportamiento* que desea que el modelo adopte. El SFT enseña al modelo *cómo* responder, no *qué* debe saber. Si observa que crea ejemplos de entrenamiento principalmente para incorporar conocimientos fácticos (por ejemplo, “¿Qué significa el código de error E-45?” con la respuesta “E-45 indica un tiempo de espera agotado del sensor”), considere si RAG o la ingeniería de peticiones podrían lograr el mismo resultado sin necesidad de refinamiento.

Al convertir los datos de origen al formato conversacional, siga estos principios:

1. **Parta de consultas reales de usuarios.** Escriba intervenciones de usuario que reflejen cómo los usuarios finales realmente formularán peticiones al modelo en producción. Evite preguntas artificiales o demasiado simplificadas que no reflejen patrones de uso reales.

1. **Escriba respuestas del asistente de máxima calidad.** Cada intervención del asistente debe representar la respuesta ideal que desea que produzca el modelo: correcta, bien estructurada y coherente en tono y formato en todos los ejemplos.

1. **Use la petición del sistema de forma estratégica.** Coloque en la intervención del sistema instrucciones persistentes, como el formato de los resultados, el rol del modelo y el contexto del dominio. Use la misma petición del sistema tanto durante el entrenamiento como durante la inferencia para obtener los mejores resultados.

1. **Mantenga cada ejemplo centrado en una sola habilidad por muestra.** Si necesita que el modelo clasifique, responda preguntas y genere resúmenes, cree conjuntos de ejemplos independientes para cada habilidad en lugar de combinar varias habilidades en una sola muestra.

1. **Priorice la calidad sobre la cantidad.** Unos pocos cientos de ejemplos coherentes y de alta calidad suelen ofrecer mejores resultados que miles de ejemplos ruidosos o contradictorios. Elimine duplicados y revise los datos antes del entrenamiento.

### Patrones comunes de transformación de datos
<a name="common-data-transformation-patterns"></a>

Los siguientes patrones muestran cómo convertir formatos comunes de datos empresariales en ejemplos eficaces de entrenamiento para SFT.

**Patrón 1: Registros estructurados para clasificación o búsqueda**  
Cuando los datos de origen consisten en una tabla o base de datos de registros con campos como `issue`, `cause` y `resolution`, formule cada registro como una pregunta de usuario con los campos de entrada pertinentes y use la respuesta del asistente como los campos de salida objetivo.

```
// train.jsonl
{
  "schemaVersion": "bedrock-conversation-2024",
  "system": [
    {
      "text": "You are a technical support assistant. Given an issue description, identify the most likely root cause and recommended resolution."
    }
  ],
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "A user reports: 'Application crashes on startup after the latest update.' What is the likely cause and resolution?"
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "text": "Cause: Incompatible configuration file from the previous version.\nResolution: Delete the local configuration cache and restart the application to regenerate default settings."
        }
      ]
    }
  ]
}
```

**Patrón 2: Datos jerárquicos o taxonómicos para preguntas y respuestas estructuradas**  
Cuando los datos de origen consisten en una jerarquía de códigos o una taxonomía, como árboles de categorías de productos o sistemas de clasificación, genere preguntas que requieran que el modelo explore la jerarquía. Incluya el contexto de clasificación en la petición del sistema o en la intervención del usuario.

```
// train.jsonl
{
  "schemaVersion": "bedrock-conversation-2024",
  "system": [
    {
      "text": "You are a product catalog assistant. Answer questions about product categories and classifications accurately."
    }
  ],
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "What top-level category does product code 'EL-4520' belong to, and what subcategories does it include?"
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "text": "Product code EL-4520 belongs to the Electronics category. It includes the subcategories: Audio Equipment, Portable Speakers, and Wireless Accessories."
        }
      ]
    }
  ]
}
```

**Patrón 3: Documentos procedimentales para diálogos instructivos**  
Cuando los datos de origen consisten en procedimientos operativos estándar, manuales de procedimientos o guías paso a paso, convierta los procedimientos en preguntas orientadas a tareas. El usuario pregunta cómo realizar una tarea y el asistente proporciona los pasos en un formato coherente.

```
// train.jsonl
{
  "schemaVersion": "bedrock-conversation-2024",
  "system": [
    {
      "text": "You are an IT operations assistant. Provide step-by-step instructions based on approved runbooks and standard operating procedures."
    }
  ],
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "How do I reset a user's multi-factor authentication when they have lost access to their device?"
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "text": "Follow these steps to reset a user's multi-factor authentication:\n1. Verify the user's identity using the approved verification procedure.\n2. Disable the existing MFA configuration in the identity management console.\n3. Generate a new temporary access code and send it to the user's verified email.\n4. Instruct the user to log in with the temporary code and re-enroll their new device.\n5. Confirm the new MFA device is working by requesting a test authentication.\n6. Document the reset in the support ticket."
        }
      ]
    }
  ]
}
```

**nota**  
En los patrones 1 y 2, si el contenido fáctico (como códigos, categorías o resoluciones) no forma parte de los datos de preentrenamiento del modelo, considere usar RAG para proporcionar esa información durante el tiempo de inferencia en lugar de depender únicamente de SFT para que el modelo la memorice. El SFT es más eficaz para enseñar al modelo el formato de las respuestas y los patrones de razonamiento, mientras que RAG se encarga de fundamentar la información fáctica.