El objetivo era comprobar si era posible, en cuestión de pocas horas y con la ayuda de un modelo de lenguaje grande (LLM), desarrollar una canalización RAG (Retrieval Augmented Generation) funcional, incluida una interfaz gráfica de usuario. El enfoque se centró en la capacidad de ejecución local y en la calidad de los resultados de búsqueda. El resultado de la prueba muestra que el proceso de desarrollo asistido por IA produce resultados funcionales y robustos.

Para la arquitectura técnica y las estrategias de optimización de la canalización se adaptaron conceptos de las siguientes entradas de blog:
https://aarondenew.local/?p=4525
https://aarondenew.local/?p=4585

Las entradas se centran en métodos avanzados para maximizar la precisión en sistemas RAG locales que van más allá de la búsqueda vectorial estándar. Un aspecto clave es la implementación de la búsqueda híbrida (por ejemplo, mediante BGE-M3), para combinar de manera efectiva la comprensión semántica (Dense Vectors) con la búsqueda exacta por palabras clave (Sparse Vectors). Además, se describen optimizaciones post-retrieval como Reciprocal Rank Fusion (RRF) y re-ranking, que mejoran de forma decisiva la relevancia de los documentos encontrados antes de transferirlos a la IA. Por último, tratan estrategias de enriquecimiento semántico de los datos, por ejemplo mediante extracción de entidades (GLiNER) y chunking jerárquico, para proporcionar un contexto más preciso al modelo de lenguaje.

Arquitectura y contenedorización

El sistema completo se basa en una arquitectura de microservicios y se contenediriza por completo con Docker. La orquestación se realiza mediante docker-compose, dividiendo el sistema en cuatro componentes principales:

  • Application Core (rag-core): El contenedor principal que incluye la lógica de la aplicación. Se basa en una imagen base creada específicamente (Dockerfile.base), en la que se preinstalan dependencias a nivel de sistema como Tesseract OCR (incluidos los paquetes de idioma alemán) y PyTorch para minimizar los tiempos de compilación en caso de cambios en el código.

  • Vektordatenbank (qdrant): Como capa de persistencia para los embeddings se utiliza la imagen oficial de Qdrant. Almacena vectores y metadatos de forma persistente en un Docker-Volume.

  • Inferenz-Engine (ollama): Para la ejecución del modelo de lenguaje grande (aquí Llama 3), se utiliza Ollama. Este servicio ofrece una API a través de la cual el contenedor core envía solicitudes de generación de texto.

  • OCR-Engine (Optional): Originalmente concebida como un servicio externo vía unstructured-api, la lógica de OCR se integró directamente en el contenedor core para eliminar la dependencia de llamadas API externas y tener el control completo sobre los paquetes de idioma.

Stack tecnológico

La implementación se basa en un stack de Python:

  • Backend: FastAPI sirve como framework web para el procesamiento asincrónico de solicitudes.

  • Frontend: La interfaz de usuario se implementó con NiceGUI.

  • Vectorización: FlagEmbedding y SentenceTransformers para el cálculo de vectores.

  • Procesamiento de datos: Unstructured, Langdetect, Spacy y PyMuPDF para el análisis de documentos.

La canalización de procesamiento (Ingestion)

La calidad de un sistema RAG depende de la preparación de los datos. Los documentos entrantes (PDFs) atraviesan una cadena secuencial de pasos de procesamiento (“Steps”) antes de ser indexados.

Preprocesamiento y limpieza

  • Detección de idioma: Con langdetect se determina el idioma del documento.

  • Limpieza: El texto sin formato se limpia de artefactos. Aquí se utilizan herramientas como ftfy para corregir errores de codificación.

Enriquecimiento semántico (Enrichment)

  • Reconocimiento de entidades nombradas: El modelo GLiNER extrae entidades como personas u organizaciones.

  • Extracción de palabras clave: Con KeyBERT se identifican los términos más significativos del texto.

  • Resumen: Se generan resúmenes a nivel de página para conservar el contexto global.

Segmentación y estructuración

  • Chunking: En lugar de una separación estricta por número de caracteres, se aplica una segmentación semántica.

  • Conceptos avanzados: Módulos experimentales generan preguntas sintéticas sobre fragmentos de texto o resumen clústeres de chunks de forma recursiva (enfoque RAPTOR) para representar también conexiones complejas.

Vectorización

Para la búsqueda se utiliza un enfoque de Hybrid-Search. El modelo BAAI/bge-m3 genera dos tipos de vectores por chunk:
Dense Vector: Representa el significado semántico.
Sparse Vector: Representa palabras clave ponderadas (similar a BM25).

Indexación

Los vectores y metadatos generados se envían a Qdrant.

Recuperación y generación de respuestas

El proceso de consulta está diseñado para minimizar las alucinaciones y priorizar hechos relevantes.

  • Búsqueda híbrida: Las preguntas entrantes se vectorizan. Qdrant realiza en paralelo una búsqueda Dense y Sparse. Los resultados se combinan mediante Reciprocal Rank Fusion (RRF).

  • Re-ranking: Un modelo Cross-Encoder reevalúa la relevancia de los resultados proporcionados por la base de datos. Esto filtra resultados que, aunque sean semánticamente similares, no responden a la pregunta.

  • Generación: Las secciones de texto verificadas se integran como contexto en el prompt para el LLM (Llama 3). El modelo genera la respuesta exclusivamente con base en estas fuentes.

Respuesta de la base de datos de vectores Qdrant (extracto)

{
  "result": {
    "points": [
      {
        "id": 1167906119681893486,
        "payload": {
          "text": "nd Betreuung auf ihrer Cloud-Journey bietet“, sagt Benedikt Scherzinger, Head of STACKIT Partner Sales.\n\n[CONTEXT]: Hier ist eine zusammengefasste Fassung:\n\nOPITZ CONSULTING und STACKIT haben sich zu einem Cloud-Partner verbündet. Mit Wirkung ab dem 1. März 2024 werden sie ihre Kräfte bündeln, um Kunden eine leistungsstarke Alternative zu US-amerikanischen Hyperscalern anzubieten. Die Partnerschaft ermöglicht es Unternehmen und Organisationen, ihre IT-Landschaften zukunftssicher zu gestalten. OPITZ CONSULTI",
          "job_id": "82d5c9be48f6e21a13a02ce19cbfe8c6",
          "source": "data/pm-partnerschaft-stackit.pdf",
          "page": 1,
          "chunk_index": 3,
          "doc_type": "pdf",
          "related_ids": [
            1707502642710362316,
            1512097806078860691,
            3784302674723249884,
            1167906119681893486,
            3549753017506491432,
            5785334779774152587
          ],
          "parent_id": null,
          "node_type": "leaf",
          "page_context": {
            "summary": "Hier ist eine zusammengefasste Fassung:\n\nOPITZ CONSULTING und STACKIT haben sich zu einem Cloud-Partner verbündet. Mit Wirkung ab dem 1. März 2024 werden sie ihre Kräfte bündeln, um Kunden eine leistungsstarke Alternative zu US-amerikanischen Hyperscalern anzubieten. Die Partnerschaft ermöglicht es Unternehmen und Organisationen, ihre IT-Landschaften zukunftssicher zu gestalten. OPITZ CONSULTING unterstützt als Professional Service Partner von STACKIT Unternehmen bei der Cloud-Journey, entwickelt, implementiert und betreibt kundenindividuelle Lösungen auf Basis der STACKIT Cloud. Das Ziel ist, nahtlose, effiziente und sichere Cloud-Transformationen zu ermöglichen.",
            "global_keywords": [
              "stackit cloud",
              "deutschen cloud",
              "opitz consulting",
              "cloud dienstleistungen",
              "cloud partner"
            ]
          },
          "enrichment": {
            "detected_language": "de",
            "gliner_entities": [
              {
                "text": "OPITZ CONSULTING",
                "label": "organization"
              },
              {
                "text": "STACKIT",
                "label": "organization"
              },
              {
                "text": "Gummersbach",
                "label": "location"
              },
              {
                "text": "Benedikt Scherzinger",
                "label": "person"
              }
            ],
            "keywords": [
              "stackit cloud",
              "deutschen cloud",
              "opitz consulting",
              "cloud dienstleistungen",
              "cloud partner"
            ],
            "questions": {
              "0": "Diese spezifische Frage beantwortet der Text: \"Wer wird ein neuer Cloud-Partner von OPITZ CONSULTING?\" (Die Antwort ist Stackit.)",
              "1": "Diese spezifische Frage, die dieser Text beantwortet, lautet: \"Was ist KIT Cloud und was bietet es?\"",
              "2": "Diese spezifische Frage beantwortet: \"Wie unterstützen Unternehmen in Zusammenarbeit mit OPITZ CONSULTING ihre Kunden bei der Cloud-Transformation?\""
            },
            "semantic_links": "Der semantische Zusammenhang zwischen den Textteilen besteht darin, dass OPITZ CONSULTING und STACKIT sich zum Partner für die KIT Cloud, eine deutsche Cloud-Lösung, verbinden, um deutsche Unternehmen und Organisationen eine leistungsstarke Alternative zu US-amerikanischen Hyperscalern anzubieten."
          },
          "full_metadata": {
            "page": 1,
            "source": "data/pm-partnerschaft-stackit.pdf",
            "job_id": "82d5c9be48f6e21a13a02ce19cbfe8c6",
            "language": "de",
            "related_ids": [
              1707502642710362316,
              1512097806078860691,
              3784302674723249884,
              1167906119681893486,
              3549753017506491432,
              5785334779774152587
            ]
          }
        }
      },
      {
        "id": 6746363469034387563,
        "payload": {
          "text": "Christoph Pfinder, Senior Manager Solutions bei OPITZ CONSULTING stimmt dem zu: „Wir sind begeistert von der Synergie mit STACKIT und der gemeinsamen Vision, die digitale Transformation von Unternehmen mit einer soliden, vertrauenswürdigen Basis voranzutreiben.“ Pfinder betont: „Hier geht es um mehr als um eine Zusammenarbeit zweier Unternehmen – diese Partnerschaft ist ein Versprechen an unsere Kunden, die digitale Zukunft sicher, souverän und erfolgreich zu gestalten. Unsere geteilten Werte und unsere gem",
          "job_id": "82d5c9be48f6e21a13a02ce19cbfe8c6",
          "source": "data/pm-partnerschaft-stackit.pdf",
          "page": 2,
          "chunk_index": 0,
          "doc_type": "pdf",
          "related_ids": [
            6746363469034387563,
            6699369969051898647,
            3475859339805626389,
            3561573586785612998,
            6306179352687101301,
            1534404069132234647,
            1806157755283019380
          ],
          "parent_id": null,
          "node_type": "leaf",
          "page_context": {
            "summary": "Hier ist eine Zusammenfassung der Seite:\n\nOPITZ CONSULTING, ein Unternehmen mit mehr als 500 Mitarbeitern in Deutschland, hat eine Partnerschaft mit STACKIT, einem Cloud- und Colocation-Provider der Schwarz Gruppe, bekanntgegeben. Senior Manager Solutions Christoph Pfinder von OPITZ CONSULTING betont, dass es sich um mehr als nur eine Zusammenarbeit handelt, sondern um ein Versprechen an Kunden, die digitale Zukunft sicher, souverän und erfolgreich zu gestalten. STACKIT bietet eine technische Infrastruktur in Deutschland und Österreich, die über den Marktstandard hinausgehende Datensouveränität bietet. Das Ziel ist, die digitale Transformation von Unternehmen mit einer soliden Basis voranzutreiben.",
            "global_keywords": [
              "und digitalsparte",
              "cloud und",
              "stackit und",
              "und colocation",
              "mit digitalen"
            ]
          },
          "enrichment": {
            "detected_language": "de",
            "gliner_entities": [
              {
                "text": "Christoph Pfinder",
                "label": "person"
              },
              {
                "text": "OPITZ CONSULTING",
                "label": "organization"
              },
              {
                "text": "STACKIT",
                "label": "organization"
              },
              {
                "text": "digitale Transformation",
                "label": "project"
              },
              {
                "text": "DACH-Region",
                "label": "location"
              },
              {
                "text": "christoph.pfinder",
                "label": "person"
              }
            ],
            "keywords": [
              "und digitalsparte",
              "cloud und",
              "stackit und",
              "und colocation",
              "mit digitalen"
            ],
            "questions": {
              "0": "Diese spezifische Frage wird beantwortet: \"Welche Partnerschaft gibt es zwischen OPITZ CONSULTING und STACKIT?\"",
              "1": "Die spezifische Frage, die dieser Text beantwortet ist: \"Was ist STACKIT?\"",
              "2": "Die spezifische Frage, die dieser Text beantwortet, ist nicht explizit formuliert. Der Text scheint eher informativ zu sein und möchte das Unternehmen STACKIT und seine Leistungen vorstellen, insbesondere die von ihnen angebotene Datensouveränität. Es gibt keine spezifische Frage wie \"Was ist STACKIT?\" oder \"Wie bietet STACKIT Datensouveränität?\", sondern es handelt sich um einen informativen Text über das Unternehmen und seine Angebote."
            },
            "semantic_links": "Der semantische Zusammenhang zwischen den Textteilen A und B besteht darin, dass sie über die Partnerschaft zwischen OPITZ CONSULTING und STACKIT sprechen, wobei Christoph Pfinder von OPITZ CONSULTING ausführt, warum er sich für diese Partnerschaft begeistert und betont, dass gemeinsame Werte und Visionen die digitale Transformation von Unternehmen prägen werden."
          },
          "full_metadata": {
            "page": 2,
            "source": "data/pm-partnerschaft-stackit.pdf",
            "job_id": "82d5c9be48f6e21a13a02ce19cbfe8c6",
            "language": "de",
            "related_ids": [
              6746363469034387563,
              6699369969051898647,
              3475859339805626389,
              3561573586785612998,
              6306179352687101301,
              1534404069132234647,
              1806157755283019380
            ]
          }
        }
      }
    ],
    "next_page_offset": null
  },
  "status": "ok",
  "time": 0.004957525
}

Conclusión

El proyecto demuestra que, mediante la combinación de bibliotecas modernas de código abierto y una arquitectura contenedorizada, es posible implementar canalizaciones RAG de alto rendimiento en poco tiempo. La complejidad radica menos en el código en sí y más en la comprensión de los pasos de procesamiento de datos y en la correcta orquestación de los componentes