LangChain è un framework python open-source progettato per agevolare lo sviluppo di applicazioni basate sui large language model (LLM). Questo framework offre una serie di strumenti, componenti e interfacce che semplificano la costruzione di applicazioni basate sull'AI. In questo tutorial vedremo come realizzare un'applicazione elementare integrata con il modello llama3.
Cos’è LangChain?
Lanciato da Harrison Chase nel 2022, LangChain ha registrato una rapida ascesa alla notorietà, diventando il progetto open source in più rapida crescita su GitHub. Questo framework, agisce come un’interfaccia generica per quasi tutti gli LLM, offrendo un ambiente centralizzato per lo sviluppo di applicazioni LLM e la loro integrazione con fonti di dati esterne.
A differenza di Spring AI che abbiamo già presentato nei nostri precedenti articoli e che è ancora in beta, LangChain è ormai una soluzione stabile e completa che dispone di un ecosistema di tool integrati. La libreria core del frametwork viene infatti distribuita insieme ad altre componenti:
- Lang Smith: strumento di monitoraggio che consente l’osservabilità delle “chains” a runtime e per identificare eventuali potenziali miglioramenti.
- Lang Serve: server per deployare le proprie applicazioni basate su LLM trasformandole in “API”
- Librerie di terze parti: che consentono di integrare LangChain con strumenti esterni come OpenAI o Ollama.
Installazione di LangChain
Come prerequisito per questa guida, vi invitiamo a leggere il nostro articolo che spiega come far partire llama3 su Ollama. E’ inoltre necessario installare Python sul vostro dispositivo e scaricare la libreria LangChain lanciando il seguente comando in console:
pip install langchain
Una volta completato il download possiamo creare uno script Python elementare per un primo test:
from langchain_community.llms import Ollama
llm = Ollama(model="llama3")
out = llm.invoke("what is LangChain?")
print(out)
Lo script si compone di due semplici istruzioni:
- A linea 3 abbiamo istanziato il client Ollama e abbiamo specificato che vogliamo usare il modello “llama3”.
- Alla riga successiva abbiamo invocato l’LLM ponendogli la domanda “what is LangChain?”
Prima di eseguire il programma, bisogna assicurarsi che Ollama sia avviato in locale e che il modello llama3 sia stato scaricato. L’output dello script conterrà la risposta alla domanda “what is LangChain?”.
L’uso delle catene
LangChain utilizza un approccio modulare, rappresentando i processi complessi come componenti modulari. Questi componenti possono essere combinati e riutilizzati per creare applicazioni LLM personalizzate.
Le catene (chains) sono il fulcro dei workflow di LangChain. Una catena è una sequenza di azioni automatiche che vengono eseguite dall’inizio alla fine per ottenere un determinato risultato. Per fare un esempio definiremo un secondo script e questa volta faremo uso anche di un ChatPromptTemplate.
from langchain_community.llms import Ollama
from langchain_core.prompts import ChatPromptTemplate
llm = Ollama(model="llama3")
prompt = ChatPromptTemplate.from_messages([
("system", "You are a social media manager who writes social media posts on the topic provided as input."),
("user", "{input}")
])
chain = prompt | llm
out = chain.invoke({"input": "what is LangChain?"})
print(out)
Proviamo a commentare lo script andando in ordine:
- Prima di tutto abbiamo definito il connettore Ollama da usare come nell’esempio precedente.
- Successivamente, a riga 6 abbiamo creato un ChatPromptTemplate che permette di definire la struttura di una generica conversazione. In questo caso abbiamo usato un “system prompt” per impostare il comportamento dell’LLM e chiedergli di rispondere ad un input con un post da pubblicare sui social come se dovesse impersonificare un “social media manager”.
- Infine abbiamo combinato il primo blocco (LLM) con il secondo (ChatPromptTemplate) per eseguire una catena.
Di seguito il risultato ottenuto:
Ready to unlock new linguistic possibilities? Try LangChain today and start speaking like a native in no time! #LangChain #LanguageLearning #Travel #Business
Il contenuto della variabile “out” è un oggetto di tipo message. Per avere una stringa in output avremmo dovuto aggiungere un terzo blocco alla nostra chain usando uno StrOutputParser:
from langchain_community.llms import Ollama
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
...
output_parser = StrOutputParser()
chain = prompt | llm | output_parser
out = chain.invoke({"input": "what is LangChain?"})
print(out)
Questo nostro primo tutorial su LangChain finisce qui. Sperando che vi sia stato utile vi invito a leggere i prossimi articoli sullo stesso argomento.