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:.

Configurare Open webui con Ollama

Si può configurare ollama in locale utilizzando open webui come interfaccia per l’interrogazione in locale.
I passi sono i seguenti:

  1. Scaricare e installare Ollama dal sito ollama.com
  2. Scaricare e installare miniconda per python dal sito anaconda.com
  3. Aprire il terminale di anaconda e creare un nuovo environment con il comando
    conda create -n openwebui python=3.11
  4. Attivare l’ambiente appena generato:
    conda activate openwebui
  5. Installare il pacchetto openwebui:
    pip install open-webui
  6. Aprire un terminale e scaricare il modello phi4-mini da ollama:
    ollama pull phi4-mini
  7. Nell’ambiente anaconda lanciare l’interfaccia openwebui:
    open-webui serve
  8. Ora si può aprire un browser e richiamare la pagina:
    http://localhost:8080

Ora si può usare l’interfaccia web per l’interrogazione di ollama.

Se si intende utilizzare ollama con la gpu intel si devono seguire le istruzioni di Intel contenute al seguente link:
https://cdrdv2-public.intel.com/826081/826081_Running%20Ollama%20with%20Open%20WebUI%20on%20Intel%20Hardware%20Platform_1.0.pdf

Meglio ancora seguire le istruzioni al seguente link:
ipex-llm/docs/mddocs/Quickstart/ollama_portable_zip_quickstart.md at main · intel/ipex-llm · GitHub
per lanciare ollama con il comando:
ollama run phi4-mini

e poi si può lanciare open webui per eseguire i comandi dalla sua interfaccia.

Scheda elettronica per Cella di carico – HX711

La scheda si collega così:

Esempio di codice:

#include “HX711.h”
#define calibration_factor -9580.00 //This value is obtained using the SparkFun_HX711_Calibration sketch
#define DOUT 4
#define CLK 5
HX711 scale(DOUT, CLK);
void setup() {
Serial.begin(9600);
Serial.println(“HX711 scale demo”);
scale.set_scale(calibration_factor);
scale.tare(); //Assuming there is no weight on the scale at start up, reset the scale to 0
Serial.println(“Readings:”);
}
void loop() {
Serial.print(“Reading: “);
float libbre = scale.get_units();
float kg = (libbre/2.2046);
Serial.print(kg, 1); //scale.get_units() returns a float
Serial.print(” kg”); //You can change this to kg but you’ll need to refactor the calibration_factor
Serial.println();
}

https://futuranet.it/futurashop/image/catalog/data/Download/Hx711.zip

Come spegnere la spia dell’airbag del Nissan Qashqai j10

La procedura viene descritta in questo video

Come descritto nei commenti del video in inglese:

This process involves precisely timing the ignition to interrupt the airbag system’s self-check. No tools are required. Preparation: Sit in the driver’s seat and ensure all doors are closed. Turn Ignition ON: Turn the key to the “ON” position (or press the Start button twice without touching the brake). Watch the Light: The airbag light will illuminate and stay solid for about 7 seconds. Turn Ignition OFF: Immediately turn the ignition off the moment the light begins to flash or turns off. Wait: Wait for at least 5 seconds. Repeat: Repeat steps 2 through 5 three more times (for a total of 4 cycles). Final Start: Turn the engine on. The light should stay on for 7 seconds and then extinguish.

Turn ignition on, wait for airbag light to turn off(start blinking), turn ignition off, wait exactly 5 seconds, turn back on, repeat the same 2 more times.

Configurare libxml e libxslt in visual studio

La configurazione dei pacchetti open source in visual studio si realizza con vcpkg.

L’installazione di vcpkg si fa accedendo alla pagina
GitHub – microsoft/vcpkg: C++ Library Manager for Windows, Linux, and MacOS · GitHub
e seguendo le istruzioni.

In particolare si deve fare il clone del progetto github:
git clone https://github.com/microsoft/vcpkg.git

Poi si esegue il bat:
cd vcpkg; .\bootstrap-vcpkg.bat

Ora si può installare il pacchetto libxml, seguendo le istruzioni a questa pagina:
python – is there any way to install libxml2 on windows? – Stack Overflow

In particolare:
vcpkg install libxml2:x64-windows
vcpkg install libxslt:x64-windows
vcpkg integrate install

La nuova versione di libxml è libxml2 e gli include da usare si trovano nel direttorio libxml2, quindi visual studio di default non li troverà.
Per fare in modo che li trovi è necessario aggiungere manualmente al progetto il direttorio dove andare a cercare gli include.

Tasto destro sul progetto -> Properties.
In C/C++ -> Direttorio inclusioni aggiuntive, aggiungi:
C:\path\to\vcpkg\installed\x64-windows\include\libxml2

Eventualmente aggiungere anche il linker: Linker -> Direttorio librerie aggiuntive, aggiungi:
C:\path\to\vcpkg\installed\x64-windows\lib

Eventualmente aggiungere anche la dipendenza. Linker -> Input -> Dipendenze addizionali, aggiungi:
libxml2.lib

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.

Protocollo DALI per impianti di illuminazione

Per gestire impianti di illuminazione complessi non si adoperano più i triac a parzializzazione della forma d’onda come trent’anni fa.
Oggi si utilizzano reti di dispositivi connessi interfacciati con una connessione digitale.

Uno dei protocolli più utilizzati a questo scopo è il protocollo DALI.

Per vedere una possibile applicazione con Arduino, senza l’utilizzo di costosi shield da acquistare a parte, un utente di Hackster ha realizzato questo semplice tutorial:

https://www.hackster.io/NabiyevTR/simple-dali-controller-506e44

Dividere un oggetto in Blender

In alcune occasioni serve dividere un oggetto in due parti per poi eliminarne una.
Il modo più pratico è quello di applicare il modifier Boolean usando come oggetto tagliante un piano (preferibilmente solidificato con il modifier Solidify) e poi di separare le due parti dall’oggetto.


Dopo aver applicato il Boolean, Blender non crea automaticamente due oggetti separati: ottieni una sola mesh con parti scollegate tra loro. Devi quindi separare o selezionare le “isole” di mesh.

Di seguito i metodi corretti in Blender 5.0.


Metodo 1 – Separare le parti automaticamente (consigliato)

  1. Seleziona l’oggetto
  2. TAB → Edit Mode
  3. A per selezionare tutto
  4. P → Separate
  5. Scegli By Loose Parts

➡️ Blender crea oggetti separati per ogni parte non collegata.
Ora puoi:

  • Tornare in Object Mode
  • Selezionare l’oggetto indesiderato
  • X → Delete

💡 Questo è il metodo più veloce dopo un Boolean.

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