Come far giocare i grandi modelli di linguaggio con il tuo software utilizzando LangChain

Come far interagire i grandi modelli linguistici con il tuo software utilizzando LangChain

 

I modelli di grandi dimensioni del linguaggio (LLM) come GPT-3 di OpenAI, BERT di Google e LLaMA di Meta stanno rivoluzionando vari settori con la loro capacità di generare una vasta gamma di testi, dalla copia di marketing agli script di data science, fino alla poesia.

Anche se l’interfaccia intuitiva di ChatGPT è riuscita a essere presente nella maggior parte dei dispositivi oggi, c’è ancora un vasto territorio di potenzialità inesplorate nell’utilizzo degli LLM nelle integrazioni software.

Il problema principale?

La maggior parte delle applicazioni richiede una comunicazione più fluida e naturale con gli LLM.

E qui entra in gioco LangChain!

Se sei interessato all’AI generativa e agli LLM, questo tutorial è su misura per te.

Allora… iniziamo!

 

Cosa sono gli LLM?

 

Nel caso tu stia vivendo in una grotta e non ti sia arrivata nessuna notizia ultimamente, spiegherò brevemente cos’è un Large Language Model o LLM.

Un LLM è un sofisticato sistema di intelligenza artificiale costruito per imitare la comprensione e la generazione di testi simili a quelli umani. Allenandosi su enormi set di dati, questi modelli individuano modelli complessi, comprendono sottigliezze linguistiche e producono risultati coerenti.

Se ti chiedi come interagire con questi modelli basati su AI, ci sono due modi principali per farlo:

  1. Il modo più comune e diretto è parlare o chattare con il modello. Questo comporta la creazione di una richiesta, l’invio al modello basato sull’AI e la ricezione di una risposta sotto forma di testo.
  2. Un altro metodo è convertire il testo in matrici numeriche. Questo processo comporta la composizione di una richiesta per l’AI e la ricezione di una matrice numerica in cambio. Comunemente noto come “embedding”. Ha conosciuto una recente esplosione nei database vettoriali e nella ricerca semantica.

E sono proprio questi due problemi principali che LangChain cerca di affrontare. Se sei interessato ai principali problemi nell’interazione con gli LLM, puoi leggere questo articolo qui.

 

LangChain e i suoi fondamenti

 

LangChain è un framework open-source costruito attorno agli LLM. Porta in tavola un arsenale di strumenti, componenti e interfacce che semplificano l’architettura delle applicazioni basate su LLM.

Con LangChain, l’interazione con i modelli di linguaggio, il collegamento di componenti diversi e l’incorporazione di risorse come API e database diventa un gioco da ragazzi. Questo framework intuitivo semplifica notevolmente il percorso di sviluppo delle applicazioni basate su LLM.

L’idea centrale di LangChain è che possiamo collegare insieme componenti o moduli diversi, noti anche come catene, per creare soluzioni basate su LLM più sofisticate.

Ecco alcune delle caratteristiche salienti di LangChain:

  1. Schemi di richiesta personalizzabili per standardizzare le interazioni.
  2. Componenti di collegamento delle catene adattati a casi d’uso complessi.
  3. Integrazione senza soluzione di continuità con i principali modelli di linguaggio, inclusi gli GPT di OpenAI e quelli su HuggingFace Hub.
  4. Componenti modulari per un approccio di mix-and-match per affrontare qualsiasi problema o attività specifica.

  

LangChain si distingue per il suo focus sull’adattabilità e sul design modulare.

L’idea principale dietro LangChain è suddividere la sequenza di elaborazione del linguaggio naturale in parti individuali, consentendo agli sviluppatori di personalizzare i flussi di lavoro in base alle proprie esigenze.

Tale versatilità posiziona LangChain come la scelta ideale per la creazione di soluzioni di intelligenza artificiale in diverse situazioni e settori.

Alcuni dei suoi componenti più importanti sono…

 

 

1. LLM

 

Gli LLM sono componenti fondamentali che sfruttano un’enorme quantità di dati di addestramento per comprendere e generare testi simili a quelli umani. Sono al centro di molte operazioni all’interno di LangChain, fornendo le necessarie capacità di elaborazione del linguaggio per analizzare, interpretare e rispondere all’input di testo.

Utilizzo: Alimentazione di chatbot, generazione di testo simile a quello umano per varie applicazioni, supporto al recupero di informazioni e svolgimento di altre elaborazioni linguistiche

 

2. Modelli di prompt

 

I prompt sono fondamentali per interagire con LLM e, quando si lavora su compiti specifici, la loro struttura tende ad essere simile. I modelli di prompt, che sono prompt predefiniti utilizzabili su catene, permettono la standardizzazione dei “prompts” aggiungendo valori specifici. Questo migliora l’adattabilità e la personalizzazione di qualsiasi LLM.

Utilizzo: Standardizzare il processo di interazione con LLM.

 

3. Parsers di output

 

I parser di output sono componenti che prendono l’output grezzo da uno stadio precedente nella catena e lo convertono in un formato strutturato. Questi dati strutturati possono poi essere utilizzati in modo più efficace negli stadi successivi o consegnati come risposta all’utente finale.

Utilizzo: Ad esempio, in un chatbot, un parser di output potrebbe prendere la risposta testuale grezza da un modello di lingua, estrarre informazioni chiave e formattarle in una risposta strutturata.

 

4. Componenti e catene

 

In LangChain, ogni componente agisce come un modulo responsabile di un determinato compito nella sequenza di elaborazione del linguaggio. Questi componenti possono essere collegati per formare catene per flussi di lavoro personalizzati.

Utilizzo: Generare catene di rilevamento del sentiment e generatori di risposte in un chatbot specifico.

 

5. Memoria

 

La memoria in LangChain si riferisce a un componente che fornisce un meccanismo di archiviazione e recupero delle informazioni all’interno di un flusso di lavoro. Questo componente permette l’archiviazione temporanea o persistente dei dati che possono essere accessibili e manipolati da altri componenti durante l’interazione con LLM.

Utilizzo: È utile in scenari in cui i dati devono essere conservati attraverso diversi stadi di elaborazione, ad esempio, archiviare la cronologia delle conversazioni in un chatbot per fornire risposte consapevoli del contesto.

 

6. Agenti

 

Gli agenti sono componenti autonomi in grado di compiere azioni basate sui dati che elaborano. Possono interagire con altri componenti, sistemi esterni o utenti per svolgere compiti specifici all’interno di un flusso di lavoro LangChain.

Utilizzo: Ad esempio, un agente potrebbe gestire interazioni utente, elaborare richieste in arrivo e coordinare il flusso di dati attraverso la catena per generare risposte appropriate.

 

7. Indici e recuperatori

 

Gli indici e i recuperatori svolgono un ruolo cruciale nella gestione e nell’accesso efficiente dei dati. Gli indici sono strutture dati che contengono informazioni e metadati dai dati di addestramento del modello. D’altra parte, i recuperatori sono meccanismi che interagiscono con questi indici per recuperare dati rilevanti basandosi su criteri specificati e consentire al modello di dare risposte migliori fornendo contesto pertinente.

Utilizzo: Sono strumentali nel recuperare rapidamente dati o documenti rilevanti da un dataset di grandi dimensioni, cosa essenziale per compiti come il recupero di informazioni o la risposta a domande.

 

8. Trasformatori di documenti

 

In LangChain, i trasformatori di documenti sono componenti specializzati progettati per elaborare e trasformare documenti in modo che siano adatti per ulteriori analisi o elaborazioni. Queste trasformazioni possono includere attività come la normalizzazione del testo, l’estrazione delle caratteristiche o la conversione del testo in un formato diverso.

Utilizzo: Preparazione dei dati testuali per fasi di elaborazione successive, come l’analisi mediante modelli di apprendimento automatico o l’indicizzazione per un recupero efficiente.

 

9. Modelli di incorporamento

 

Sono utilizzati per convertire i dati testuali in vettori numerici in uno spazio ad alta dimensionalità. Questi modelli catturano le relazioni semantiche tra parole e frasi, consentendo una rappresentazione leggibile dalle macchine. Formano la base per vari compiti di elaborazione del linguaggio naturale (NLP) nell’ecosistema LangChain.

Utilizzo: Agevolare ricerche semantiche, confronti di similarità e altri compiti di apprendimento automatico fornendo una rappresentazione numerica del testo.

 

10. Archivi di vettori

 

Tipo di sistema di database specializzato per archiviare e cercare informazioni tramite incorporamenti, analizzando essenzialmente rappresentazioni numeriche di dati simili al testo. VectorStore funge da struttura di archiviazione per questi incorporamenti.

Utilizzo: Consente una ricerca efficiente basata sulla similarità semantica.

 

Configurazione e primi esempi

 

Installazione tramite PIP

 

La prima cosa da fare è assicurarci di avere LangChain installato nel nostro ambiente. 

pip install langchain

 

 

Configurazione ambientale

 

Utilizzare LangChain significa tipicamente integrarsi con fornitori di modelli differenti, archivi di dati, API, tra gli altri componenti. E come già sapete, come ogni integrazione, fornire le chiavi API rilevanti e corrette è cruciale per il funzionamento di LangChain. 

Immaginate che vogliamo utilizzare la nostra API OpenAI. Possiamo facilmente realizzare ciò in due modi:

  1. Configurando la chiave come variabile di ambiente
OPENAI_API_KEY="..."

 

import osos.environ['OPENAI_API_KEY'] = “...”

 

Se scegliete di non impostare una variabile di ambiente, avete l’opzione di fornire direttamente la chiave tramite il parametro denominato openai_api_key all’avvio della classe OpenAI LLM:

  1. Impostare direttamente la chiave nella classe pertinente.
from langchain.llms import OpenAIllm = OpenAI(openai_api_key="...")

 

LangChain in azione

 

Passare da un LLM all’altro diventa semplice

 

LangChain fornisce una classe LLM che ci consente di interagire con diversi fornitori di modelli linguistici, come OpenAI e Hugging Face. 

È abbastanza facile iniziare con un qualsiasi LLM, poiché la funzionalità più basilare e più facile da implementare di un LLM è semplicemente generare testo. 

Tuttavia, chiedere la stessa richiesta a diversi LLM contemporaneamente non è così facile. 

Ed ecco dove entra in gioco LangChain…

Tornando alla funzionalità più semplice di qualsiasi LLM, possiamo facilmente costruire un’applicazione con LangChain che prende una stringa di richiesta e restituisce l’output del nostro LLM designato. Codice dell’autore

Possiamo semplicemente utilizzare la stessa richiesta e ottenere la risposta di due modelli diversi con poche righe di codice!

Codice dell’autore

Impressionante… vero?

 

Dare struttura alle nostre richieste con modelli di richiesta

 

Un problema comune con i modelli linguistici (LLM) è la loro incapacità di gestire applicazioni complesse. LangChain affronta questo problema offrendo una soluzione per semplificare il processo di creazione delle richieste, che spesso è più complicato della semplice definizione di un compito in quanto richiede l’outline della personalità dell’intelligenza artificiale e la garanzia di accuratezza dei fatti. Una parte significativa di tutto ciò riguarda il testo boilerplate ripetitivo. LangChain rende più facile tale processo offrendo modelli di richiesta, che auto-includono il testo boilerplate nelle nuove richieste, semplificando così la creazione delle richieste e garantendo una coerenza tra diversi compiti.

Codice dell’autore

 

Ottenere risposte strutturate con parser di output

 

Nelle interazioni basate su chat, l’output del modello è semplicemente testo. Tuttavia, all’interno delle applicazioni software, è preferibile avere un output strutturato in quanto consente ulteriori azioni di programmazione. Ad esempio, quando si genera un dataset, si desidera ricevere la risposta in un formato specifico come CSV o JSON. Assumendo che una richiesta possa essere creata per ottenere una risposta coerente e nel formato appropriato dall’intelligenza artificiale, è necessario disporre di strumenti per gestire questo output. LangChain si occupa di questa esigenza offrendo strumenti di parser di output per gestire ed utilizzare l’output strutturato in modo efficace.

Codice dell’autore

Puoi controllare tutto il codice sul mio GitHub.

 

Conclusioni

 

Non molto tempo fa, le capacità avanzate di ChatGPT ci hanno lasciato a bocca aperta. Tuttavia, l’ambiente tecnologico è in continua evoluzione e ora strumenti come LangChain sono a portata di mano, permettendoci di creare straordinari prototipi dal nostro computer personale in poche ore.

LangChain, una piattaforma Python liberamente disponibile, fornisce un mezzo per gli utenti di sviluppare applicazioni basate su LLM (Language Model Models). Questa piattaforma offre un’interfaccia flessibile a una varietà di modelli fondamentali, semplificando la gestione delle istruzioni e fungendo da punto di convergenza per elementi come modelli di istruzioni, ulteriori LLM, informazioni esterne e altre risorse tramite agenti, come documentato attualmente.

Immaginate chatbot, assistenti digitali, strumenti di traduzione del linguaggio e utilità di analisi del sentiment; tutte queste applicazioni abilitate da LLM prendono vita con LangChain. Gli sviluppatori utilizzano questa piattaforma per creare soluzioni di modelli di linguaggio su misura che rispondono a requisiti specifici.

Alla luce dell’espansione del campo del processing del linguaggio naturale e del suo sempre più profondo utilizzo, il campo delle sue applicazioni sembra illimitato.

[Josep Ferrer](https://www.linkedin.com/in/josep-ferrer-sanchez) è un ingegnere analitico di Barcellona. Si è laureato in ingegneria fisica ed attualmente lavora nel campo della scienza dei dati applicata alla mobilità umana. È un creatore di contenuti a tempo parziale focalizzato sulla scienza dei dati e sulla tecnologia. Puoi metterti in contatto con lui su LinkedIn, Twitter o VoAGI.