Cuarenta normas y las mismas preguntas
Un asistente de documentos contesta preguntas con los archivos de la propia empresa y dice qué archivo usó. Una gestoría de Sevilla tiene 40 documentos de normas internas, y la plantilla pregunta lo mismo cada día.
En este proyecto final planificas una función así y decides cómo comprobarla. Trabajas con una muestra grabada, así que las cifras son fijas y puedes comparar.
Al final de esta lección
Nota
Puedo planificar y comprobar una función que contesta a partir de documentos.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Especificación | un plan breve y escrito de lo que debe hacer una función | |
| Recuperación | encontrar los fragmentos que contienen la respuesta | |
| Fuente | el documento del que salió una respuesta | vacaciones.pdf |
| Negativa | decir que los documentos no lo responden | |
| Cifra de aceptación | la nota que una función debe alcanzar antes de publicarse |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Para profundizar
Nota
Este proyecto planifica y comprueba; no enseña la recuperación. Eso lo hacen las lecciones de IA de la página Recursos. Generación aumentada por recuperación. Evaluación y pruebas de funciones con modelos. Sistemas de recuperación.
La especificación dice qué es hacerlo bien
Antes de escribir código, redacta una especificación de media página. Di quién usa la función y qué documentos puede leer. Di qué debe mostrar cada respuesta, como su fuente.
Di también lo que nunca debe hacer. En un asistente de documentos, lo más grave es inventar. Cuando ningún documento responde, da una negativa.
Ejemplo resuelto: la especificación en una página
| Parte de la especificación | Lo que escribimos |
|---|---|
| Quién la usa | La plantilla de la gestoría, con sesión iniciada |
| Qué puede leer | Los 40 documentos de normas, nada más |
| Cada respuesta debe | Nombrar el documento del que sale |
| Nunca debe | Inventar cuando ningún documento responde |
| Cifras de aceptación | 18 de 20 bien, y todas las preguntas sin respuesta rechazadas |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un conjunto de evaluación son preguntas fijas
El conjunto de evaluación convierte la especificación en casos. Cada caso es una pregunta y el documento que debería responderla. Algunos casos no tienen documento a propósito, para probar la negativa.
Mantén el conjunto fijo para poder comparar dos ejecuciones. El programa revisa una muestra grabada de cinco casos.
Pruébalo: revisa una muestra grabada
# Una muestra grabada: lo que contestó el asistente en las pruebas.
# "source" es el documento del que debería salir la respuesta.
# Si source está vacío, ningún documento lo responde: hay que negarse.
cases = [
{"question": "¿Cuántos días de vacaciones tengo?", "source": "vacaciones.pdf", "got": "vacaciones.pdf"},
{"question": "¿Cómo paso un taxi como gasto?", "source": "gastos.pdf", "got": "gastos.pdf"},
{"question": "¿Quién arregla mi portátil?", "source": "soporte-it.pdf", "got": "vacaciones.pdf"},
{"question": "¿Cuánto cobra la directora general?", "source": "", "got": ""},
{"question": "¿Puedo traer a mi perro?", "source": "", "got": "oficina.pdf"},
]
right = 0
for case in cases:
if case["got"] == case["source"]:
right = right + 1
else:
print("Revisar:", case["question"])
print("Bien:", right, "de", len(cases))
# Cambia la respuesta del portátil a "soporte-it.pdf" y vuelve a ejecutar.
Las cifras de aceptación deciden la publicación
La cifra de aceptación se escribe en la especificación antes de empezar a probar. Aquí son dos cifras: al menos 18 de 20 bien, y ninguna respuesta inventada.
Hacen falta dos porque una puede tapar la otra. Una función puede sacar 19 de 20 e inventarse una respuesta sobre la nómina. Ese invento bloquea la publicación.
Un error frecuente
Advertencia
Mucha gente cree que unas cuantas preguntas probadas a mano demuestran que la función va bien. Un puñado de intentos esconde los fallos raros. Usa un conjunto fijo de al menos 20 casos, con preguntas sin respuesta, y ejecútalo tras cada cambio.