Litterae.eu
Humanities & IT


Presentiamo il nostro PRRS (PHP Raw RAG System): un metodo minimalista di RAG basato su PHP

Sommario
In un panorama di continua e rapida evoluzione dell'intelligenza artificiale, la RAG (Retrieval-Augmented Generation) si è affermata come un'architettura fondamentale per ancorare i grandi modelli linguistici (LLM) a dati esterni e verificabili.
Sebbene l'ecosistema attuale sia dominato da framework incentrati su Python e da complessi database vettoriali, l'implementazione di una RAG partendo da zero assume un notevole valore sia dal punto di vista didattico che pratico.
Presentiamo qui il PHP Raw RAG System (in breve, PRRS), uno strumento leggero progettato per colmare la distanza tra sviluppo web tradizionale e moderni flussi di lavoro per l'IA. Utilizzando tecniche classiche di recupero delle informazioni (IR) come TF-IDF e coseno di similitudine, il PRRS offre una visione trasparente del funzionamento interno della generazione contestualizzata di testo.

Premessa: perché optare per una RAG nativa in PHP
L'utilità della RAG deriva dalla sua capacità di ovviare ai limiti intrinseci degli LLM, in particolare al termine cronologico dell'aggiornamento delle loro conoscenze e alla tendenza a fornire risposte errate quando vengono interrogati su argomenti di nicchia o riservati (le cosiddette allucinazioni). Inserendo frammenti di documenti pertinenti nel prompt, la RAG garantisce che il modello operi sulla base di informazioni aggiornate e concrete.
Tuttavia PHP, nonostante il suo dominio del web, è di fatto emarginato in ambito di IA, dove invece spopola un'amplissima gamma di librerie Python. Ma sviluppare uno strumento RAG da zero in PHP serve a due scopi:
1. di accessibilità: fornire agli sviluppatori PHP un modo nativo per integrare l'IA senza doversi appoggiare a servizi Python secondari;
2. didattico: la creazione di un sistema grezzo rimuove gli strati di astrazione delle librerie di alto livello, portando lo sviluppatore a comprendere i meccanismi matematici dei modelli di spazio vettoriale e di indicizzazione dei documenti.

Metodologia e approccio
Il PRRS rinuncia alle rappresentazioni neurali a favore di un approccio classico basato su Bag-of-Words (borsa di parole) e TF-IDF (frequenza di termine - frequenza inversa del documento), integrato dalla corrispondenza di parole chiave.
Se i modelli utilizzano vettori densi (rappresentazioni) per cogliere la semantica, il metodo TF-IDF impiega vettori rarefatti (sparse vectors) per cogliere l'importanza lessicale, mentre la corrispondenza delle parole chiave individua i brani di testo più rilevanti. In questo approccio, il vocabolario del corpus definisce le dimensioni dello spazio vettoriale, fornendo un modo matematicamente rigoroso ma computazionalmente accessibile per misurare la rilevanza dei documenti.

Architettura di sistema e procedura
L'implementazione segue un processo strutturato per trasformare il testo grezzo in un indice matematico ricercabile: 1. pre-elaborazione e normalizzazione: il primo passo consiste nel definire un elenco di stop-word (termini comuni come il è o e) che hanno scarso valore semantico. Il corpus viene quindi ripulito, convertendo il testo in minuscolo e rimuovendo la punteggiatura, per garantire che Esempio ed esempio siano trattati come lo stesso token;
2. estrazione del vocabolario e suddivisione del corpus in blocchi di testo: viene estratto un vocabolario globale individuando gli N termini più frequenti in tutto il corpus, escludendo le stop-word; questo significa che il vocabolario utilizza parole reali come token. E per garantire che l'LLM riceva informazioni gestibili dalla sua finestra di contesto, i documenti vengono suddivisi in blocchi di un numero fisso di parole.
3. vettorizzazione tramite TF-IDF: ogni blocco viene convertito in un vettore in cui ogni dimensione corrisponde a una parola del vocabolario. Il valore di ogni dimensione viene calcolato utilizzando la formula TF-IDF, dove:
a. TF (frequenza del termine) indica quante volte una parola appare in un blocco ed è calcolata come: numero di occorrenze della parola / totale delle parole nel blocco;
b. IDF (frequenza inversa del documento) indica quanto è rara una parola in tutti i blocchi ed è calcolato come: log (totale blocchi / blocchi contenenti la parola);
c. TF-IDF: calcolato come TF × IDF.
Questi vettori, insieme ai corrispondenti blocchi di testo, vengono quindi salvati in un file .csv o in un database SQLite.

Flusso di lavoro operativo: la fase di recupero
Quando un utente invia un prompt e una parola chiave, il sistema esegue un processo di recupero in quattro fasi:
1. vettorizzazione del prompt: la richiesta dell'utente viene normalizzata e convertita in un vettore utilizzando lo stesso vocabolario e gli stessi pesi IDF impiegati durante la fase di indicizzazione del corpus;
2. misurazione della somiglianza: il PRRS calcola il coseno di similitudine tra il vettore della richiesta e ogni vettore di blocco di testo precedentemente memorizzato e archiviato. Per semplificare al massimo, il coseno di similitudine può essere visto quasi come la vicinanza angolare tra due vettori; più è alto, più sono vicini;
3. corrispondenza delle parole chiave: il PRRS confronta le parole chiave con ogni singolo blocco di testo sulla base della sola corrispondenza lessicale diretta;
4. inserimento del contesto: gli N blocchi di testo con i punteggi di similarità più alti e la migliore corrispondenza delle parole chiave vengono recuperati e anteposti al prompt dell'utente come contesto. Questo prompt arricchito viene quindi inviato all'LLM.

Conclusione
È vero che il PRRS è un'architettura semplificata e manca delle sfumature semantiche tipiche degli incorporamenti (embedding) basati su transformer, come BERT o Ada, in grado di comprendere sinonimi che non condividono parole comuni. Tuttavia, per molti ambiti specifici in cui la precisione delle parole chiave è prioritaria, il PRRS produce risultati sorprendentemente apprezzabili anche su corpus di testi molto grandi, anche grezzi.
Ancora più importante, funge da strumento diagnostico per gli sviluppatori, demistificando l'idea di scatola nera dell'IA e dimostrando che i principi fondamentali della RAG affondano le loro radici nell'informatica di base e nell'algebra lineare piuttosto che in una sorta di incomprensibile "magia".
Per lo sviluppatore PHP è inoltre un solido punto di partenza per un'integrazione dell'IA in modo controllato e in locale.

Il verdetto?
Il PRRS è un progetto elegante nella sua semplicità, in vero spirito hacker. È l'antidoto perfetto alla cultura del «basta collegare un'API», poiché offre una comprensione approfondita e funzionale di come basare il lavoro di un'IA sui dati.
E comprensione, quando si usa l'IA, è la vera parola magica.

You can read this article also in English.


Site designed by litterae.eu. © 2004-2026. All rights reserved.
Info GDPR EU 2016/679: no cookies used, no personal data collected.
p.iva / vat number: 02757940206