Cómo montar un bot RAG en una T4 para libros de texto de educación cívica: Qwen en lugar de búsqueda web
El autor montó un bot RAG para libros de texto de educación cívica de 9.º y 10.º grado que busca respuestas no en internet, sino en los textos cargados. En clase no importa tanto que la respuesta sea correcta en general, sino que coincida con la redacción de un libro de texto concreto, y por eso el bot limita el contexto en lugar de darle acceso a la web. El pipeline analiza los PDF con pymupdf4llm, divide el texto con metadatos (grado, párrafo, página) y lo codifica con embeddings de intfloat/multilingual-e5-large en FAISS. El usuario pregunta sobre un párrafo, el bot busca en los metadatos, pasa los fragmentos encontrados a Qwen2.5-3B-Instruct junto con un prompt de sistema, y obtiene una respuesta con referencia a la página. • **Stack**: Qwen2.5-3B-Instruct en una T4 (cuantización de 4 bits NF4 vía bitsandbytes), FAISS en memoria, intfloat/multilingual-e5-large para embeddings, Google Colab. • **Limitaciones del modelo**: filtrado por metadatos, contexto estrecho en el prompt, temperatura de generación baja (0.1). • **Planes a futuro**: validar las respuestas frente al contexto, almacenar el estado de la sesión, corregir los números de página.
Procesado por IA desde Хабр: Машинное обучение; editado por Hamidun News
Un modelo pequeño con contexto le gana a uno grande con internet
Con la introducción de libros de texto estatales unificados en Rusia, un entusiasta decidió montar un asistente para ellos. El bot RAG busca respuestas a preguntas de educación cívica no en internet ni en los pesos generales del modelo, sino en dos libros de texto cargados, de 9.º y 10.º grado.
¿Por qué es necesario esto? En clase, se califica una respuesta que coincida con un libro de texto concreto, no una respuesta filosóficamente correcta basada en conocimiento general. Un modelo grande típico con acceso a internet da una explicación correcta, pero que no coincide con el libro de texto.
Se necesita otra arquitectura: un modelo pequeño que recibe un contexto corto y acotado y que no se desvía hacia razonamientos generales. Una temperatura de generación baja y un prompt de sistema ayudan a mantenerse cerca del texto. Un contexto limitado no le quita al modelo su conocimiento base, pero sí lo pone en modo de búsqueda dentro de un material concreto, en lugar de razonar sobre un tema en general.
El pipeline: del PDF a la respuesta
El stack tecnológico es sencillo. pymupdf4llm analiza el PDF página por página y lo convierte a Markdown conservando tablas y listas. MarkdownHeaderTextSplitter trabaja con tres niveles: Capítulo (#) → Párrafo (##) → Subapartado (###). Cada fragmento conserva sus metadatos: grado, número de párrafo y número de página.
Un segundo paso —RecursiveCharacterTextSplitter con chunk_size=1000 y chunk_overlap=150— corta las secciones largas en fragmentos manejables. Los embeddings de intfloat/multilingual-e5-large codifican el texto, y la base FAISS (faiss-cpu) funciona en la memoria de Colab.
Cuando el usuario escribe «dame las respuestas a las preguntas del párrafo 13 de 10.º grado», una expresión regular extrae el grado y el número de párrafo. Una función llamada smart_filter comprueba si los metadatos coinciden con la consulta. FAISS devuelve hasta cuatro fragmentos relevantes. Si el filtro estricto no encuentra nada, el código repite la búsqueda filtrando solo por grado; en ese caso, el contexto puede venir de otro párrafo.
Los fragmentos encontrados se reúnen en un contexto con metadatos como [10.º grado | § 13 | Pág. 45] y se envían a Qwen2.5-3B-Instruct junto con un prompt de sistema: responde estrictamente a partir del texto proporcionado y al final indica el número de página. El modelo funciona a una temperatura de 0.1. Después de cada respuesta se llama a torch.cuda.empty_cache(), liberando la memoria cacheada.
Infraestructura, problemas y planes
Modelo: Qwen2.5-3B-Instruct (3.000 millones de parámetros). Cuantización: 4 bits NF4 vía bitsandbytes, lo que permite que el modelo quepa en la memoria de video de la T4. Embeddings: intfloat/multilingual-e5-large. Base vectorial: FAISS (faiss-cpu) en memoria RAM. Infraestructura: Google Colab con una GPU T4 gratuita. Todo funciona en una sola máquina.
El formato de las respuestas aparece como Markdown sin procesar (se ven los marcadores **). Los metadatos de párrafo se pierden en páginas sin encabezado: si un párrafo empieza en la página 139 y continúa en la 140, los fragmentos de la segunda página quedan sin metadatos y no aparecen en las búsquedas de ese párrafo concreto. No hay verificación de hechos: el bot no comprueba si una frase de su respuesta realmente corresponde al contexto recuperado. El grado del usuario no se recuerda entre mensajes. El número de página del archivo puede diferir del impreso en la edición en papel.
El autor planea escalar el proyecto a historia y biología. Para los próximos sprints: ajustar el formato de las respuestas, implementar el almacenamiento del estado de sesión, añadir validación de respuestas antes de enviarlas y resolver el problema de los metadatos perdidos en párrafos que ocupan varias páginas.
- 27 oct 2026El proyecto open source Hob lleva el modo Claude Cowork a tu portátil, sin nube
- 27 oct 2026DingTalk abre el código de DWS y lleva a HarmonyOS PC más de 1000 comandos para agentes de IA
- 27 oct 2026Qwen3.8 intentó subir un archivo a la nube de Alibaba en Pekín desde el sandbox de Cohere
- 26 oct 2026Claude Opus 5.5 gana Code2Video-AA con 1536 Elo y supera en 109 puntos a GPT-6 Astra
Preguntas frecuentes sobre la noticia
¿Qué se sabe sobre Un modelo pequeño con contexto le gana a uno grande con internet?
Con la introducción de libros de texto estatales unificados en Rusia, un entusiasta decidió montar un asistente para ellos. El bot RAG busca respuestas a preguntas de educación cívica no en internet ni en los pesos generales del modelo, sino en dos libros de texto cargados, de 9.º y 10.º grado. ¿Por qué es necesario esto? En clase, se califica una respuesta que coincida con un libro de texto concreto, no una respuesta filosóficamente correcta basada en conocimiento general. Un modelo grande típico con acceso a internet da una explicación correcta, pero que no coincide con e
¿Qué se sabe sobre El pipeline: del PDF a la respuesta?
El stack tecnológico es sencillo. pymupdf4llm analiza el PDF página por página y lo convierte a Markdown conservando tablas y listas. MarkdownHeaderTextSplitter trabaja con tres niveles: Capítulo (#) → Párrafo (##) → Subapartado (###). Cada fragmento conserva sus metadatos: grado, número de párrafo y número de página. Un segundo paso —RecursiveCharacterTextSplitter con chunk_size=1000 y chunk_overlap=150— corta las secciones largas en fragmentos manejables. Los embeddings de intfloat/multilingual-e5-large codifican el texto, y la base FAISS (faiss-cpu) funciona en la memori
¿Qué se sabe sobre Infraestructura, problemas y planes?
Modelo: Qwen2.5-3B-Instruct (3.000 millones de parámetros). Cuantización: 4 bits NF4 vía bitsandbytes, lo que permite que el modelo quepa en la memoria de video de la T4. Embeddings: intfloat/multilingual-e5-large. Base vectorial: FAISS (faiss-cpu) en memoria RAM. Infraestructura: Google Colab con una GPU T4 gratuita. Todo funciona en una sola máquina. El formato de las respuestas aparece como Markdown sin procesar (se ven los marcadores ). Los metadatos de párrafo se pierden en páginas sin encabezado: si un párrafo empieza en la página 139 y continúa en la 140, los fragmen
Build & Ship Production AI Agents Without Boilerplate Code
Start your free 72-hour trial at Hamidun Academy (academy.hamidun.com) — interactive lessons on Claude Code & Cursor, live Tech Radar, and production agent templates.
Lo esencial de la IA — una vez por semana
Siete historias que de verdad importaron, elegidas a mano. Sin ruido ni notas de prensa.
¡Listo! Revisa tu correo para la confirmación.