Pregúntale al contrato de alquiler
Doce páginas de contrato a la izquierda, un asistente a la derecha. «¿Puedo irme a los cinco meses?» y te contesta con la cláusula de permanencia, el preaviso y la fila exacta de la tabla de indemnizaciones, con su página. El PDF se descarga de esta web y se convierte en texto dentro de tu navegador: no sube a ningún servidor.
El contrato es de partes inventadas (Larrea 14, 3.º B), escrito a propósito para este caso: así cada respuesta se puede comprobar contra el texto. Lo que lo hace difícil para un modelo pequeño no es el tamaño, es que las cifras se parecen: 925 € de fianza, 1.850 € de garantía, 3.700 € a la firma, 2.775 € depositados; el mes 6 y el mes 8 en filas contiguas. Y esto es un ejemplo curado: no hay una herramienta general que haga que un modelo de 2 GB no confunda esas cifras. Lo consigue el curado del documento, del buscador, del prompt y de la comprobación, que puedes medir aquí cambiando al montaje «genérico».
Qué es exactamente el montaje «genérico» (y por qué está aquí)
No existe una herramienta general que haga que un modelo de 2 GB lea bien un contrato. Lo que ves en esta página funciona por el curado: del documento, del buscador, del prompt y de la comprobación. Para no pedirte que te lo creas, el montaje genérico está aquí mismo, con el mismo modelo y el mismo presupuesto de contexto, y se puede pasar la batería en los dos. Es el montaje mínimo que hace cualquiera antes de curar nada; no es un producto concreto ni una caricatura:
- Trocea el texto en bloques fijos de 900 caracteres, sin respetar cláusulas, párrafos ni filas de tabla: la fila «Mes 8» de la tabla de indemnizaciones puede quedar en un trozo y su cabecera en otro.
- Elige los trozos por cuántas palabras de la pregunta contienen. Sin sinónimos («gato» no encuentra «animales», «irme» no encuentra «desistimiento»), sin refuerzo para cifras, sin partir la pregunta en dos apartados, sin arrastrar el trozo vecino.
- Envía los trozos con su número de página y el prompt «Eres un asistente útil. Responde a la pregunta del usuario usando el documento que se te da». Nada de citar la cláusula, nada de «cuidado con las cifras parecidas».
- Sin segunda pasada ni comprobador. Lo que dice el modelo, se queda.
Qué se curó en este caso, y por qué eso es el trabajo
- El documento. pdf.js extrae el texto con sus coordenadas; se rehacen las líneas, se quitan los pies repetidos y se detectan las tablas por alineación de columnas: el calendario económico, la tabla de indemnizaciones y las lecturas de contadores llegan al modelo como tablas, no como palabras sueltas. Cada fragmento conserva su cláusula y su página.
- El buscador. Léxico (BM25) afinado para un contrato: las tablas se indexan por fila con su cabecera (la fila «Mes 8» entra sola, con sus columnas), una pregunta con dos partes se reparte entre la cláusula y el anexo, y una tabla de sinónimos propia de este caso cruza lo que dice un inquilino con lo que dice el contrato: «gato» con «animales», «irme» con «desistimiento», «casero» con «arrendadora». Ese vocabulario es distinto en cada cliente, y por eso vive en el caso, no en el buscador.
- El prompt. Escrito para este contrato: cada dato con su cláusula y su página, nada de derecho general («por ley suele ser…»), y una regla que solo tiene sentido aquí: «fianza, garantía adicional, total a la firma y garantías depositadas son cantidades distintas; di cuál es cuál y no las sumes». Y cuando el contrato no da un dato (el importe del seguro), la respuesta correcta es decirlo, no inventar una prima.
- La comprobación. La segunda pasada solo entra cuando el borrador da señal de problema, y un comprobador determinista la veta si añade texto, poda una condición verdadera («solo con autorización escrita»), cita una página que no se le dio o hace desaparecer una cifra que sí estaba. En un contrato, quitar una condición es peor que dejar una frase de más.
- La prueba. Diecisiete preguntas comprobadas por datos, con la cifra vecina como dato prohibido: responder «462,50 €» a la pregunta del mes 8 es un ✗ aunque suene bien. Las columnas «(ref)» se miden con llama.cpp sobre los GGUF con este mismo conversor, buscador, prompt y comprobador, y la columna «genérico» es el mismo modelo sin nada de lo anterior. Si este caso aún no tiene columnas medidas, la pestaña «Batería» lo dice.
- Lo que no hace. Un contrato escaneado sin capa de texto no entra (aquí no hay OCR; en tu máquina, sí); una pregunta sin ninguna palabra en común con el contrato ni con la tabla de sinónimos no encuentra fragmento; y esto no es asesoramiento jurídico: responde lo que dice este contrato, no lo que dice la ley.
- Privacidad. Los modelos del navegador comparten descarga con /ia-local (misma caché del mismo origen), el PDF se convierte en tu máquina y la página no llama a ningún puerto ni servidor. Un contrato de verdad no debería salir de tu ordenador, y aquí no sale.
Este contrato lo curé yo para poder enseñarlo. Los tuyos serán cientos de contratos con tus cláusulas, tus anexos y las preguntas que de verdad te hacen. El trabajo es el mismo: trocear tus documentos como hay que trocearlos, un buscador que entienda tu vocabulario y tus cifras, un prompt escrito para tu caso, una batería de preguntas con respuesta comprobable y el modelo elegido por medida, no por catálogo. Todo en tu máquina, sin que un contrato salga de ella.