Le complessità e le sfide dell’integrazione delle LLM nelle applicazioni

LLM integration complexities and challenges in applications

Pianificando di integrare un servizio LLM nel tuo codice? Ecco alcune delle sfide comuni che dovresti aspettarti durante il processo

Foto di Christina @ wocintechchat.com su Unsplash

I Large Language Models (LLM) esistevano già prima del rilascio di ChatGPT e GPT API di OpenAI. Ma, grazie agli sforzi di OpenAI, GPT è ora facilmente accessibile ai programmatori e ai non programmatori. Questo lancio ha sicuramente giocato un ruolo significativo nella recente rinascita dell’IA.

È davvero notevole quanto rapidamente l’API di GPT di OpenAI sia stata adottata solo sei mesi dopo il suo lancio. Praticamente ogni servizio SaaS lo ha incorporato in qualche modo per aumentare la produttività dei propri utenti.

Tuttavia, solo coloro che hanno completato il lavoro di progettazione e integrazione di tali API comprendono realmente le complessità e le nuove sfide che ne derivano.

Negli ultimi mesi, ho implementato diverse funzionalità che utilizzano l’API di GPT di OpenAI. Durante questo processo, ho affrontato diverse sfide che sembrano comuni per chiunque utilizzi l’API di GPT o qualsiasi altra API LLM. Elencandole qui, spero di aiutare i team di ingegneria a preparare e progettare correttamente le loro funzionalità basate su LLM.

Diamo un’occhiata ad alcuni degli ostacoli tipici.

Memoria Contestuale e Limitazioni di Contesto

Questa è probabilmente la sfida più comune di tutte. Il contesto per l’input di LLM è limitato. Recentemente, OpenAI ha rilasciato il supporto del contesto per 16K token e in GPT-4 la limitazione del contesto può raggiungere 32K, che corrisponde a un paio di pagine (ad esempio, se si desidera che LLM funzioni su un grande documento che contiene un paio di pagine). Ma ci sono molti casi in cui ne hai bisogno di più, specialmente quando si lavora con numerosi documenti, ognuno dei quali ha decine di pagine (immagina un’azienda legal-tech che deve elaborare decine di documenti legali per estrarre risposte utilizzando LLM).

Ci sono diverse tecniche per superare questa sfida e altre stanno emergendo, ma questo significherebbe che devi implementare una o più di queste tecniche tu stesso. Ancora un altro carico di lavoro da implementare, testare e mantenere.

Arricchimento dei Dati

Le funzionalità basate su LLM probabilmente richiedono qualche tipo di dato proprietario come input. Che tu stia inserendo dati utente come parte del contesto o utilizzando altri dati o documenti raccolti che possiedi, hai bisogno di un meccanismo semplice che astragga le chiamate per ottenere dati dalle varie fonti di dati che possiedi.

Creazione di Modelli

Il prompt che invii all’LLM conterrà testo codificato e dati da altre fonti di dati. Ciò significa che creerai un modello statico e riempirai dinamicamente gli spazi vuoti con i dati che dovrebbero far parte del prompt in fase di esecuzione. In altre parole, creerai modelli per i tuoi prompt e probabilmente ne avrai più di uno.

Ciò significa che dovresti utilizzare qualche tipo di framework per la creazione di modelli perché probabilmente non vuoi che il tuo codice sembri una serie di concatenazioni di stringhe.

Non è una grande sfida, ma un altro compito che dovrebbe essere considerato.

Testing e Fine-tuning

Per ottenere un livello soddisfacente di precisione dall’LLM, è necessario effettuare molti test (a volte si tratta solo di ingegneria del prompt con molti tentativi ed errori) e di affinamento basato sul feedback degli utenti.

Ci sono ovviamente anche test che vengono eseguiti come parte del CI per verificare che tutto l’integrazione funzioni correttamente, ma quella non è la vera sfida.

Quando parlo di Testing, intendo l’esecuzione ripetuta del prompt in un ambiente di prova per affinare i risultati per la precisione.

Per il testing, vorresti un metodo tramite il quale l’ingegnere di testing potrebbe modificare i modelli, arricchirli con i dati richiesti ed eseguire il prompt con LLM per verificare che otteniamo ciò che volevamo. Come si configura un tale framework di testing?

Inoltre, abbiamo bisogno di affinare costantemente il modello LLM ottenendo feedback dai nostri utenti riguardo alle uscite LLM. Come si configura un tale processo?

Caching

I modelli LLM, come il GPT di OpenAI, hanno un parametro per controllare la casualità delle risposte, permettendo all’IA di essere più creativa. Tuttavia, se stai gestendo richieste su larga scala, incorrerai in costi elevati sulle chiamate API, potresti raggiungere i limiti di rate e le prestazioni della tua app potrebbero degradare. Se alcuni input per il LLM si ripetono in diverse chiamate, potresti considerare di memorizzare nella cache la risposta. Ad esempio, gestisci 100.000 chiamate al tuo LLM-based feature. Se tutte queste chiamate attivano una chiamata API al provider LLM, i costi saranno molto elevati. Tuttavia, se gli input si ripetono (questo può potenzialmente accadere quando si utilizzano modelli e si alimentano con campi utente specifici), c’è una grande possibilità che tu possa salvare una parte dell’output pre-elaborato del LLM e servirlo dalla cache.

La sfida qui è costruire un meccanismo di caching per questo. Non è difficile implementarlo; aggiunge semplicemente un altro livello e una parte mobile che deve essere mantenuta e gestita correttamente.

Sicurezza e conformità

Sicurezza e privacy sono forse gli aspetti più sfidanti di questo processo: come possiamo garantire che il processo creato non causi perdita di dati e come possiamo assicurarci che non siano rivelate informazioni personali identificabili?

Inoltre, sarà necessario effettuare una revisione di tutte le azioni in modo che tutte le azioni possano essere esaminate per garantire che non si siano verificate perdite di dati o violazioni della politica sulla privacy.

Questa è una sfida comune per qualsiasi azienda di software che si basa su servizi di terze parti e deve essere affrontata anche qui.

Osservabilità

Come con qualsiasi API esterna che si utilizza, è necessario monitorare le sue prestazioni. Ci sono degli errori? Quanto tempo impiega l’elaborazione? Stiamo superando o siamo prossimi a superare i limiti di rate o le soglie dell’API?

Inoltre, vorrai registrare tutte le chiamate, non solo per scopi di revisione della sicurezza ma anche per aiutarti a perfezionare il flusso di lavoro o i prompt del LLM valutando gli output.

Gestione del flusso di lavoro

Supponiamo di sviluppare un software legale-tecnologico che gli avvocati utilizzano per aumentare la produttività. Nel nostro esempio, abbiamo una funzionalità basata su LLM che prende i dettagli di un cliente da un sistema CRM e la descrizione generale del caso su cui si sta lavorando e fornisce una risposta alla domanda dell’avvocato basata su precedenti legali.

Vediamo cosa deve essere fatto per realizzare questo:

  1. Ricerca di tutti i dettagli del cliente in base a un determinato ID cliente.
  2. Ricerca di tutti i dettagli del caso attuale su cui si sta lavorando.
  3. Estrarre le informazioni rilevanti dal caso attuale su cui si sta lavorando utilizzando LLM, in base alla domanda dell’avvocato.
  4. Combina tutte le informazioni sopra in un modello di domanda predefinito.
  5. Arricchisci il contesto con i numerosi casi legali. (ricorda la sfida della Memoria Contestuale)
  6. Fai in modo che il LLM trovi i precedenti legali che meglio corrispondono al caso attuale, al cliente e alla domanda dell’avvocato.

Ora, immagina di avere 2 o più funzionalità con tali flussi di lavoro e prova a immaginare com’è il tuo codice dopo aver implementato quei flussi di lavoro. Scommetto che solo pensare al lavoro da fare qui ti fa muovere scomodamente sulla sedia.

Per rendere il tuo codice manutenibile e leggibile, dovrai implementare vari livelli di astrazione e forse considerare l’adozione o l’implementazione di un qualche tipo di framework di gestione del flusso di lavoro, se prevedi altri flussi di lavoro in futuro.

E infine, questo esempio ci porta alla sfida successiva:

Accoppiamento forte del codice

Ora che sei consapevole di tutte le sfide sopra descritte e delle complessità che sorgono, potresti iniziare a vedere che alcune delle attività da svolgere non dovrebbero essere responsabilità dello sviluppatore.

In particolare, tutte le attività legate alla costruzione dei flussi di lavoro, al testing, al perfezionamento, al monitoraggio dei risultati e all’uso di API esterne possono essere svolte da qualcuno più dedicato a queste attività e la cui competenza non è la costruzione di software. Chiamiamo questa persona l’ingegnere LLM.

Non c’è motivo per cui i flussi di lavoro del LLM, il testing, il perfezionamento, ecc., dovrebbero ricadere sulla responsabilità dello sviluppatore di software: gli sviluppatori di software sono esperti nella costruzione di software. Allo stesso tempo, gli ingegneri LLM dovrebbero essere esperti nella costruzione e nel perfezionamento dei flussi di lavoro del LLM, non nella costruzione di software.

Tuttavia, con i framework attuali, la gestione dei flussi di lavoro del LLM è accoppiata nel codice sorgente. Chiunque stia costruendo questi flussi di lavoro deve avere le competenze di uno sviluppatore di software e di un ingegnere LLM.

Esistono modi per fare lo smistamento, come creare un micro-servizio dedicato che gestisce tutti i flussi di lavoro, ma questa è ancora un’altra sfida che deve essere affrontata.

Questi erano solo alcuni dei problemi.

Non ho affrontato come risolvere tutti questi problemi, perché sto ancora cercando di capirlo da solo. Posso dire però che LangChain sembra essere l’unico framework che in qualche modo si avvicina a risolvere questi problemi, lontano dal risolverli tutti, e sembra essere nella giusta direzione. Col passare del tempo, credo che i fornitori di LLM miglioreranno le loro offerte e forniranno piattaforme in grado di affrontare queste sfide in un certo modo.

Se hai altre sfide da condividere, per favore fallo nei commenti a beneficio degli altri lettori. Inoltre, se conosci strumenti che possono aiutare con queste sfide, per favore condividili anche nei commenti.

Spero che tu abbia trovato questo articolo interessante! Se lo hai fatto, per favore mostra il tuo apprezzamento aggiungendo un po’ di applausi e seguendomi per altri articoli su team building, ingegneria del software e tecnologia.