Skip to content

Repository files navigation

RAG LLM - Retrieval Augmented Generation sobre Documentos de Greenpeace

Sistema completo de Retrieval Augmented Generation (RAG) construido sobre un corpus de +333 documentos ambientales de Greenpeace. El proyecto implementa el pipeline end-to-end: ingesta de documentos, fragmentación, embeddings, almacenamiento vectorial, recuperación y generación de respuestas, junto con un framework de evaluación riguroso.

Arquitectura

PDF Documents ──► Markdown ──► Chunks ──► Embeddings ──► ChromaDB
                                                            │
                                          User Query ──► Retrieval (MMR) ──► LLM ──► Respuesta
Componente Tecnología
Embedding Model bge-m3:567m (via Ollama)
LLM Local gemma3:4b (via Ollama)
LLM Evaluación Gemini 2.5 Flash Lite (Google GenAI)
Vector Store ChromaDB
Framework LangChain
Entorno Google Colab (GPU)

Estructura del Proyecto

├── Base de Conocimiento (Fragmentación).ipynb  # Conversión PDF → Markdown → Chunks
├── Base de Conocimiento (Ingesta).ipynb        # Carga de chunks en SQLite con metadata
├── Evaluación (Datos de Prueba).ipynb          # Generación de dataset de evaluación (Q&A)
├── RAG (Completo).ipynb                        # Pipeline RAG completo con evaluación
├── Retrieval y Generación (RG).ipynb           # Componentes de retrieval y generación
├── greenpeace/                                 # Datos del corpus
│   ├── greenpeace.csv                          # Metadata de documentos (id, categoría, fecha, url)
│   ├── greenpeace_database.db                  # Base SQLite con chunks indexados
│   ├── docs/                                   # PDFs originales (333 documentos)
│   ├── mds/                                    # Documentos convertidos a Markdown
│   ├── chunks/                                 # Fragmentos JSON por documento
│   ├── *.json                                  # Datasets de evaluación (Q&A pairs)
├── chroma_db/                                  # Base de datos vectorial ChromaDB
├── Test/                                       # Experimentos y ablaciones
│   ├── Base-Line/                              # Configuración base de referencia
│   ├── Combinaciones/                          # Combinaciones de técnicas
│   ├── Fragmentacion/                          # Variaciones de chunk size (200_0, 400_20)
│   ├── Hyperparametros/                        # Tuning de MMR y Similarity Threshold
│   ├── Recuperacion/                           # Re-ranking con distintos k
│   ├── Ruteo/                                  # Routing lógico y semántico
│   └── Transformacion/                         # Step-back, descomposición, reescritura, HyDE

Pipeline

1. Base de Conocimiento

  • Fragmentación: Convierte PDFs a Markdown usando PyMuPDF + marker. Fragmenta con MarkdownHeaderTextSplitter y RecursiveCharacterTextSplitter (chunk_size=800, overlap=100).
  • Ingesta: Carga chunks con metadata (categoría, fecha, URL) en SQLite.

2. Indexación Vectorial

  • Genera embeddings con bge-m3:567m via Ollama.
  • Almacena vectores en ChromaDB (colección: loader_embeddings).

3. Retrieval y Generación

  • Retrieval: MMR (Maximal Marginal Relevance) con k=3, fetch_k=20.
  • Generación: Prompt contextualizado enviado a gemma3:4b via Ollama.

4. Evaluación

  • Genera pares Q&A con ground truth desde los chunks usando Gemini.
  • Métricas: Correctness (vs ground truth), Relevance (respuesta pertinente), Grounding (anclaje en documentos).

Experimentos (Test/)

El directorio Test/ contiene ablaciones sistemáticas sobre el pipeline RAG:

Categoría Variaciones
Fragmentación Chunk sizes: (200, 0), (400, 20)
Hyperparámetros MMR λ={0.5, 1.0}, k={3, 10}, Similarity Threshold=0.7
Recuperación Re-ranking con k medio y k menor
Ruteo Lógico, Semántico (temp=1, temp=2)
Transformación Multi-query, Fusion RAG, Step-back, HyDE, Sub-preguntas (individual/recursivo)
Combinaciones 5 combinaciones de las mejores técnicas

Cada experimento incluye un notebook y un archivo metrics_*.json con los resultados.

Requisitos

langchain
langchain-community
langchain-core
langchain-chroma
langchain-ollama
langchain-google-genai
chromadb
ollama
pymupdf
marker
pandas
pydantic
tqdm

Además se requiere Ollama ejecutándose localmente con los modelos:

ollama pull bge-m3:567m
ollama pull gemma3:4b

Credenciales

Las API keys de Google Generative AI se gestionan mediante google.colab.userdata (almacenamiento seguro de Colab). No hay credenciales hardcodeadas en el código.

Uso

Los notebooks están diseñados para ejecutarse en Google Colab con GPU. El flujo de ejecución es:

  1. Base de Conocimiento (Fragmentación).ipynb → Procesar PDFs
  2. Base de Conocimiento (Ingesta).ipynb → Cargar en SQLite
  3. RAG (Completo).ipynb → Ejecutar pipeline completo
  4. Evaluación (Datos de Prueba).ipynb → Generar y evaluar datos de prueba

About

Sistema completo de Retrieval Augmented Generation (RAG) sobre documentos ambientales de Greenpeace, con pipeline de ingesta, fragmentación, embeddings, retrieval (MMR) y generación usando LangChain, Ollama y ChromaDB.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages