Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 |
Sí | Disponibilidad general |
gpt-5 |
2025-08-07 |
Sí | 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.
- Asignar al "mensaje" final de los datos el rol
-
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 nombressampleen 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 nombresitem.
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 | Sí |
ne |
La entrada no coincide con la referencia | Sí |
like |
La entrada contiene referencia | Sí |
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 |
Sí |
o3-mini-2025-01-31 |
Sí |
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.