Este artículo narra la experiencia de un ingeniero al construir un sistema de Recuperación Aumentada de Generación (RAG) interno para su empresa, utilizando un modelo de lenguaje grande (LLM) local. El objetivo era crear una herramienta de chat que permitiera a los ingenieros acceder rápidamente a información sobre proyectos pasados, incluso desde archivos técnicos complejos como los de OrcaFlex, sin depender de APIs externas por motivos de confidencialidad. El proyecto, inicialmente estimado en unas pocas semanas, resultó ser un desafío considerable, marcado por numerosos problemas y soluciones creativas.
El primer obstáculo fue la selección de la tecnología. Se optó por Ollama para ejecutar localmente los modelos LLaMA y nomic-embed-text para la generación de embeddings. LlamaIndex se eligió como framework RAG para gestionar la indexación, la generación de embeddings, el almacenamiento vectorial y las consultas. El desarrollo inicial fue prometedor, pero la complejidad real surgió al enfrentarse a la enorme cantidad de datos (1 TB), principalmente en formatos variados y desorganizados.
La gestión de los documentos fue el segundo gran problema. El sistema inicial, al intentar procesar todos los archivos, colapsaba debido a la inclusión de archivos binarios (videos, simulaciones) que consumían excesiva memoria. Se implementó un filtro para excluir estos archivos, reduciendo significativamente el volumen de datos a procesar. Posteriormente, se enfrentaron a la lentitud del proceso de indexación, que requería días para completarse. La solución fue migrar a una base de datos vectorial dedicada, ChromaDB, que permitió un procesamiento por lotes y una gestión más eficiente de los datos.
El rendimiento de la GPU se convirtió en el siguiente cuello de botella. La tarjeta gráfica integrada del portátil era insuficiente, lo que obligó a alquilar una máquina virtual con una GPU NVIDIA RTX 4000. Finalmente, tras varias semanas de indexación, se logró crear un sistema RAG funcional, con una base de datos vectorial de 54 GB. La experiencia destaca la importancia de la planificación, la experimentación y la adaptación en el desarrollo de sistemas complejos de IA, así como la necesidad de considerar cuidadosamente los recursos computacionales disponibles.
