Un buscador para unas normas de una página
La generación aumentada con recuperación es una herramienta con coste, y a veces es la equivocada. Añade división en trozos, vectores y una búsqueda que puede perder la respuesta.
Un club de ciclismo tiene una página de normas. Una estudiante construye un sistema de recuperación entero para ella. La página cabía en el prompt, y ahora lo que puede fallar es la búsqueda.
Al final de esta lección
Nota
Puedo decir cuándo la recuperación es la herramienta equivocada.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Ventana de contexto | lo máximo que un modelo lee de una vez | |
| Token | un trocito de texto que cuenta un modelo | unos 3/4 de palabra |
| Presupuesto | lo máximo de tokens que decides gastar | |
| Datos en directo | hechos que cambian cada pocos minutos | |
| Recuperación | encontrar los trozos que responden a una pregunta |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
La recuperación es un trueque, no una costumbre
La recuperación deja a un modelo usar más texto del que cabe en un prompt. Esa es su ventaja.
Cuesta trabajo y añade riesgo. Hay que dividir, construir vectores y ajustar una búsqueda. La búsqueda puede devolver el trozo equivocado, o ninguno, y entonces la respuesta se construye con el texto equivocado. Si puedes evitarla, evítala.
Un documento pequeño cabe entero en el prompt
Un modelo lee una cantidad limitada de texto a la vez: su ventana de contexto. El texto se cuenta en tokens. En inglés, un token es aproximadamente tres cuartos de palabra; en español, algo menos. Es una regla práctica, no una cuenta exacta.
Elige un presupuesto de tokens para el contexto. Si el documento entero está por debajo, ponlo todo. No hay nada que buscar, así que nada que perder.
Ejemplo resuelto: seis casos y sus métodos
| Caso | Método | Por qué |
|---|---|---|
| Unas normas de una página | Prompt entero | Caben, así que no hay nada que buscar |
| Un manual de 40.000 palabras | Recuperación | Es demasiado grande: busca los trozos que importan |
| El total de las multas de 17 libros | Calcular en código | Un modelo puede fallar en aritmética |
| El retraso del próximo autobús | Consulta en directo | Cambia cada minuto, así que un almacén se queda viejo |
| Un reglamento de 3 páginas que casi nadie consulta | Prompt entero | Cabe y el coste extra es pequeño |
| La intranet de una universidad, miles de páginas | Recuperación | Ningún prompt puede contenerla |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Mide un documento frente a un presupuesto
El siguiente script guarda las normas del club de ciclismo y cuenta las palabras. Pasa de palabras a tokens con la regla práctica y compara con un presupuesto de 3000.
Hace lo mismo con un manual de 40.000 palabras, usando solo el número, y luego construye el prompt entero para las normas. No llama a ningún modelo.
Escribe el script del presupuesto, parte 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const rules = \"Las salidas parten a las 9:00 del viejo molino. Todo ciclista lleva casco. Un grupo tiene como máximo 12 ciclistas y un responsable. El responsable marca el ritmo y espera en cada cruce. Hacen falta luces en toda salida que acabe después de la puesta de sol. La cuota es de 20 euros al año. Un invitado puede venir a dos salidas antes de pagar. Se cancela la salida si hay hielo o lluvia fuerte, y el responsable avisa a todos antes de las 7:00. Nadie se queda atrás. Cuenta cualquier caída al responsable el mismo día.\";' '// Regla práctica: un token es aproximadamente tres cuartos de palabra. Es una regla burda.' 'function tokensFor(words) { return Math.round(words * 4 / 3); }' 'const BUDGET = 3000;' > whole.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribe el script del presupuesto, parte 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const documents = [' ' { name: \"Normas del club\", words: rules.split(\" \").length },' ' { name: \"Manual de la biblioteca\", words: 40000 },' '];' 'documents.forEach(function (one) {' ' const need = tokensFor(one.words);' ' const verdict = need <= BUDGET ? \"cabe entero\" : \"necesita recuperación\";' ' console.log(one.name + \": \" + one.words + \" palabras, unos \" + need + \" tokens, \" + verdict);' '});' 'const prompt = \"Responde solo con las normas del club.\n\n\" + rules + \"\n\nPregunta: ¿Cuántos ciclistas puede haber como máximo en un grupo?\";' 'console.log(\"El prompt entero tiene\", prompt.length, \"caracteres. No hace falta buscar.\");' >> whole.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ejecútalo y lee los veredictos
docker exec -w /home/node/project agent node whole.jsSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Lo que muestra
| Línea | Qué indica |
|---|---|
| Normas del club: 97 palabras, unos 129 tokens, cabe entero | Muy por debajo del presupuesto |
| Manual de la biblioteca: 40000 palabras, unos 53333 tokens, necesita recuperación | Muy por encima |
| El prompt entero tiene 626 caracteres | Lo bastante pequeño para enviarlo tal cual |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un error frecuente
Advertencia
Mucha gente cree que la recuperación es siempre mejor que meter el documento en el prompt. Si el documento cabe, la recuperación añade una búsqueda que puede perder la respuesta. Úsala cuando haga falta, no porque suene avanzada.