Corso
Le capacità dei large language model (LLM) come GPT-3 di OpenAI, BERT di Google e LLaMA di Meta stanno trasformando diversi settori consentendo di generare vari tipi di testo, dal contenuto di marketing al codice per data science fino alla poesia. Sebbene ChatGPT abbia attirato molta attenzione grazie alla sua interfaccia chat intuitiva, esistono numerose possibilità ancora poco esplorate per sfruttare gli LLM integrandoli in diverse applicazioni software.
Se ti affascinano i poteri trasformativi della Generative AI e degli LLM, questo tutorial fa per te. Qui esploriamo LangChain - un framework Python open-source per creare applicazioni basate su Large Language Models come GPT.
Scopri di più sulla creazione di applicazioni di IA con LangChain nel nostro Building Multimodal AI Applications with LangChain & the OpenAI API AI Code Along, dove imparerai a trascrivere i contenuti dei video YouTube con Whisper (speech-to-text) e poi usare GPT per fare domande sul contenuto.
Cosa sono i Large Language Models (LLM)?
I Large Language Models (LLM) sono sistemi avanzati di intelligenza artificiale progettati per comprendere e generare testo simile a quello umano. Questi modelli sono addestrati su enormi quantitativi di dati, il che consente loro di cogliere schemi complessi, comprendere le sfumature linguistiche e generare risposte coerenti. Gli LLM sono in grado di svolgere vari compiti legati al linguaggio, tra cui traduzione, completamento del testo, riassunto e persino interazioni conversazionali. GPT è un esempio di LLM.
Un LLM è un tipo di Generative AI. Se vuoi saperne di più sulla Generative AI e su come può potenziare la tua creatività, leggi i nostri blog su Usare la Generative AI per potenziare la tua creatività e il nostro podcast Inside the Generative AI Revolution. Puoi anche registrarti al nostro prossimo corso su Concetti sui Large Language Models.
Introduzione a LangChain
LangChain è un framework open-source progettato per facilitare lo sviluppo di applicazioni basate su large language model (LLM). Offre una suite di strumenti, componenti e interfacce che semplificano la costruzione di applicazioni incentrate sugli LLM. Con LangChain diventa semplice gestire le interazioni con i modelli linguistici, collegare senza soluzione di continuità componenti diversi e integrare risorse come API e database. Puoi leggere di più su LangChain per Data Engineering e applicazioni dati in un articolo dedicato.
La piattaforma LangChain include una raccolta di API che gli sviluppatori possono incorporare nelle loro applicazioni, consentendo di aggiungere capacità di elaborazione del linguaggio senza dover costruire tutto da zero. Pertanto, LangChain semplifica in modo efficiente il processo di creazione di applicazioni basate su LLM, rendendolo adatto a sviluppatori con livelli di esperienza diversi.
Applicazioni come chatbot, assistenti virtuali, strumenti di traduzione e strumenti di analisi del sentiment sono tutti esempi di app alimentate da LLM. Gli sviluppatori sfruttano LangChain per creare applicazioni personalizzate basate su modelli linguistici che rispondono a esigenze specifiche.
Con il continuo avanzamento e la più ampia adozione dell'elaborazione del linguaggio naturale, le potenziali applicazioni di questa tecnologia sono destinate a essere praticamente illimitate. Ecco alcune caratteristiche degne di nota di LangChain:
1. Prompt personalizzabili per soddisfare le tue esigenze specifiche
2. Creazione di componenti a catena per scenari d'uso avanzati
3. Integrazione di modelli per l'augmentazione dei dati e accesso a capacità di modelli linguistici di alto livello, come GPT e HuggingFace Hub.
4. Componenti versatili che permettono di combinare e abbinare in base alle necessità
5. Gestione del contesto per impostare e guidare il contesto, migliorando precisione e soddisfazione dell'utente
Configurare LangChain in Python
Installare LangChain in Python è piuttosto semplice. Puoi installarlo con pip o conda.
Installazione con pip
pip install langchain
Installazione con conda
install langchain -c conda-forge
Questo installerà le componenti di base di LangChain. Gran parte dell'utilità di LangChain si realizza quando viene integrato con vari provider di modelli, archivi dati e simili.
Per impostazione predefinita, le dipendenze necessarie per queste integrazioni NON sono incluse nell'installazione. Per installare tutte le dipendenze, puoi eseguire il comando seguente:
pip install langchain[all]
L'ultima opzione è compilare la libreria dal sorgente. In tal caso, puoi clonare il progetto dal suo repo GitHub.
Configurazione dell'ambiente
Usare LangChain richiede in genere integrazioni con vari provider di modelli, archivi dati, API e componenti simili. Come per qualsiasi integrazione, dobbiamo fornire le API key appropriate e pertinenti affinché LangChain funzioni. Ci sono due modi per farlo:
1. Impostare la chiave come variabile d'ambiente
OPENAI_API_KEY="..."
Se preferisci non impostare una variabile d'ambiente, puoi passare direttamente la chiave tramite il parametro denominato openai_api_key quando inizializzi la classe OpenAI LLM:
2. Impostare direttamente la chiave nella classe pertinente
from langchain.llms import OpenAI
llm = OpenAI(openai_api_key="...")
Componenti chiave di LangChain
LangChain si distingue per l'enfasi su flessibilità e modularità. Scompone la pipeline di elaborazione del linguaggio in componenti separati, consentendo agli sviluppatori di adattare i flussi di lavoro alle proprie esigenze. Questa adattabilità rende LangChain ideale per costruire applicazioni di IA in vari scenari e settori.
Componenti e chain
In LangChain, i componenti sono moduli che svolgono funzioni specifiche all'interno della pipeline di elaborazione del linguaggio. Questi componenti possono essere collegati in "chain" per flussi di lavoro su misura, ad esempio una chain per assistenza clienti con moduli per analisi del sentiment, riconoscimento dell'intento e generazione di risposte.
Template di prompt
I template di prompt sono prompt predefiniti e riutilizzabili tra le chain. Questi template possono diventare dinamici e adattabili inserendo specifici "valori". Ad esempio, un prompt che chiede il nome di un utente può essere personalizzato inserendo un valore specifico. Questa funzione è utile per generare prompt basati su risorse dinamiche.
Vector store
Servono per archiviare e cercare informazioni tramite embedding, analizzando essenzialmente rappresentazioni numeriche del significato dei documenti. Un VectorStore funge da archivio per questi embedding, consentendo ricerche efficienti basate sulla somiglianza semantica.
Index e retriever
Gli index agiscono come database che memorizzano dettagli e metadati sui dati di addestramento del modello, mentre i retriever cercano rapidamente in questo indice informazioni specifiche. Ciò migliora le risposte del modello fornendo contesto e informazioni correlate.
Output parser
Gli output parser entrano in gioco per gestire e affinare le risposte generate dal modello. Possono eliminare contenuti indesiderati, adattare il formato dell'output o aggiungere dati extra alla risposta. In questo modo aiutano a estrarre risultati strutturati, come oggetti JSON, dalle risposte del modello linguistico.
Example selector
Gli example selector in LangChain servono a identificare istanze appropriate dai dati di addestramento del modello, migliorando così la precisione e la pertinenza delle risposte generate. Questi selettori possono essere regolati per favorire determinati tipi di esempi o filtrare quelli non pertinenti, fornendo una risposta di IA su misura in base all'input dell'utente.
Agent
Gli agent sono istanze uniche di LangChain, ciascuna con prompt, memoria e chain specifici per un caso d'uso particolare. Possono essere distribuiti su varie piattaforme, tra cui web, mobile e chatbot, raggiungendo un pubblico ampio.
Come creare un'applicazione con Language Model in LangChain
LangChain fornisce una classe LLM progettata per interfacciarsi con vari provider di modelli linguistici, tra cui OpenAI, Cohere e Hugging Face. La funzionalità più basilare di un LLM è generare testo. È molto semplice creare un'applicazione con LangChain che prende un prompt in forma di stringa e restituisce l'output.
API_KEY ="..."
from langchain.llms import OpenAI
llm = OpenAI(model_name="text-ada-001", openai_api_key=API_KEY)
print(llm("Tell me a joke about data scientist"))
Output:
>>> "What do you get when you tinker with data? A data scientist!"
Nell'esempio sopra, stiamo usando il modello text-ada-001 di OpenAI. Se vuoi sostituirlo con un modello open-source da HuggingFace, è un cambiamento semplice:
API_KEY ="..."
from langchain import HuggingFaceHub
llm = HuggingFaceHub(repo_id = "google/flan-t5-xl", huggingfacehub_api_token = API_KEY)
print(llm("Tell me a joke about data scientist"))
Puoi ottenere il token id di Hugging Face Hub dal tuo account HF.
Se hai più prompt, puoi inviarne un elenco in una volta usando il metodo generate:
llm_response = llm.generate(['Tell me a joke about data scientist',
'Tell me a joke about recruiter',
'Tell me a joke about psychologist'])
Output:

Questa è l'app più semplice che puoi creare con LangChain. Prende un prompt, lo invia a un modello linguistico a tua scelta e restituisce la risposta. Ci sono molti parametri che puoi controllare, come `temperature`. Il parametro temperature regola la casualità dell'output ed è impostato a 0,7 per impostazione predefinita.
Gestire i template di prompt per gli LLM in LangChain
Gli LLM hanno API particolari. Anche se può sembrare intuitivo fornire prompt in linguaggio naturale, in realtà è necessario un certo adattamento del prompt per ottenere dall'LLM l'output desiderato. Questo processo di adattamento è noto come prompt engineering. Una volta che hai un buon prompt, potresti volerlo usare come template per altri scopi.
Un PromptTemplate in LangChain ti consente di usare il templating per generare un prompt. È utile quando vuoi usare la stessa struttura di prompt in più punti ma con alcuni valori cambiati.
USER_INPUT = 'Paris'
from langchain.llms import OpenAI
from langchain import PromptTemplate
llm = OpenAI(model_name="text-davinci-003", openai_api_key=API_KEY)
template = """ I am travelling to {location}. What are the top 3 things I can do while I am there. Be very specific and respond as three bullet points """
prompt = PromptTemplate(
input_variables=["location"],
template=template,
)
final_prompt = prompt.format(location=USER_INPUT )
print(f"LLM Output: {llm(final_prompt)}")
Output:
1. Climb the Eiffel Tower and take in the breathtaking views of the city
2. Enjoy a romantic cruise along the River Seine and admire the beautiful architecture along the riverbanks
3. Explore the Louvre and admire the world-renowned works of art on display
Se ora vuoi riutilizzare questo prompt per un'altra città, devi solo cambiare la variabile USER_INPUT. L'ho cambiata da Paris a Cancun, Mexico. Ecco come è cambiato l'output:
Output:
1. Relax on the Beach: Enjoy the white sand beaches and crystal-clear waters of the Caribbean Sea.
2. Explore the Mayan Ruins: Visit ancient archaeological sites such as Chichen Itza, Tulum, and Coba to learn about the history and culture of the Mayans.
3. Take a Food Tour: Taste the traditional flavors and learn about the local cuisine by taking a food tour of Cancun.
Combinare LLM e prompt in workflow multi-step
Nel contesto di LangChain, il chaining si riferisce all'integrazione degli LLM con altri elementi per costruire un'applicazione. Alcuni esempi includono:
- Combinare in sequenza più LLM usando l'output del primo LLM come input per il secondo (vedi questa sezione)
- Integrare gli LLM con template di prompt
- Unire gli LLM con dati esterni, ad esempio per il question answering
- Incorporare gli LLM con memoria a lungo termine, come la cronologia della chat
Vediamo un esempio del primo scenario in cui useremo l'output del primo LLM come input per il secondo.
from langchain.llms import OpenAI
from langchain.chains import LLMChain, SimpleSequentialChain
from langchain import PromptTemplate
llm = OpenAI(model_name="text-davinci-003", openai_api_key=API_KEY)
# first step in chain
template = "What is the most popular city in {country} for tourists? Just return the name of the city"
first_prompt = PromptTemplate(
input_variables=["country"],
template=template)
chain_one = LLMChain(llm = llm, prompt = first_prompt)
# second step in chain
second_prompt = PromptTemplate(
input_variables=["city"],
template="What are the top three things to do in this: {city} for tourists. Just return the answer as three bullet points.",)
chain_two = LLMChain(llm=llm, prompt=second_prompt)
# Combine the first and the second chain
overall_chain = SimpleSequentialChain(chains=[chain_one, chain_two], verbose=True)
final_answer = overall_chain.run("Canada")
Output:

In questo esempio creiamo una chain con due componenti. Il primo componente è responsabile di identificare la città più popolare corrispondente a un determinato paese inserito dall'utente. Il secondo componente, invece, si concentra nel fornire informazioni sulle tre principali attività o attrazioni disponibili per i turisti che visitano quella specifica città.
Se vuoi approfondire concetti più avanzati sulla creazione di applicazioni in LangChain, dai un'occhiata a questo live course su Building AI Applications with LangChain and GPT su DataCamp.
Conclusioni e approfondimenti
Solo poco tempo fa siamo rimasti tutti colpiti dalle straordinarie capacità di ChatGPT. Tuttavia, lo scenario si è evoluto rapidamente e ora abbiamo a disposizione nuovi strumenti per sviluppatori come LangChain che ci permettono di creare prototipi altrettanto notevoli sui nostri laptop personali in poche ore.
LangChain, un framework Python open-source, consente di creare applicazioni alimentate da LLM (Large Language Models). Questo framework offre un'interfaccia versatile a numerosi modelli fondamentali, facilitando la gestione dei prompt e fungendo da hub centrale per altri componenti come template di prompt, ulteriori LLM, dati esterni e altri strumenti tramite agent (al momento della scrittura).
Se stai cercando di tenere il passo con tutti i progressi nella Generative AI e negli LLM, guarda il nostro webinar Building AI Applications with LangChain and GPT. Qui imparerai le basi per usare LangChain nello sviluppo di applicazioni di IA, come strutturare un'app di IA e come effettuare l'embedding di dati testuali per alte prestazioni. Puoi anche consultare la nostra cheat sheet sul panorama degli strumenti di generative AI per esplorare le diverse categorie di strumenti, le loro applicazioni e il loro impatto in vari settori. Infine, dai un'occhiata al nostro elenco dei migliori LLM open-source per conoscere altri strumenti potenti.
FAQ
Che cos’è LangChain?
LangChain è un framework open-source progettato per facilitare lo sviluppo di applicazioni alimentate da large language model (LLM). Semplifica la costruzione di applicazioni incentrate sugli LLM fornendo strumenti, componenti e interfacce.
LangChain è gratuito?
Sì, LangChain è un framework gratuito e open-source, ma l'uso di alcuni LLM potrebbe richiedere un abbonamento.
LangChain può funzionare con diversi provider di modelli?
Sì, LangChain è compatibile con vari provider di modelli linguistici come OpenAI, Cohere e Hugging Face, offrendo flessibilità nello sviluppo delle applicazioni.
Come posso usare LangChain con i modelli OpenAI?
Dopo aver installato LangChain, puoi integrarlo con i modelli OpenAI configurando la tua OpenAI API key e usando le interfacce fornite per l'interazione con i modelli.
Come gestisco i template di prompt in LangChain?
LangChain usa PromptTemplate per gestire i template di prompt, consentendo prompt dinamici e riutilizzabili che possono essere adattati a casi d'uso specifici cambiando le variabili di input.
Che cos’è il chaining in LangChain?
Il chaining si riferisce all'integrazione degli LLM con altri elementi per costruire un'applicazione, ad esempio combinando in sequenza più LLM, integrando gli LLM con template di prompt o incorporando dati esterni.
LangChain può gestire documenti da varie fonti?
Sì, LangChain supporta document loader per molteplici fonti di dati, inclusi file di testo, CSV, PDF e piattaforme come Slack e Figma, da integrare nelle applicazioni LLM.


