Al evaluar modelos de IA que generan código, necesitas más que simplemente verificar si la respuesta tiene sentido. También necesitas verificar que el código generado realmente tenga una sintaxis válida y siga el formato correcto. Aquí es donde entra en juego la evaluación basada en código.
Cómo funciona la evaluación de código
La evaluación de código valida dos aspectos clave de las respuestas generadas por IA:

- Formato - La respuesta debe devolver únicamente el tipo de código solicitado (Python, JSON o Regex) sin explicaciones
- Sintaxis válida - El código generado debe analizarse correctamente como el lenguaje previsto
- Seguimiento de la tarea - La respuesta debe abordar directamente lo que se pidió y ser precisa
Los primeros dos criterios son manejados por el evaluador de código, mientras que el seguimiento de la tarea es evaluado por el evaluador del modelo. Juntos, proporcionan una evaluación integral.
Funciones de validación de sintaxis
Para verificar si el código generado tiene una sintaxis válida, puedes crear tres funciones auxiliares que intentan analizar la salida:

def validate_json(text):
try:
json.loads(text.strip())
return 10
except json.JSONDecodeError:
return 0
def validate_python(text):
try:
ast.parse(text.strip())
return 10
except SyntaxError:
return 0
def validate_regex(text):
try:
re.compile(text.strip())
return 10
except re.error:
return 0Cada función intenta analizar el texto según su formato respectivo. Si el análisis tiene éxito, devuelve una puntuación perfecta de 10. Si falla con un error, la sintaxis es inválida y devuelve 0.
Requisitos de formato del conjunto de datos
Para que el evaluador de código sepa qué validador usar, tus casos de prueba necesitan especificar el formato de salida esperado:
{
"task": "Create a Python function to validate an AWS IAM username",
"format": "python"
}Puedes actualizar tu indicación de generación de conjuntos de datos para incluir automáticamente este campo de formato agregándolo a la estructura de salida de ejemplo.
Mejorando la claridad del prompt
Para obtener mejores resultados de tu modelo de IA, haz que las instrucciones de tu prompt sean más específicas sobre el formato de salida esperado:
* Respond only with Python, JSON, or a plain Regex
* Do not add any comments or commentary or explanationTambién puedes usar un mensaje de asistente prellenado con bloques de código para animar al modelo a devolver solo el código sin procesar:
add_assistant_message(messages, "```code")Esto le indica a Claude que comience a generar contenido de código sin tener que especificar de antemano si es Python, JSON o Regex.
Combinando puntuaciones
El paso final es fusionar la puntuación del evaluador del modelo con la puntuación del evaluador de código. Un enfoque simple es promediarlas:
model_grade = grade_by_model(test_case, output)
model_score = model_grade["score"]
syntax_score = grade_syntax(output, test_case)
score = (model_score + syntax_score) / 2Esto otorga el mismo peso tanto a la calidad del contenido como a la corrección técnica. Podrías ajustar estos pesos según lo que sea más importante para tu caso de uso específico.
Probando tu implementación
Una vez que hayas implementado la evaluación de código, ejecuta tu evaluación para obtener una puntuación de referencia. La puntuación en sí no es inherentemente buena o mala; lo que importa es si puedes mejorarla refinando tus prompts. Esto te da una forma cuantitativa de medir el progreso en la ingeniería de prompts en lugar de depender de una evaluación subjetiva.