Eseguire il ridimensionamento del riepilogo lato client in piccole finestre di contesto

Data di pubblicazione: 12 marzo 2025

Spiegazione Web Estensioni Stato di Chrome Intenzione
GitHub Dietro una bandiera Prova di Origin Dietro una bandiera Prova di Origin Visualizza Intento di partecipare a un esperimento

L'API Summarizer ti aiuta a generare riepiloghi di informazioni in vari formati e lunghezze. Utilizzalo con Gemini Nano in Chrome per eseguire deduzioni lato client e spiegare in modo conciso testi complicati o lunghi.

Se eseguita lato client, puoi lavorare con i dati localmente, il che ti consente di mantenere al sicuro i dati sensibili e di offrire disponibilità su larga scala. Tuttavia, la finestra di contesto è molto più piccola rispetto ai modelli lato server, il che significa che i documenti molto grandi potrebbero essere difficili da riassumere. Per risolvere questo problema, puoi utilizzare la tecnica del riepilogo dei riepiloghi.

Che cos'è il riepilogo dei riepiloghi?

Per utilizzare la tecnica del riepilogo dei riepiloghi, suddividi i contenuti di input in punti chiave, quindi riassumi ogni parte in modo indipendente. Puoi concatenare gli output di ogni parte, quindi riassumere questo testo concatenato in un riepilogo finale.

Ad esempio, se un documento è suddiviso in tre parti, ogni parte viene brevemente riassunta. Questi tre riepiloghi vengono riuniti e riassunti di nuovo per il risultato finale.

Suddividi i contenuti in modo ponderato

È importante considerare come suddividere un lungo testo, poiché la suddivisione in posizioni diverse può portare a risultati radicalmente diversi da Gemini Nano o altri LLM. Idealmente, i testi dovrebbero essere suddivisi quando c'è un cambio di argomento, ad esempio una nuova sezione di un articolo, o in un paragrafo. È importante evitare di suddividere il testo nel mezzo di una parola o di una frase, il che significa che non puoi impostare un numero di caratteri come unica linea guida per la suddivisione.

Esistono molti modi per farlo, senza intervento manuale. Nell'esempio seguente abbiamo utilizzato lo strumento di suddivisione del testo ricorsivo di LangChain.js, che bilancia le prestazioni e la qualità dell'output. Questo dovrebbe funzionare per la maggior parte dei carichi di lavoro.

Quando crei una nuova istanza, sono disponibili due parametri chiave:

  • chunkSize è il numero massimo di caratteri consentiti in ogni suddivisione.
  • chunkOverlap è la quantità di caratteri da sovrapporre tra due suddivisioni consecutive. Ciò garantisce che ogni blocco abbia parte del contesto del blocco precedente.

Dividi il testo con splitText() per restituire un array di stringhe con ogni blocco.

La finestra di contesto della maggior parte degli LLM è espressa come numero di token anziché come numero di caratteri. In media, un token contiene 4 caratteri, quindi puoi stimare il numero di token utilizzati da un input dividendo il numero di caratteri per 4.

Nel nostro esempio, chunkSize è composto da 3000 caratteri, ovvero circa 750 token.

Generare riepiloghi per ogni suddivisione

Una volta configurata la suddivisione dei contenuti, puoi generare i riepiloghi per ogni parte con l'API Summarizer.

Crea un'istanza del riepilogatore con la funzione create(). Per mantenere il contesto il più possibile, abbiamo impostato il parametro format su plain-text, type su tl;dr e length su long.

Quindi, genera il riepilogo per ogni suddivisione creata da RecursiveCharacterTextSplitter e concatena i risultati in una nuova stringa. Abbiamo separato ogni riepilogo con una nuova riga per identificare chiaramente il riepilogo di ogni parte.

Sebbene questa nuova riga non sia importante quando viene eseguito questo ciclo una sola volta, è utile per determinare in che modo ogni riepilogo si aggiunge al valore del token per il riepilogo finale. Nella maggior parte dei casi, questa soluzione dovrebbe funzionare per i contenuti di durata media e lunga.

Riepilogo ricorsivo dei riepiloghi

Quando il testo è eccessivamente lungo, la lunghezza del riepilogo concatenato potrebbe essere superiore alla finestra di contesto disponibile, causando il fallimento del riepilogo. Per risolvere il problema, puoi riepilogare in modo ricorsivo i riepiloghi.

Se il riepilogo dei riepiloghi è ancora troppo lungo, puoi ripetere la procedura. In teoria, puoi ripetere la procedura all'infinito finché non ricevi una durata appropriata.

Raccogliamo comunque le suddivisioni iniziali generate da RecursiveCharacterTextSplitter. Poi, nella funzione recursiveSummarizer(), eseguiamo il ciclo del processo di sintesi in base alla lunghezza dei caratteri delle suddivisioni concatenate. Se la lunghezza dei riepiloghi supera 3000, li concatenamo in fullSummaries. Se il limite non viene raggiunto, il riepilogo viene salvato come partialSummaries.

Una volta generati tutti i riepiloghi, i riepiloghi parziali finali vengono aggiunti al riepilogo completo. Se in fullSummaries è presente un solo riepilogo, non è necessaria alcuna re-creazione. La funzione restituisce un riepilogo finale. Se sono presenti più di un riepilogo, la funzione si ripete e continua a riepilogare i riepiloghi parziali.

Abbiamo testato questa soluzione con la RFC di Internet Relay Chat (IRC), che ha ben 110.030 caratteri, tra cui 17.560 parole. L'API Summarizer ha fornito il seguente riepilogo:

Internet Relay Chat (IRC) è un modo per comunicare online in tempo reale utilizzando messaggi di testo. Puoi chattare nei canali o inviare messaggi privati e utilizzare i comandi per controllare la chat e interagire con il server. È come una chat su internet in cui puoi digitare e vedere immediatamente i messaggi degli altri.

È molto efficace. Inoltre, è composto da soli 309 caratteri.

Limitazioni

La tecnica di riepilogo dei riepiloghi ti consente di operare all'interno della finestra di contesto di un modello di dimensioni del cliente. Sebbene esistano molti vantaggi per l'IA lato client, potresti riscontrare quanto segue:

  • Riassunti meno accurati: con la ricorsione, la ripetizione del processo di riassunto è potenzialmente infinita e ogni riassunto è più lontano dal testo originale. Ciò significa che il modello potrebbe generare un riepilogo finale troppo superficiale per essere utile.
  • Rendimento più lento: la generazione di ogni riepilogo richiede tempo. Anche in questo caso, con un numero infinito di possibili riepiloghi nei testi più lunghi, questo approccio potrebbe richiedere diversi minuti.

Abbiamo una demo del riepilogatore disponibile e puoi visualizzare il codice sorgente completo.

Condividi il tuo feedback

Prova a utilizzare la tecnica di riepilogo dei riepiloghi con testi di input di diverse lunghezze, dimensioni di suddivisione diverse e lunghezze di sovrapposizione diverse per determinare cosa funziona meglio per i tuoi casi d'uso.

Inizia subito a testare l'API Summarizer partecipando alla prova dell'origine e condividi il tuo feedback. Il tuo contributo può influire direttamente sul modo in cui sviluppiamo e implementiamo le versioni future di questa API e di tutte le API di IA integrate.