Skip to content

RAG · Multimodale: caption immagini slide PPTX (moondream2) #89

@lucaosti

Description

@lucaosti

Context

Il parser PPTX attuale (python-pptx) estrae solo testo e speaker notes. Le slide dei corsi Polito spesso contengono grafici, diagrammi di architettura e schemi che rappresentano contenuto critico non indicizzato. Uno studente che chiede "spiega lo schema UTXO" non otterrà risposta se lo schema è un'immagine.

La soluzione è generare caption automatiche per ogni immagine nelle slide con un modello vision leggero, poi indicizzare le caption come chunk aggiuntivi.

Approccio raccomandato

moondream2 (~1.9 GB, gira su CPU e Apple Silicon MPS):

from moondream import vl
model = vl(model="moondream-2B-int8.mf")
for img in slide_images:
    caption = model.caption(img)["caption"]
    # indicizzare caption come chunk con metadati: slide N, tipo "image_caption"

Modelli alternativi CPU-friendly: SmolVLM (~1 GB), Phi-3.5-vision Q4 (~3 GB).

File coinvolti

  • services/ai/app/workers/pipeline.py — parser PPTX
  • services/ai/requirements.txt — aggiungere moondream

Azioni richieste

  1. Aggiungere estrazione immagini da slide PPTX (slide.shapes con picture type → PIL.Image)

  2. Per ogni immagine estratta: generare caption con moondream2

  3. Creare chunk aggiuntivo per ogni immagine con:

    • text: caption generata
    • chunk_type: "image_caption"
    • slide: numero slide
    • label: "[Immagine slide N] {caption}"
  4. Abilitare via env var RAG_IMAGE_CAPTIONS=true (default: false — il modello è 1.9 GB)

  5. Documentare il tempo aggiuntivo di ingest (stimato: ~2–5s per immagine su CPU)

Acceptance criteria

  • Con RAG_IMAGE_CAPTIONS=true: le immagini delle slide producono chunk indicizzati
  • Le caption appaiono nelle citazioni con label chiara ("Immagine slide N")
  • Nessuna regressione con RAG_IMAGE_CAPTIONS=false
  • Il modello viene caricato lazy (solo se la feature è abilitata)

Note

  • ColPali (retrieval visivo diretto su PDF) è SOTA ma richiede ~8 GB VRAM → non raccomandato senza GPU
  • Questa feature è classificata come post-MVP per l'alto effort di setup

Riferimenti

  • [rag-sota-2026.md §2.8 — Multimodale per PPTX]
  • moondream2

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestpost-mvpFuori scope MVP immediatoragRAG pipeline improvements

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions