

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.

# Prepare los datos para los modelos de peso abierto
<a name="rft-prepare-data-open-weight"></a>

Cuando ajustes modelos de peso libre con refuerzos mediante OpenAI-compatible API, proporciona datos de entrenamiento introduciendo tus propias instrucciones en formato JSONL con ese propósito. `fine-tune`

## Formato y requisitos de los datos de entrenamiento
<a name="rft-data-format-open-weight"></a>

Los datos de entrenamiento deben seguir el formato de finalización del chat de OpenAI con entre 100 y 20 000 ejemplos. Cada ejemplo de formación contiene:
+ `messages`: En este campo, incluya el rol de usuario, sistema o asistente que contiene la solicitud de entrada proporcionada al modelo.
+ `reference_answer`: En este campo, debe contener el resultado esperado o los criterios de evaluación que su función de recompensa utiliza para puntuar la respuesta del modelo. No se limita a los resultados estructurados, sino que puede contener cualquier formato que ayude a la función de recompensa a evaluar la calidad.
+ [Opcional] Puede agregar los campos utilizados por la calificadora Lambda para la calificación.

**Requisitos:**
+ Formato JSONL con mensajes en formato de finalización de chat de OpenAI (un mensaje por línea)
+ El propósito debe estar establecido en `fine-tune`
+ Un mínimo de 100 registros en el conjunto de datos de entrenamiento
+ Amazon Bedrock valida automáticamente el formato del conjunto de datos de entrenamiento

------
#### [ Example: General question-answering ]

```
{
            "messages": [
                {
                    "role": "system", 
                    "content": "You are a helpful assistant"
                },
                {
                    role": "user", 
                    "content": "What is machine learning?"}
            ],
            "reference_answer": "Machine learning is a subset of artificial intelligence that enables computers to learn and make decisions from data without being explicitly programmed."
            }
```

------
#### [ Example: Math problem ]

```
{
  "id": "sample-001",
  "messages": [
    {
      "role": "system",
      "content": "You are a math tutor"
    },
    {
      "role": "user",
      "content": "Solve: 2x + 5 = 13"
    }
  ],
  "reference_answer": {
    "solution": "x = 4",
    "steps": ["2x = 13 - 5", "2x = 8", "x = 4"]
  }
}
```

------

## API de archivos
<a name="fine-tuning-openai-files-api"></a>

Puedes usar la API de OpenAI-compatible archivos para cargar tus datos de entrenamiento para realizar tareas de ajuste. Los archivos se almacenan de forma segura en Amazon Bedrock y se utilizan para crear trabajos de ajuste. [Para obtener información completa sobre la API, consulte la OpenAI documentación de Files.](https://platform.openai.com/docs/api-reference/files)

### Cargue el archivo de formación
<a name="fine-tuning-openai-upload-file"></a>

Para cargar un archivo de formación, elija la pestaña correspondiente al método que prefiera y, a continuación, siga los pasos:

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

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# Upload training file
with open(TRAINING_FILE_PATH, 'rb') as f:
    file_response = client.files.create(
        file=f,
        purpose='fine-tune'
    )

# Store file ID for next steps
training_file_id = file_response.id
print(f"✅ Training file uploaded successfully: {training_file_id}")
```

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

Haga una solicitud POST a`/v1/files`:

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/files \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -F purpose="fine-tune" \
  -F file="@training_data.jsonl"
```

------

### Recuperar los detalles del archivo
<a name="fine-tuning-openai-retrieve-file"></a>

Para recuperar los detalles de un archivo específico, selecciona la pestaña del método que prefieras y, a continuación, sigue estos pasos:

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

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# Retrieve file details
file_details = client.files.retrieve(training_file_id)

# Print raw response
print(json.dumps(file_details.model_dump(), indent=2))
```

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

Realiza una solicitud GET a`/v1/files/{file_id}`:

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/files/file-abc123 \
  -H "Authorization: Bearer $OPENAI_API_KEY"
```

------

### Listar archivos
<a name="fine-tuning-openai-list-files"></a>

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

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

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# List files
files_response = client.files.list(purpose='fine-tune')

# Print raw response
print(json.dumps(files_response.model_dump(), indent=2))
```

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

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

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/files?purpose=fine-tune \
  -H "Authorization: Bearer $OPENAI_API_KEY"
```

------

### Eliminar archivo
<a name="fine-tuning-openai-delete-file"></a>

Para eliminar un archivo, selecciona la pestaña del método que prefieras y, a continuación, sigue los pasos:

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

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# Delete file
delete_response = client.files.delete(training_file_id)
```

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

Realiza una solicitud de ELIMINACIÓN a`/v1/files/{file_id}`:

```
curl -X DELETE https://bedrock-mantle.us-west-2.api.aws/v1/files/file-abc123 \
  -H "Authorization: Bearer $OPENAI_API_KEY"
```

------

## Características de los datos de entrenamiento eficaces
<a name="rft-data-characteristics-open-weight"></a>

Los datos de entrenamiento de RFT efectivos requieren tres características clave:
+ **Claridad y coherencia**: utilice indicaciones claras e inequívocas con un formato coherente. Evite las etiquetas contradictorias, las instrucciones ambiguas o las respuestas de referencia contradictorias que puedan inducir a error a la formación.
+ **Diversidad**: incluya formatos de entrada variados, casos extremos y niveles de dificultad que reflejen los patrones de uso de la producción en diferentes tipos de usuarios y escenarios.
+ **Funciones de recompensa eficientes**: diseñe funciones que se ejecuten rápidamente (en segundos, no en minutos), paralelicen y AWS Lambda arrojen puntuaciones uniformes para una formación rentable.

## Propiedades adicionales
<a name="rft-additional-properties-open-weight"></a>

El formato de datos del RFT admite campos personalizados que van más allá de los requisitos básicos del esquema (`messages` y `reference_answer`). Esta flexibilidad te permite añadir cualquier dato adicional que tu función de recompensa necesite para una evaluación adecuada.

**nota**  
No necesitas configurar esto en tu receta. El formato de datos admite campos adicionales de forma inherente. Solo tiene que incluirlos en el JSON de los datos de entrenamiento para que se transiferan a la de recompensas en el campo `metadata`.

**Propiedades adicionales comunes**
+ `task_id`: identificador único de seguimiento
+ `difficulty_level`: indicador de la complejidad del problema
+ `domain`: categoría o área del asunto
+ `expected_reasoning_steps`: número de pasos de la solución

Estos campos adicionales se transfieren a la función de recompensas durante la evaluación, lo que permite aplicar una lógica de puntuación sofisticada adaptada a su caso de uso específico.

**Ejemplos con propiedades adicionales**

------
#### [ Chemistry problem ]

```
{
  "id": "chem-001",
  "messages": [
    {
      "role": "system",
      "content": "You are a helpful chemistry assistant"
    },
    {
      "role": "user",
      "content": "Predict hydrogen bond donors and acceptors for this SMILES: CCN(CC)CCC(=O)c1sc(N)nc1C"
    }
  ],
  "reference_answer": {
    "donor_bond_counts": 2,
    "acceptor_bond_counts": 4
  }
}
```

El campo `reference_answer` contiene el resultado esperado o los requisitos de evaluación que la función de recompensa utiliza para puntuar la respuesta del modelo. No se limita a resultados estructurados, sino que puede contener cualquier formato que ayude a la función de recompensas a evaluar la calidad.

------
#### [ Math problem with metadata ]

```
{
  "messages": [
    {
      "role": "system",
      "content": "You are a math tutor"
    },
    {
      "role": "user",
      "content": "Solve: 2x + 5 = 13"
    }
  ],
  "reference_answer": {
    "solution": "x = 4",
    "steps": ["2x = 13 - 5", "2x = 8", "x = 4"]
  },
  "task_id": "algebra_001",
  "difficulty_level": "easy",
  "domain": "algebra",
  "expected_reasoning_steps": 3
}
```

------