Introduzione a LangChain

Guida pratica per iniziare con la libreria di orchestrazione per LLM

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

  1. Consulta la documentazione ufficiale: langchain.com
  2. Sperimenta con diversi modelli (OpenAI, Anthropic, Llama 2)
  3. Costruisci il tuo primo progetto (chatbot, RAG system, ecc.)
  4. Unisciti alla comunità su Discord e GitHub
  5. 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.