Cargando

Evaluación basada en código

Lección 1515 min

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:

python
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 0

Cada 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:

json
{
    "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 explanation

Tambié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:

python
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:

python
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) / 2

Esto 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.