Configurazione dei parametri RAG per open-webui

Per il parsing di documenti PDF tecnici (come manuali ingegneristici, datasheet, specifiche software o articoli scientifici), le impostazioni standard di Open WebUI sono spesso insufficienti. I testi tecnici si distinguono per formati a due colonne, tabelle complesse, blocchi di codice e formule matematiche che i parser di testo standard tendono a frammentare o distruggere.

Per ottimizzare la qualità del RAG (Retrieval-Augmented Generation) su documentazione tecnica, segui questa configurazione all’interno dell’Admin Panel -> Settings -> Documents: [1, 2]


1. Il Motore di Estrazione (Content Extraction)

Evita assolutamente l’engine nativo predefinito, che confonde l’ordine di lettura delle colonne e distrugge le tabelle.

  • Scelta Consigliata: Docling Document Extraction
    • Perché: È lo strumento migliore in assoluto per documenti tecnici. Docling non si limita a “leggere” il testo, ma comprende il layout visivo. Mantiene intatta la struttura delle tabelle, riconosce le formule matematiche e non unisce erroneamente il testo scritto su due colonne separate.
    • Come configurarlo: Richiede il deploy di un container Docker separato (docling-serve). Nelle impostazioni dei documenti di Open WebUI dovrai inserire l’URL (es. http://host.docker.internal:5001) e attivare il motore. [1]
  • Alternativa Veloce: Apache Tika
    • Perché: Se non puoi usare Docling, Tika è molto più leggero ed eccelle nel gestire file PDF complessi e ricchi di metadati, prevenendo la maggior parte dei crash causati da file mal formattati. [1, 2]

2. Parametri di Chunking (Frammentazione del testo)

Il testo deve essere spezzato in parti logiche (“chunks”) prima di essere memorizzato nel database vettoriale. Per la documentazione tecnica, i blocchi devono essere più grandi del normale per non isolare formule, definizioni o passaggi di codice. [1]

  • Chunk Size (Dimensione del blocco): 1000 – 1500 token
    • Motivazione: I concetti tecnici hanno bisogno di contesto. Se un frammento di codice o una spiegazione viene tagliata a metà, il modello non capirà il funzionamento.
  • Chunk Overlap (Sovrapposizione): 150 – 200 token
    • Motivazione: Una sovrapposizione generosa assicura che i concetti espressi a cavallo tra un blocco e l’altro mantengano la continuità semantica.
  • Chunk Min Size Target: Abilitato / Impostato alto
    • Motivazione: Questa opzione unisce in modo intelligente i paragrafi molto piccoli rimasti isolati dopo lo splitting semantico, evitando frammenti di testo privi di significato. [1]

3. Parametri di Ricerca Semantica (Query Parameters)

Quando fai una domanda su un manuale tecnico, l’AI ha bisogno di raccogliere molti dettagli da più sezioni diverse del documento.

  • Top K: 8 – 12 (Default solitamente è 4)
    • Motivazione: Il valore Top K indica quanti blocchi di testo rilevanti vengono inviati al modello per generare la risposta. Per i PDF tecnici, aumentare questo valore a circa 10 è fondamentale: permette all’AI di consultare contemporaneamente l’introduzione di un componente, i suoi dati elettrici e le note a piè di pagina sparsi nel manuale. [1]
  • Embedding Model: Assicurati di utilizzare un modello di embedding moderno e con una finestra di contesto adeguata (ad esempio bge-large-en-v1.5 o modelli multilingua equivalenti se i tuoi documenti sono in italiano), in modo che le sfumature del gergo tecnico vengano indicizzate correttamente.

⚠️ Un ultimo dettaglio cruciale

I documenti tecnici sono spesso pieni di grafici o diagrammi di flusso. Se usi Docling, all’interno del campo di configurazione JSON (DOCLING_PARAMS) puoi attivare la voce picture_description. Se configurata con un modello di Vision (anche locale tramite Ollama), questa opzione genererà una descrizione testuale automatica dei diagrammi presenti nel PDF, rendendo ricercabili anche le immagini tecniche che altrimenti l’AI ignorerebbe del tutto. [1]

Hai la possibilità di avviare container Docker aggiuntivi sul tuo server (per installare Docling o Tika), oppure preferisci ottimizzare al massimo le opzioni già interne a Open WebUI senza installare altri servizi?

Aggiungere il numero di pagina alle risposte

Per fare in modo che il RAG di Open WebUI estragga i numeri di pagina dai PDF, li memorizzi e permetta al modello di vederli e citarli nelle sue risposte, devi configurare una variabile d’ambiente specifica a livello di server ed assicurarti di usare un motore di estrazione compatibile. [1, 2]

La procedura si articola in tre passaggi fondamentali:


Passaggio 1: Attivare i metadati della pagina nel server

Di base, Open WebUI estrae il testo ma non passa esplicitamente le chiavi dei metadati (come il numero di pagina) all’interno del contesto inviato al Modello. Per forzarlo a farlo, devi inserire una variabile d’ambiente nel sistema in cui gira Open WebUI (ad esempio nel tuo file docker-compose.yaml o nei parametri di avvio di Docker): [1]

env

RAG_SOURCE_METADATA_KEYS=page,page_label

Usa il codice con cautela.

  • A cosa serve: Questa variabile dice a Open WebUI di prendere il valore page (strutturato durante il parsing del PDF) e inserirlo direttamente all’interno dei tag <source> invisibili che circondano il testo inviato al modello. In questo modo, l’AI saprà esattamente da quale pagina proviene ogni singola informazione.
  • Nota: Essendo una variabile d’ambiente legata al backend, richiede il riavvio del container/server per essere applicata. [1, 2]

Passaggio 2: Utilizzare Docling per il parsing

Il motore di estrazione PDF predefinito non sempre mappa correttamente i numeri di pagina nel database vettoriale. Il metodo nativo più affidabile per l’estrazione strutturata delle pagine è Docling Document Extraction. [1]

Docling analizza visivamente il PDF e assegna a ogni blocco di testo un indicatore preciso della pagina (page number integer). [1]

  • Importante: Se avevi già caricato i PDF prima di attivare Docling o la variabile d’ambiente, la semplice funzione “Reindex” da pannello amministrativo non basterà perché riutilizza il testo vecchio. Dovrai eliminare i PDF dalla Knowledge Base e caricarli nuovamente da capo per generare i nuovi metadati con i numeri di pagina. [1]

Passaggio 3: Istruire il Modello (System Prompt)

Anche se il modello ora riceve i numeri di pagina nascosti nei tag del RAG, potrebbe ignorarli se non esplicitamente istruito a mostrarli. Modifica il System Prompt del tuo modello o del tuo utente inserendo questa istruzione:

“Quando rispondi utilizzando i documenti di contesto forniti (RAG), racchiudi sempre le tue affermazioni inserendo una citazione precisa che includa il nome del file e il numero di pagina esatto da cui hai tratto l’informazione (es. [NomeDocumento.pdf, Pagina X]).”


🔍 Come verificare se funziona

Una volta completata la configurazione:

  1. Fai una domanda sul documento all’interno della chat.
  2. Quando il modello risponde, clicca sulla citazione numerica (il piccolo numero o icona che compare sotto o accanto al testo generato).
  3. Nel popup dei dettagli della fonte che si aprirà a schermo, vedrai il blocco di testo estratto e, in alto o tra i metadati del chunk, il numero di pagina corrispondente. [1, 2, 3]

Quale metodo utilizzi attualmente per avviare Open WebUI? Se usi Docker Compose, posso fornirti direttamente lo snippet di codice pronto da copiare sotto la voce environment:.

Trasformare una presa SCART in un segnale video composito RCA

Come saprete, la presa scart è un connettore multi funzione.
Consente di collegare dispositivi con diversi protocolli in uscita dal device o in entrata.

I segnali sono separati tra audio e video.
I segnali audio sono stereo, quelli video trasportano protocolli diversi su pin diversi.
Lo schema dei contatti è visibile nella figura seguente, in cui compare un connettore femmina visto da davanti.

I Pin sono i seguenti:

PIN 1Uscita audio B, ovvero[1]:
monofonia
stereofonia, canale destro
canale indipendente B
PIN 2Ingresso audio B, ovvero[1]:
monofonia
stereofonia, canale destro
canale indipendente B
PIN 3Uscita audio A, ovvero[1]:
monofonia[2]
stereofonia, canale sinistro
canale indipendente A
PIN 4Massa comune audio
PIN 5Massa componente blu RGB (pied. 7)
PIN 6Ingresso audio A, ovvero[1]:
monofonia[2]
stereofonia, canale sinistro
canale indipendente A
PIN 7ingresso o uscita componente blu RGB o
crominanza S-Video[3][4]o
Pb Componente[5]
PIN 8Ingresso o uscita selezione di funzione e Rapporto d’aspetto[6] [0-2V → spento, 4,5-7V → 16:9 e acceso, 9,5-12V → 4:3 e acceso]
PIN 9Massa componente verde RGB (pied. 11)
PIN 10Control bus (norma AV.link) bidirezionale opzionale
(già linea interconnessione dati 2)[7]
PIN 11ingresso o uscita componente verde RGB o
luminanza Componente (Y)[5]
PIN 12Riservato (linea interconnessione dati 1)[7]
PIN 13Massa componente rosso RGB (pied. 15)
PIN 14Massa segnale di cancellazione
PIN 15ingresso o uscita componente rosso RGB o
crominanza S-Video[4]o
Pr Componente[5]
PIN 16Segnale di cancellazione
Commutazione tensione RGB [0-0,4V → composito, 1-3V → RGB]
PIN 17Massa uscita video (pied. 19)
PIN 18Massa ingresso video (pied. 20)
PIN 19Uscita video
(composito o luminanza S-Video)
PIN 20Ingresso video
(composito o luminanza S-Video)
PIN 21Massa comune per i piedini 8, 10 e 12

Le uscita audio sono la 1 e la 3. Gli ingressi sono il 2 e il 6. La massa è in comune ed è il terminale 4.

Quindi se dobbiamo collegare un videoregistratore ad un amplificatore esterno è necessario selezionare i Pin output. Se dobbiamo collegare un dispositivo audio in entrata al videoregistratore dobbiamo usare i pin 2 e 6.

Per quanto riguarda le uscite video, queste sono più variegate.
Per ragioni storiche sono disponibili uscite composito, s-video e rgb separati.
Per questioni pratiche si usa molto più spesso solo la parte composita.

A questo scopo, per collegare un videoregistratore ad un tv esterno (quindi in uscita) dobbiamo utilizzare i pin 17 e 19 (massa e segnale).
Per collegare un dispositivo in ingresso al videoregistratore si devono usare i pin 18 e 20.

Quindi un tipico convertitore da uscita scart a connettore video out composito RCA collegherà i terminai 17 e 19 alla calza e al segnale del connettore RCA.

Sigle componenti SMD

I componenti SMD possono essere davvero minuscoli.
Questo fa sì che i costruttori non possano inserire sull’involucro il nome per esteso e le caratteristiche di ogni singolo componente, di conseguenza si trova sempre stampigliato sul corpo una sigla sintetica.

Per risalire al componente vero e proprio si fa uso di una tabella di transcodifica, che lega la sigla al prodotto.

Un database che consente la ricerca di questi componenti si trova al seguente link:

The SMD components marking codes database – Index page

Presepe di Natale 2025

Nell’ultimo anno io e la mia famiglia ci siamo prodigati nel realizzare un piccolo presepe casalingo.
L’idea era quella di espandere quello di due anni fa quando costruimmo una piccola casetta antica (in gesso) e una grotta con la natività di Gesù all’interno.
Da quella idea ne è nato questo presepe che ci ha soddisfatti nei contenuti, nonostante risulti ancora in parte incompleto.

Le luci sono sincronizzate con i suoni e le musiche diffuse attraverso un piccolo altoparlante controllato da una scheda elettronica che mi sono auto costruito.

L’intero apparato di luci e di sincronizzazione degli effetti è controllabile da remoto, accedendo ad una pagina internet.

Durante l’esecuzione viene attivato anche un fiume che trasporta l’acqua all’interno di un piccolo laghetto. L’acqua scorre dopo un temporale che è accompagnato da tuoni e fulmini.

Audio in RetroPie con Raspberry PI

In alcune situazioni si desidera ricevere audio dall’uscita delle cuffie piuttosto che da HDMI. Potrebbe essere necessario, per esempio, in situazioni in cui il display abbia solo ingresso DVI e non HDMI, quindi senza audio.

In questi casi è necessario andare su raspi-config e abilitare uscita audio su external speaker.

.

Modificare emulatore per una rom in RetroPie

Capita alle volte che un gioco non si avvii più dall’EmulationStation.
In particolare a me non si avviava il gioco 1942, in quanto richiedeva come emulatore lr-fbneo-cd che non funzionava.
Per ripristinare il corretto caricamento del gioco bisogna modificare manualmente il file che si trova in

/opt/retropie/configs/all/emulators.cfg

All’interno viene memorizzata una cache con l’emulatore da avviare con quel gioco, indicato con il nome.
Nel mio caso è bastato inserire:

arcade_1942 = "lr-fbneo"

e il gioco ha ripreso a funzionare.
Nello stesso direttorio sono presenti altri files di configurazione. Se qualcosa non funziona si può provare ad intervenire anche dentro quelli.

Realizzare PCB in casa

Un metodo consiste nell’uso del photoresist dry film.
Si può acquistare positivo oppure negativo e richiede la stampa specchiata del lato rame su un foglio di acetato.

Prima si deve applicare il dry film sul rame del pcb e per farlo si può fare uso di un laminatore.

Una volta applicato il photoresist si deve lasciare asciugare un po’ e poi lo si può illuminare con raggi ultravioletti.

Lo sviluppo si fa con del carbonato solvay (carbonato di sodio) fino all’eliminazione del residuo di photoresist dal rame.

Successivamente si incide il rame con cloruro ferrico oppure con Persolfato di sodio che si può acquistare in polvere da disciogliere in acqua.

Agente chimicoTempo medio di incisione (rame 35 µm, soluzione calda e agitata)Note pratiche
Persolfato di sodio (Na₂S₂O₈)15–30 minPulito, non macchia come il cloruro ferrico. Richiede temperatura 40–50 °C per efficienza.
Cloruro ferrico (FeCl₃)10–20 minPiù rapido, ma sporca molto e lascia residui difficili da pulire.
Acido cloridrico + acqua ossigenata (HCl + H₂O₂)5–15 minMolto veloce, ma più pericoloso da maneggiare; produce vapori irritanti.
Solfato rameico rigenerato (CuSO₄ con corrente)Variabile (20–40 min)Usato in processi elettrochimici; più controllabile ma richiede alimentazione elettrica.

Serie di Connettori JST

Tabella comparativa con sigle delle serie JST

Sigla (serie)PassoCorrente tipicaBloccaggio/meccanicaUso tipico
PH2,0 mm~2 ASenza latch, wire-to-board, basso profiloPCB compatti, sensori, strip LED leggere
XH2,5 mm~3 ASenza latch, wire-to-board, robustoPCB consumer, pacchi batteria, stampanti 3D
VH3,96 mm~10 ASenza latch, wire-to-board, pin più massicciAlimentazioni, motori, carichi pesanti
SH1,0 mm~1 ASenza latch, ultra low‑profileWearable, moduli wireless, PCB densissimi
SM2,5 mm~3 ACon latch, wire‑to‑wire (plug/socket)LED addressable, cablaggi esterni, RC

Nota: “JST‑SM” è un nome usato comunemente ma non è una serie ufficiale del catalogo JST; è un connettore wire‑to‑wire con clip di blocco, spesso fornito da terze parti e non compatibile con gli housing PH/XH/VH/SH.


Dettagli pratici e consigli sintetici

  • Compatibilità passo: PH 2,0 mm vs XH/SM 2,5 mm; non sono intercambiabili sul PCB.
  • Orientamento: le serie PH/XH/VH/SH sono wire‑to‑board; SM è wire‑to‑wire con latch, ideale per connessioni esterne rimovibili.
  • AWG tipico: PH/XH ~AWG 28–24; VH ~AWG 22–18; SH ~AWG 32–28; SM ~AWG 26–22.
  • Pin range comune: PH/XH 2–16; VH 2–10; SH 2–12; SM 2–5 (più diffusi 2–3 pin).
  • Crimpatura: usa pinze dedicate; contatti PH/XH/SH/VH hanno terminali specifici non compatibili tra serie.

Come resettare un modulo con ESP32

Alcune volte può capitare che i moduli ESP32 non si riescano più a programmare.
Questo può accadere a seguito dell’installazione di applicazioni che vanno a toccare il bootloader oppure a seguito di installazioni che trasformino ESP32 in tastiere bluetooth.

In questi casi è necessario procedere al reset del bootloader.

Per farlo è necessario scaricare il bootloader. Lo si può scaricare da https://github.com/itsbhupendrasingh/ESP32-Factory-Reset-S2-and-bootloader

L’operazione di reset si esegue online con un’applicazione javascript di esptool:

https://espressif.github.io/esptool-js

Da qui si può fare Connect. Il sistema chiederà a quale porta ci si intende connettere. Scegliere quella dove è connesso ESP32.

Se il sistema risponde con “Unable to connect…”. E’ necessario tenere premuto “Boot” per qualche secondo nel mentre che si cliccca su connect.

Il sistema avviserà dell’avvenuta connessione.

A quel punto si può caricare il file bin scaricato in precedenza e poi cliccare su “Program”.

Il bootloader dovrebbe essere a posto.

Applicare una displace map in Blender

Quando si realizza un disegno 3d con Blender non sempre è facile disegnare il rilevo sulle superfici esterne.
Per farlo più semplicemente si può usare il modificatore “Displace“.

Immaginiamo di voler applicare una texture in rilievo di una corteccia d’albero sulla superficie laterale di un cilindro.

La prima cosa da fare è aggiungere il modificatore “Displace”, ricordandosi di sceglier nel menu a tendina delle coordinate il valore “UV”.

Poi si deve andare nell’area delle texture dove il sistema avrà già creato un nuova texture.

Qui si può caricare da disco l’immagine della texture della corteccia.

Una volta fatto questo si può andare in edit mode e aumentare la risoluzione verticale delle facce laterali del cilindro, premendo CTRL+R e selezionando come suddivisioni almeno 30.

Ora si possono selezionare i vertici della superficie laterale e crearne un gruppo, usando le funzionalità cui si accede con il triangolino verde, assegnando a questo gruppo un nome.

Questo gruppo può essere selezionato come “Vertex group” del modificatore “Displace”.
Per renderlo più efficace nel modificatore “Displace” è meglio inserire 0.1 al massimo nel campo “Strength” e lavorare con Middleval.

Per migliorare l’effetto si può aggiungere il modificatore “Subdivision surface” prima del “Displace” e inserire 4 nel “Levels vieport” e 3 nel Render.

Nel video seguente si vede una procedura funzionante del tutto: