miércoles, 29 de abril de 2026

Experimento sobre Consulta RAG

 Mi experimento sobre Consulta RAG: Sistema Hídrico de Cumaná

La búsqueda en un mar de ideas...

En las últimos días he estado construyendo un sistema de consulta basado en mis investigaciones de geohistoria de Cumaná —específicamente sobre el colapso del Túnel de Trasvase Guamacán y la crisis hídrica que afecta a Cumaná y otras ciudades del oriente venezolano.

🔗 https://url_url_url/consulta-rag   (solicitar al autor el enlace de prueba)

El sistema utiliza como modelo de inferencia Llama 3.3 70B (modelo de lenguaje de gran escala, ~70 mil millones de parámetros, optimizado para comprensión profunda, razonamiento contextual y generación de texto complejo) y como modelo de embeddings Qwen3-Embedding-0.6B (modelo especializado en representación semántica de texto, optimizado para búsqueda por similitud, clustering y recuperación de información), con almacenamiento en una base de datos vectorial.

Los modelos LLM (Large Language Models) son, en esencia, compresores estadísticos del lenguaje humano. Durante el entrenamiento, ajustan miles de millones (o billones, en escala anglosajona) de parámetros para minimizar la perplejidad () sobre grandes volúmenes de texto.

El resultado es una red neuronal que ha interiorizado patrones sintácticos, semánticos y factuales —lo que, en términos prácticos, podemos llamar conocimiento—. Sin embargo, ese conocimiento queda congelado en los pesos del modelo desde el momento del entrenamiento.

La técnica de RAG (Retrieval-Augmented Generation) aborda este problema de raíz: en lugar de pedirle al modelo que “recuerde”, se le proporcionan fragmentos relevantes extraídos de una base documental. El modelo deja de comportarse como un oráculo y pasa a ser un lector experto capaz de sintetizar evidencia concreta.

  • La búsqueda semántica en el espacio vectorial no busca palabras exactas: busca proximidad de significado.
  • Dos frases que no comparten una sola palabra pueden estar muy próximas en ese espacio si expresan la misma idea.
  • Esto es recuperación de información por similitud conceptual, no por coincidencia léxica. Y es precisamente lo que permite que un sistema responda preguntas sobre documentos utilizando formulaciones que esos mismos documentos nunca emplearon.
  • El vector no es el texto: es la huella semántica del texto en un espacio matemático donde la distancia representa significado. Buscar en ese espacio es buscar ideas, no palabras.

 Perplejidad (perplexity): métrica que cuantifica la incertidumbre del modelo al predecir el siguiente token en una secuencia. Un modelo con perplejidad 10 se comporta, estadísticamente, como si eligiera entre 10 opciones equiprobables en cada paso.


PD: Agradezco sus comentarios luego de probar el sistema, con el fin de mejorar su comportamiento base. Para obtener mejores resultados, es recomendable formular preguntas de manera precisa y con buena ortografía.


~ Agradezco no re-enviar el enlace ~


Anexo: Como hacer una búsqueda correcta en un RAG optimizado:

Precisamente el "punto ciego" de la búsqueda vectorial pura depende de la pregunta. Cuando usas vectores, el sistema depende de que el Embedding de tu pregunta se parezca matemáticamente al del documento. Si hay errores ortográficos o la estructura es pobre, el modelo de embeddings genera un vector "desviado", lo que te aleja de la información correcta en tu base de datos.

Aquí están tres estrategias técnicas que puedes aplicar en una capa de Cloudflare para solucionar esto sin obligar al usuario a escribir perfecto:


1. El "Filtro de Limpieza" (LLM Guard)

Antes de enviar la pregunta a tu base de datos vectorial (Vectorize), pásala por un modelo pequeño y rápido como llama-3.2-3b. Pídele que actúe como un corrector de estilo.

  • Flujo: Pregunta del usuario $\rightarrow$ Worker (LLM Corrector) $\rightarrow$ Embedding $\rightarrow$ Búsqueda Vectorial.

  • Prompt sugerido: "Eres un asistente de entrada. Reescribe la siguiente consulta para corregir errores ortográficos y mejorar la claridad, manteniendo el significado original. Solo entrega el texto corregido."


2. Implementar Búsqueda Híbrida (Hybrid Search)

Esta es la solución estándar en la industria. No confíes solo en el vector.

  • Cómo funciona: Buscas simultáneamente por el vector y por palabras clave (usando texto plano en tu base de datos D1).

  • Por qué ayuda: Si el usuario escribe mal una palabra pero el resto de la oración es clara, el vector lo compensa. Si el usuario escribe una palabra técnica exacta pero con mala gramática, la búsqueda de texto la encuentra.


3. Uso de N-Grams o "Fuzzy Search"

Si no quieres usar un LLM para corregir (por ahorrar neuronas), puedes usar lógica de programación en tu Worker:

  • Fuzzy Matching: Utiliza algoritmos como la Distancia de Levenshtein para comparar palabras. Si el usuario escribe "fisca", el sistema entiende que probablemente quiso decir "física".

  • Normalización: Convierte siempre la entrada a minúsculas y elimina acentos antes de generar el embedding, asegurándote de que tu base de datos vectorial haya sido indexada con esa misma limpieza.


4. El problema del "Ruido" en los Embeddings

Los modelos de embeddings son muy sensibles al orden de las palabras.

  • Oración bien estructurada: "¿Cuál es el coeficiente de dilatación del concreto?" $\rightarrow$ Vector muy preciso.

  • Oración pobre: "concreto... eso de la dilatación cuanto es?" $\rightarrow$ El vector se "ensucia" con las palabras de relleno.

¿Qué puedes hacer en Cloudflare?

Como ya tienes un RAG funcionando, te recomiendo implementar un "Query Expander".

Usa un Worker para transformar la pregunta del usuario en una "búsqueda ideal". Por ejemplo, si el usuario pregunta: "¿cómo va lo del túnel roto?", el Worker lo expande a: "Análisis estructural y colapso de túneles en Sucre". Ese nuevo texto generará un vector mucho más potente para buscar en tu base de datos.


lunes, 27 de abril de 2026

Escaneo de documentos con Google Drive

Hice unas notas manuscritas -rápidas- en una hoja tamaño carta. Sin cuidar nada... solo notas para esbozar ideas, luego utilicé la aplicación de Google Drive para escanear esa hoja... que por allí andaba suelta en el escritorio. 


Hoja original escaneada

La utilidad de Google Drive, permitió usar la cámara del teléfono, convirtió la imagen en PDF, permitió asignarle un nombre, filtrarla etc. y la almacenó en mi espacio de Drive.


En Drive, ahora puedo ver o desacargar el PDF (558 kB) del manuscrito, pero además puedo utilizar Gemini para tener información sobre este archivo 💥, y puedo usar la barra de búsqueda para localizar ese documento o cualqueir palabra contenida en él:
📄

Documento base del sistema

Nombre del archivo: testArchivo_escaneado_20260427-1751.pdf

📌 Contiene una lista de componentes o funciones relacionadas con un sistema de infraestructura o proyecto informático, posiblemente en el contexto de aprendizaje automático (Machine Learning) o procesamiento de datos.

⬇️ A continuación se detalla el análisis extraído del PDF ⬇️

🧠 Estado del “Cerebro Distribuido” (IA Edge)

Infraestructura híbrida con nombres locales - actualización técnica

🍚

Cluster Rice-PI Tau x 7D

Estado: “2 procesadow” (dos veces procesado).

📱

Nodo de Inferencia – Clasificador WhatsApp

TensorFlow Lite • ARM Cortex-A7 (32-bit, doble núcleo).

🚪

Gateway MGLTT

ARM M4 (200MHz) • Ubuntu 22.04 • 512 MB DDR3L + eMMC 4GB. Para sistema de Robots Clasificadores.

🌊

App Flask en Cubagua

Requiere que el Pico-Pi actúe como buffer de protocolos.

🗄️

Cache Mini Local “Edge Stone”

eMMC de 4GB • Cache de artefactos frecuentes (modelos pequeños / embeddings).

🔄

ETL Pipeline – Repeater Curabituries

~1900 reports procesados → datasets agregados.

🔢

Servidor de Embeddings Locales

Sentence Transformers API – vectores comparables a OpenAI.

📊

Monitor de Salud

Prometheus Node Exporter. Picos-PI reportan métricas a Cubagua y Trailer Nagasaki.

⚙️

CI/CD Runner Ligero

Cortex-Action Runner – ejecuta tareas Pyro semanalmente.

🧩 “Cerebro Distribuido” para IA

  • Cubagua → PostgreSQL en “Palata” (base de datos).
  • Nagasaki → Nodo de inferencia (interpreta).
  • Modelo de lenguaje grande + Orquestador: Frailes, el bibliotecario.

🧠 El clúster opera con nombres locales: Cubagua, Nagasaki, Frailes, Palata, Pico-Pi y más.

ComponenteEspecificaciones / Rol
Gateway MGLTTARM M4 (200MHz) • Ubuntu 22.04 • 512MB DDR3L + eMMC 4GB
Cache Edge StoneeMMC 4GB (artefactos frecuentes)
Clasificador WhatsAppARM Cortex-A7 32-bit (doble núcleo) + TensorFlow Lite
Prometheus + Picos-PIMétricas hacia Cubagua y Trailer Nagasaki

🧪 Reporte técnico - Infraestructura distribuida (actualización automática)

Páginas

Entrada destacada

Experimento sobre Consulta RAG

 Mi experimento sobre Consulta RAG: Sistema Hídrico de Cumaná La búsqueda en un mar de ideas... En las últimos días he estado construyendo u...

Entradas populares

Visitas: