1. Cos'è LangChain?
LangChain è un framework open-source progettato per semplificare lo sviluppo di applicazioni basate su Large Language Models (LLM) come OpenAI, Anthropic e Hugging Face.
Invece di costruire connessioni complicate tra diversi componenti, LangChain fornisce:
- Chat Models - interfaccia unificata per diversi provider LLM
- Prompt Templates - template riusabili per prompt strutturati
- Chains - sequenze di operazioni collegate insieme
- Agents - LLM autonomi che usano tool e decidono le azioni
- Retrievers - ricerca di documenti per il contesto
- Memory - mantenimento della storia conversazionale
Il vantaggio principale: Puoi costruire applicazioni sofisticate con poche linee di codice, concentrandoti sulla logica piuttosto che sull'infrastruttura.
Casi d'uso reali
- Chatbot intelligenti e assistenti virtuali
- Analisi e summarizzazione di documenti
- Ricerca semantica e RAG (Retrieval-Augmented Generation)
- Automazione di flussi di lavoro multi-step
- Sistemi di Q&A con knowledge base personalizzate
2. Requisiti di Ambiente
Prerequisiti
- Python 3.8+ - LangChain è una libreria Python
- pip - gestore pacchetti Python
- API Key - da almeno un provider LLM (OpenAI, Anthropic, ecc.)
Installazione base
pip install langchain
Dipendenze comuni
A seconda del tuo caso d'uso, installa anche:
# Per OpenAI
pip install openai
# Per gestione documenti e vettori
pip install pypdf faiss-cpu
# Per database vettoriali
pip install chroma
# Per Hugging Face
pip install huggingface-hub
Configurazione API
Imposta le variabili d'ambiente con le tue chiavi API:
export OPENAI_API_KEY="sk-your-key-here"
export ANTHROPIC_API_KEY="your-key-here"
Consiglio: Crea un file
.env nel tuo progetto e usa python-dotenv per caricarlo automaticamente.
3. Iniziamo a Scrivere Codice
Il primo esempio: Chat semplice
Ecco il codice minimo per interagire con un LLM:
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage
# Inizializza il modello
llm = ChatOpenAI(model_name="gpt-4.1-mini", temperature=0.7)
# Invia un messaggio
response = llm.invoke([HumanMessage(content="Cosa è LangChain?")])
# Stampa la risposta
print(response.content)
Con Prompt Templates
Rendi i prompt riusabili e dinamici:
from langchain.prompts import ChatPromptTemplate
template = ChatPromptTemplate.from_template(
"Spiega {topic} in modo semplice per un {audience}"
)
prompt = template.format_messages(
topic="machine learning",
audience="principiante"
)
response = llm.invoke(prompt)
print(response.content)
Chains: Sequenze di operazioni
Collega prompt, modello e output parser:
from langchain.schema.output_parser import StrOutputParser
template = ChatPromptTemplate.from_template(
"Crea 3 nomi per una startup che fa {business}"
)
chain = template | llm | StrOutputParser()
result = chain.invoke({"business": "e-commerce di frutta biologica"})
print(result)
Nota: La sintassi
| è la nuova pipe API di LangChain (v0.1+). È una forma elegante di composizione.
4. Esempio Didattico Completo
Creiamo un assistente Q&A su documenti personali:
from langchain.chat_models import ChatOpenAI
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.prompts import PromptTemplate
# 1. Carica un documento
loader = PyPDFLoader("mio_documento.pdf")
documents = loader.load()
# 2. Dividi il testo in chunk
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
# 3. Crea embeddings e vector store
embeddings = OpenAIEmbeddings()
vector_store = FAISS.from_documents(docs, embeddings)
# 4. Configura il retriever
retriever = vector_store.as_retriever(search_kwargs={"k": 3})
# 5. Crea il prompt personalizzato
template = """Usa i seguenti pezzi di contesto per rispondere alla domanda.
Se non conosci la risposta, dì semplicemente che non lo sai.
{context}
Domanda: {question}
Risposta:"""
prompt = PromptTemplate(
template=template,
input_variables=["context", "question"]
)
# 6. Assembla la chain
llm = ChatOpenAI(model_name="gpt-4.1-mini", temperature=0)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=retriever,
chain_type_kwargs={"prompt": prompt}
)
# 7. Fai domande
result = qa_chain.run("Quali sono i punti principali del documento?")
print(result)
Cosa fa questo codice
| Passaggio | Descrizione |
|---|---|
| 1. Carica documento | Legge il PDF e lo divide in documenti |
| 2. Split testo | Divide il contenuto in chunk gestibili (1000 caratteri) |
| 3. Embeddings | Converte il testo in vettori numerici per la ricerca semantica |
| 4. Vector Store | Memorizza gli embeddings per ricerche veloci |
| 5. Retriever | Trova i 3 chunk più rilevanti per la domanda |
| 6. RetrievalQA | Combina il retriever con l'LLM per generare risposte accurate |
Varianti interessanti
- Agents - Aggiungi tool come calcolatrice, web search
- Memory - Mantieni la storia della conversazione
- Streaming - Ricevi le risposte token per token
- Custom Tools - Crea funzioni personalizzate per l'agente
5. Conclusioni
Punti chiave
- LangChain abstrae la complessità di lavorare con LLM
- Permette di costruire applicazioni sofisticate rapidamente
- Supporta composizione modulare (chains, agents, retrievers)
- Integra molteplici provider e strumenti in modo seamless
- La comunità è attiva e la documentazione è in continuo miglioramento
Prossimi passi
- Consulta la documentazione ufficiale: langchain.com
- Sperimenta con diversi modelli (OpenAI, Anthropic, Llama 2)
- Costruisci il tuo primo progetto (chatbot, RAG system, ecc.)
- Unisciti alla comunità su Discord e GitHub
- Approfondisci Agents e Tool Use per automazione avanzata
Ricorda: LangChain è uno strumento potente, ma il valore reale viene dall'architettura della tua soluzione e da come integri i componenti per risolvere problemi reali.
LangChain continua a evolversi. Consulta sempre la versione più recente della documentazione per le API aggiornate.