Cos'è LangChain?
I grandi modelli di linguaggio (LLM) hanno rivoluzionato il modo in cui interagiamo con la tecnologia, aprendo nuove frontiere per l'automazione e l'intelligenza artificiale. Tuttavia, lo sviluppo di applicazioni che sfruttano appieno il loro potenziale può essere complesso. È qui che entra in gioco LangChain, un framework che mira a semplificare e accelerare questo processo.
Che cos'è LangChain?
LangChain è un framework di orchestrazione open source progettato per facilitare lo sviluppo di applicazioni che utilizzano i grandi modelli di linguaggio (LLM). Disponibile come librerie basate su Python e Javascript, LangChain offre una serie di strumenti e API che snelliscono notevolmente il processo di creazione di applicazioni pilotate da LLM, come chatbot e agenti IA.
Fungendo da interfaccia generica per quasi tutti gli LLM esistenti, LangChain fornisce un ambiente di sviluppo centralizzato. Questo permette ai programmatori non solo di costruire applicazioni LLM, ma anche di integrarle con fonti di dati esterne e con i tradizionali workflow software. L'approccio modulare di LangChain è un vantaggio significativo: sviluppatori e data scientist possono confrontare dinamicamente diversi prompt, e persino diversi modelli di fondazione, con una riscrittura minima del codice. L'ambiente modulare supporta anche programmi che si basano su più LLM, ad esempio, un'applicazione che usa un LLM per interpretare le richieste dell'utente e un altro per generare la risposta.
La crescita e l'impatto di LangChain
Lanciato da Harrison Chase nell'ottobre 2022, LangChain ha rapidamente guadagnato una popolarità straordinaria. Già a giugno 2023, era riconosciuto come il progetto open source con la crescita più rapida su Github. Il suo successo è stato amplificato dal lancio massivo di ChatGPT di OpenAI il mese successivo, quando LangChain ha giocato un ruolo cruciale nel rendere l'IA generativa accessibile a entusiasti e startup, contribuendo alla sua diffusione capillare. I progressi nell'accessibilità dell'IA agentica stanno attualmente scatenando una vera e propria rivoluzione nell'automazione.
LangChain facilita un'ampia gamma di casi d'uso che coinvolgono gli LLM e il trattamento automatico del linguaggio naturale (TAL). Tra questi, spiccano:
- Chatbot
- Ricerca intelligente
- Risposta alle domande
- Servizi di sintesi
- Agenti IA che consentono l'automazione robotizzata dei processi (RPA)
L'importanza dell'integrazione con gli LLM
Gli LLM, per loro natura, non sono applicazioni autonome. Per realizzare il loro pieno potenziale, questi modelli statistici pre-addestrati devono essere associati a un'applicazione e, in molti casi, a specifiche fonti di dati. Ad esempio, Chat-GPT non è un LLM in sé, ma un'applicazione chatbot che, a seconda della versione, si basa sui modelli di linguaggio GPT-3.5 o GPT-4. Mentre il modello GPT interpreta l'input dell'utente e compone una risposta in linguaggio naturale, è l'applicazione che fornisce un'interfaccia per l'utente, consente l'input e la lettura, e definisce l'esperienza utente (UX) complessiva del chatbot. Anche in ambito aziendale, Chat-GPT non è l'unica applicazione che si basa sul modello GPT; Microsoft, per esempio, sfrutta GPT-4 per alimentare Bing Chat.
Inoltre, sebbene i modelli di fondazione (come quelli che alimentano gli LLM) siano pre-addestrati su immensi dataset, non sono onniscienti. Se un compito specifico richiede l'accesso a informazioni contestuali molto particolari, come documentazione interna aziendale o competenze settoriali specifiche, gli LLM devono essere collegati a queste fonti di dati esterne. Allo stesso modo, se si desidera che il modello rifletta in tempo reale gli eventi attuali, avrà bisogno di informazioni esterne, poiché i suoi dati interni sono aggiornati solo fino al periodo del pre-addestramento.
Infine, se un determinato compito di IA generativa richiede l'accesso a workflow software esterni (ad esempio, se si desidera che il proprio agente conversazionale si integri con Slack), l'LLM dovrà essere integrato con l'API di quel software. Sebbene queste integrazioni possano essere realizzate manualmente tramite codice, i framework di orchestrazione come LangChain e il portafoglio di prodotti di intelligenza artificiale IBM watsonx semplificano notevolmente il processo. Diventa anche più semplice provare diversi LLM per confrontare i risultati, poiché i vari modelli possono essere interscambiati con una modifica minima del codice.
Come funziona LangChain?
Al centro di LangChain c'è un ambiente di sviluppo progettato per ottimizzare la programmazione di applicazioni LLM attraverso l'astrazione. L'astrazione consiste nel semplificare il codice rappresentando uno o più processi complessi come un componente nominato che racchiude tutti i suoi passaggi. Intrinsicamente legata al linguaggio, l'astrazione fa parte della nostra vita quotidiana. Ad esempio, "π" ci permette di rappresentare il rapporto tra la circonferenza di un cerchio e il suo diametro senza dover scrivere il suo numero infinito di decimali. Allo stesso modo, un termostato ci permette di controllare la temperatura nella nostra casa senza dover comprendere i circuiti complessi associati; basta sapere a quali temperature corrispondono le sue diverse impostazioni.
LangChain è essenzialmente una libreria di astrazioni per Python e Javascript, che rappresenta i passaggi e le nozioni comuni necessarie per l'utilizzo dei modelli di linguaggio. Questi componenti modulari, come funzioni e classi di oggetti, costituiscono gli elementi fondamentali dei programmi di IA generativa. Possono essere "incatenati" (da cui il nome "LangChain", che significa catena linguistica) per creare applicazioni, e quindi permettono di ridurre la quantità di codice e le competenze richieste per realizzare compiti TAL complessi. Sebbene l'approccio astratto di LangChain limiti il grado di personalizzazione delle applicazioni, permette sia agli esperti che ai novizi di sperimentare e accelerare la prototipazione.
Importazione dei modelli di linguaggio
Quasi tutti gli LLM possono essere utilizzati in LangChain. L'importazione dei modelli di linguaggio in LangChain è semplice, a condizione di disporre di una chiave API. La classe LLM fornisce un'interfaccia standard per tutti i modelli.
La maggior parte dei fornitori di LLM richiederà la creazione di un account per ricevere una chiave API. Alcune di queste API, in particolare quelle destinate a modelli proprietari a sorgente chiusa, come quelle offerte da OpenAI o Anthropic, possono comportare dei costi. Tuttavia, molti modelli open source, come LLaMa di Meta AI, Deepseek-LLM di Deepseek, Granite di IBM e Flan-T5 di Google, sono accessibili tramite Hugging Face. Grazie alla sua partnership con Hugging Face, IBM watsonx offre anche una suite di modelli open source rigorosamente selezionati. Creando un account presso uno di questi due servizi, è possibile generare una chiave API per il modello desiderato.
LangChain non si limita ai modelli di fondazione pronti all'uso: la classe CustomLLM permette di creare wrapper LLM personalizzati. È inoltre possibile utilizzare le API di IBM watsonx e l'SDK Python, che include un'integrazione LangChain, per creare applicazioni in LangChain utilizzando modelli che sono stati già addestrati o finemente sintonizzati sulle proprie esigenze, grazie alla classe WatsonxLLM (e all'ID associato al progetto).
Modelli di prompt
I prompt sono le istruzioni fornite a un LLM. L'"arte" di redigere prompt efficaci, che forniscano all'LLM il contesto necessario per interpretare gli input e strutturare gli output secondo le proprie esigenze, è generalmente definita prompt engineering.
La classe PromptTemplate di LangChain formalizza la scrittura dei prompt senza la necessità di codificare manualmente il contesto e le query. Gli elementi importanti del prompt vengono anche inseriti come classi formali come input_variables.
Un modello di prompt può quindi contenere e riprodurre elementi quali:
- Un contesto specifico.
- Istruzioni (come "non usare termini tecnici").
- Un insieme di esempi per guidare le risposte (nel contesto di quello che viene chiamato "apprendimento few-shot").
- Un formato di output specificato.
- Una domanda standardizzata a cui rispondere.
Questi modelli di prompt, efficacemente strutturati, possono essere salvati, nominati e riutilizzati secondo necessità. Sebbene tutti questi elementi possano essere codificati manualmente, i moduli PromptTemplate consentono un'integrazione fluida con altre funzionalità di LangChain, rendendo il processo molto più efficiente e replicabile.