Ajuste fino de refuerzo

El ajuste de refuerzo (RFT) es una técnica avanzada para mejorar los modelos de razonamiento mediante el entrenamiento a través de un proceso basado en recompensas, en lugar de basarse solo en datos etiquetados. RFT ayuda a los modelos a desarrollar mejores aptitudes de razonamiento y resolución de problemas, especialmente en casos en los que se desean ejemplos etiquetados como comportamientos limitados o complejos.

Nota

El servicio de ajuste preciso pausa automáticamente los trabajos de RFT una vez que alcanzan $5000 del total de costes de entrenamiento (entrenamiento + evaluación). Puede implementar el punto de control más reciente o reanudar el trabajo de entrenamiento. Si decide reanudar el trabajo, la facturación seguirá aplicándose en el trabajo sin límites basados en costes adicionales.

Soporte de modelos

El ajuste fino de refuerzo se admite para los siguientes modelos:

Modelo Versión Compatibilidad con RFT Estado
o4-mini 2025-04-16 Disponibilidad general
gpt-5 2025-08-07 Disponibilidad general*

* La compatibilidad con GPT-5 para el ajuste de la precisión de refuerzo está disponible con carácter general, pero el acceso solo está disponible por invitación. Póngase en contacto con el equipo de cuenta Microsoft si está interesado en la inscripción.

Requisitos

El ajuste de refuerzo (RFT) requiere datos de entrenamiento y validación con formato JSONL y que contengan una matriz messages que usa el formato de finalizaciones de chat.

Sin embargo, RFT tiene más requisitos:

  • Datos
    • Asignar al "mensaje" final de los datos el rol user.
    • Incluya campos y valores adicionales para su uso por parte de un calificador.
    • Proporcione tanto un entrenamiento como un conjunto de datos de validación.
  • Evaluadores
    • Defina un evaluador para puntuar la calidad de su modelo ajustado y orientar el aprendizaje.
    • Proporcione un solo evaluador, aunque puede combinar varios utilizando un evaluador múltiple.

Datos de entrenamiento de ejemplo

En el ejemplo siguiente se muestra cómo presentar avisos al modelo e incluir la verdad básica a la que puede acceder un calificador.

{
  "messages": [
    {
      "role": "developer",
      "content": "Your task is to solve logic puzzles. The user will provide an expression with ?'s as placeholders for arithmetic operations. Replace the ?'s with arithmetic operation signs (+, -, *, /) to obtain a valid equation."
    },
    {
      "role": "user",
      "content": "1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 7 ? 8 ? 9 = 100"
    }
  ],
  "solution": "1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 * 9 = 100"
}

Nota

Este ejemplo se divide entre varias líneas solo con fines de demostración. Debe ser una sola línea en el archivo JSONL.

Clasificadoras

Los calificadores proporcionan la función de recompensa que se usa durante el entrenamiento y tienen acceso a los campos proporcionados por el usuario en el conjunto de datos. Hay varios tipos de motoniveladoras disponibles:

  • comparación de texto: puntuación del contenido de la respuesta en función de su texto
  • model: evaluar respuestas mediante un modelo de lenguaje e indicador
  • código personalizado: puntuar respuestas mediante código personalizado
  • multigrader: puntuación basada en una combinación de puntuaciones de otros calificadores

La mayoría de los calificadores efectúan la sustitución de datos en tiempo de ejecución mediante plantillas. Las propiedades de entrada o referencia pueden incluir la sustitución de variables entre llaves dobles ({{ }}) que contengan una referencia a una variable.

Cada referencia de plantilla debe tener un espacio de nombres con un patrón como {{ namespace.variable }}. Para cualquier dato complejo y anidado, se admite una sintaxis similar a JSON.

Se admiten los siguientes espacios de nombres:

  • sample: la salida del modelo que se va a evaluar aparece bajo el espacio de nombres sample en un formato similar a una respuesta de finalizaciones de chat.
  • item: los campos adicionales opcionales proporcionados en los datos de entrenamiento aparecen en el espacio de nombres item.

Algunos ejemplos de sustitución de plantillas que utilizan los anteriores espacios de nombres:

  • {{ sample.output_text }} : sustituya la salida del modelo como una cadena.
  • {{ sample.output_json }} : si el modelo generó salidas estructuradas, haga referencia a ella como JSON.
  • {{ item.answer }} : sustituya el campo "answer" del conjunto de datos.
  • {{ item.ground_truth.date }} : sustituya el campo "date" de un objeto "ground_truth" definido en el conjunto de datos.

En las secciones siguientes se documentan los calificadores individuales y se proporciona su especificación JSON para definir mediante la API.

Evaluadores de comparación de texto

Utilice evaluadores de comparación de texto cuando el caso de uso requiera que el resultado del modelo sea una etiqueta definitiva o que dicha salida se asemeje a una respuesta de referencia conocida.

String-check-grader

Los calificadores de comprobación de cadenas aplican una operación determinada a la entrada y una referencia para devolver un 0 o un 1, lo que proporciona una función simple de aprobado/rechazo.

{
    "type": "string_check",
    "name": string,
    "operation": "eq" | "ne" | "like" | "ilike",
    "input": string,
    "reference": string,
}

Operaciones:

Operación Devuelve 1 cuando Distingue mayúsculas de minúsculas
eq Los datos de entrada son iguales al valor de referencia
ne La entrada no coincide con la referencia
like La entrada contiene referencia
ilike La entrada contiene referencia No

Similitud de texto

Los calificadores de similitud de texto calculan una puntuación basada en un algoritmo de selección para cuantificar la similitud entre el texto de entrada y un texto de referencia determinado.

Especificación:

{
    "type": "text_similarity",
    "name": string,
    "input": string,
    "reference": string,
    "pass_threshold": number,
    "evaluation_metric": "fuzzy_match" | "bleu" | "gleu" | "meteor" | "rouge_1" | "rouge_2" | "rouge_3" | "rouge_4" | "rouge_5" | "rouge_l" 
}

Métricas de evaluación:

  • fuzzy_match : coincidencia de cadena aproximada mediante el algoritmo RapidFuzz .
  • bleu: calcula la puntuación de BLEU (Bilingual Evaluation Understudy) entre cadenas
  • gleu: calcula la puntuación de Google BLEU entre cadenas
  • meteor : calcula la puntuación de METEOR entre cadenas.
  • rouge-* : tal y como se define en la biblioteca de Python de Rouge.

Evaluadores de modelos

Los evaluadores de modelos proporcionan una instrucción a un modelo evaluador que le indica cómo evaluar y puntuar una respuesta dada. Esta flexibilidad permite obtener calificaciones complejas de ingeniería rápidas que admiten la explicación del motivo de una puntuación determinada.

Utilice los siguientes modelos como evaluadores de modelos:

Modelo Se puede usar como calificador
gpt-4o-2024-08-06
o3-mini-2025-01-31

Nota

No se necesitan implementaciones de modelos en Foundry para los evaluadores de modelos.

Modelo de puntuación

Los evaluadores del modelo de puntuación generan una puntuación numérica según su entrada e instrucción. Cualquier control sampling_params proporcionado controla el comportamiento del modelo de puntuación y permite personalizar aspectos como la temperatura y el esfuerzo de razonamiento.

{
    "type": "score_model",
    "name": string,
    "input": Message[],
    "model": string,
    "pass_threshold": number,
    "range": number[],
    "sampling_params": object
}

Calificadores de código

Los clasificadores de modelos son flexibles pero no determinísticos. Cuando necesite puntuación determinista, use los calificadores de código en su lugar.

Evaluador de Python

El Python grader ejecuta código arbitrario Python para generar una puntuación.

El código proporcionado debe definir una grade función que tome dos argumentos posicionales: sample y item. La función debe devolver una puntuación numérica.

{
    "type": "python",
    "name": string,
    "source": "def grade(sample, item):\n    return 1.0"
}

El código Python se ejecuta en un entorno restringido con las siguientes limitaciones:

Recurso Límite
Tamaño del código 256 KB
Red Sin acceso
Memoria 2 GB
Espacio en disco 1 GB
CPU 1 núcleo
Tiempo de ejecución 2 minutos

Sugerencia

El código debe controlar los posibles errores y devolver siempre un valor numérico. Si se producen demasiadas excepciones durante la ejecución del evaluador, se produce un error en el trabajo de entrenamiento.

Dentro del entorno de ejecución de Python, el código proporcionado puede usar los siguientes módulos y versiones:

  • numpy==2.2.4
  • scipy==1.15.2
  • sympy==1.13.3
  • pandas==2.2.3
  • rapidfuzz==3.10.1
  • scikit-learn==1.6.1
  • rouge-score==0.1.2
  • deepdiff==8.4.2
  • jsonschema==4.23.0
  • pydantic==2.10.6
  • pyyaml==6.0.2
  • nltk==3.9.1
  • sqlparse==0.5.3
  • rdkit==2024.9.6
  • scikit-bio==0.6.3
  • ast-grep-py==0.36.2

Calificador de punto de conexión (versión preliminar)

Los calificadores de puntos de conexión llaman a un punto de conexión remoto a través de una API HTTP para puntuar la respuesta del modelo. Son perfectos para casos de uso que requieren acceso a la verdad básica para una puntuación precisa o la capacidad de implementar el calificador en un idioma distinto de Python.

Mientras la API para los evaluadores de puntos de conexión esté en vista previa privada, no estará publicada.

Multigrader

Un multigradador combina el resultado de varios evaluadores para generar una única puntuación basada en una expresión aritmética proporcionada en calculate_output.

{  
  "type": "multi",
  "name": string,
  "graders": dict[str, Grader],
  "calculate_output": string
}

Cuando un evaluador múltiple calcula la puntuación, la expresión calculate_output hace referencia a las puntuaciones individuales del objeto graders proporcionado por la clave en el objeto graders.

Operadores:

Operador Descripción
+ Adición
- Resta
* Multiplicación
/ División
^ Energía

Funciones:

Función Descripción
min Calcular el mínimo de un valor
max Calcular el máximo de un valor
abs Calcular el valor absoluto
floor Redondear el valor hacia abajo
ceil Redondear el valor hacia arriba
exp Calcula e elevado a la potencia del valor proporcionado
sqrt Tomar la raíz cuadrada del valor
log Calcular el logaritmo del valor proporcionado

Por ejemplo, un multigradador definido con dos calificadores, "puntuación de similitud" y "comprobador de etiquetas", que deben tener un promedio de sus resultados podría parecerse a lo siguiente:

{
  "type": "multi",
  "name": "Example multigrader",
  "graders": {
    "similarity_score": {
      "type": "text_similarity",
      "name": "similarity grader",
      "input": "{{ sample.output_text }}",
      "reference": "{{ item.summary }}",
      "evaluation_metric": "bleu"
    },
    "label_checker": {
      "type": "string_check",
      "name": "label grader",
      "input": "{{ sample.output_text }}",
      "reference": "{{ item.label }}",
      "operation": "eq"
    }
  },
  "calculate_output": "(similarity_score + label_checker) / 2"
}

Formato de respuesta (opcional)

Durante el entrenamiento, puede configurar el modelo para generar salidas estructuradas. Esta estructura puede alinearse con el caso de uso previsto del modelo o facilitar la calificación de la salida.

La configuración del formato de respuesta sigue la misma especificación que las "Chat Completions", ya sea soportando texto (el valor predeterminado) o JSON. Cuando el modelo debe generar JSON, debe proporcionar un esquema JSON.

Para continuar con el ejemplo anterior, si el modelo debe generar la respuesta en un formato estructurado como:

{ "solution": "1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 * 9 = 100" }

El siguiente esquema JSON describe el formato de respuesta:

{
  "type": "json_schema",
  "name": "puzzles_assistant",
  "schema": {
    "type" : "object",
    "properties": {
      "solution": {
        "type": "string",
        "title": "solution"
      }
    },
    "required": [
      "solution",
    ],
    "additionalProperties": false
  },
  "strict": true
}

Selección de hiperparámetros

El ajuste fino de refuerzo admite los mismos hiperparámetros que el ajuste fino supervisado. Además, las siguientes características de control de hiperparámetros específicas de RFT:

Nombre de hiperparámetro Valor Valor predeterminado Descripción
eval_interval entero auto Número de pasos de entrenamiento entre ejecuciones de evaluación.
eval_samples entero auto Número de muestras que se van a usar durante la evaluación.
compute_multiplier número auto Multiplicador de la cantidad de uso de proceso para explorar el espacio durante el entrenamiento.
reasoning_effort low, , medium, high medium El esfuerzo de razonamiento utilizado por el modelo durante el entrenamiento.

Nota

El servicio de entrenamiento reemplaza automáticamente los hiperparámetros establecidos en auto por valores predeterminados basados en heurística en los datos de entrenamiento proporcionados.

Interpretación de los resultados del entrenamiento

El ajuste fino de refuerzo proporciona tanto evaluaciones automáticas del modelo durante el entrenamiento como métricas de entrenamiento en tiempo real.

Métricas de entrenamiento

Al supervisar un trabajo en ejecución o inspeccionar un trabajo finalizado, las métricas reward y reasoning ofrecen un indicador del éxito del entrenamiento.

Recompensa

Las métricas de recompensa realizan un seguimiento de las puntuaciones resultantes del evaluador que actúa como la función de recompensa.

  • train_reward_mean: la recompensa promedio en el conjunto de datos de entrenamiento en un paso determinado. Dado que cada lote puede ser diferente en los pasos, la tendencia de esta métrica es más importante que comparar valores entre pasos.
  • valid_reward_mean: la recompensa promedio en las muestras tomadas del conjunto de validación en un paso determinado.

Por lo general, las métricas de recompensa deben aumentar durante el trabajo de entrenamiento. Si divergen significativamente, es una señal de que el modelo podría estar haciendo trampa para obtener recompensas y el evaluador requiere más ingeniería.

Razonamiento de tokens

Cada trabajo de entrenamiento realiza un seguimiento del número de tokens de razonamiento generados por el modelo. Las métricas de los tokens de razonamiento capturan cómo cambia el comportamiento del modelo a lo largo de todo el proceso de entrenamiento.

  • train_reasoning_tokens_mean: el número promedio de tokens de razonamiento generados en el lote de datos de entrenamiento en un paso determinado.
  • valid_reasoning_tokens_mean: el número promedio de tokens de razonamiento generados en los datos de validación en un paso determinado.

El modelo podría aprender a usar menos tokens de razonamiento para lograr la misma recompensa, o podría aprender a usar más tokens de razonamiento para lograr una recompensa mayor. Estas métricas suelen aumentar y caer durante el trabajo de entrenamiento.

Evaluaciones automáticas

El sistema crea automáticamente una evaluación para cada trabajo de RFT. A intervalos regulares definidos por el hiperparámetro eval_interval, el sistema de entrenamiento realiza una evaluación utilizando los datos de validación. Puede ver las puntuaciones de cada ejecución mediante la evaluación enlazada, que puede encontrar en la interfaz de usuario de Foundry.

Examinar estas evaluaciones proporciona un elemento de juicio adicional para decidir si aplicar la parada temprana. Si el modelo muestra el aprendizaje durante el entrenamiento, los resultados de cada ejecución de evaluación deben mejorar durante la duración del trabajo.

Proyectos y conjuntos de datos de ejemplo

Las demostraciones y conjuntos de datos de ejemplo siguientes ofrecen puntos de partida para los nuevos usuarios del ajuste preciso de refuerzo:

  • Demostración de cuenta atrás: demostración de un extremo a otro del uso de RFT para mejorar el razonamiento matemático.
  • MedMCQ : conjunto de datos de ejemplo y calificaciones para responder a preguntas de elección múltiple del dominio médico.
  • ClauseMatching: conjuntos de datos y evaluadores de ejemplo que muestran tanto el resumen como la interpretación de contenido en el dominio legal.