Vai al contenuto principale

Introduzione al Prompt Engineering con LangChain

Scopri la potenza del prompt engineering in LangChain, una tecnica essenziale per ottenere risposte precise e pertinenti dai modelli di IA.
Aggiornato 29 set 2026  · 11 min leggi

Scopri con l'IA

ChatGPTClaudePerplexity

LangChain è un framework open source pensato per sviluppare applicazioni in modo semplice usando modelli linguistici come GPT, LLaMA, Mistral, ecc.

Una delle funzionalità più potenti di LangChain è il supporto per l’advanced prompt engineering. Per prompt engineering si intende la progettazione e l’ottimizzazione dei prompt per ottenere dal modello linguistico risposte il più accurate e pertinenti possibile.

In questo post vedremo le basi dei prompt, come LangChain li utilizza, i prompt template, la memoria, gli agent e le chain; per ognuno di questi concetti chiave esamineremo vari esempi di codice in Python, così che alla fine del tutorial tu sia a tuo agio nel creare applicazioni con il framework LangChain in Python.

Curioso di capire come usare LangChain e GPT per creare un semplice agente di IA? Dai un’occhiata al nostro Code-Along Prompt Engineering con GPT & LangChain:

Che cos’è il Prompt Engineering?

Immagine dell’autore

Abbiamo una guida completa su prompt engineering, ma come promemoria veloce: è la pratica di creare input testuali che comunichino in modo efficace con i modelli di IA generativa. Questi prompt, scritti in linguaggio naturale, specificano l’attività che vogliamo far svolgere all’IA.

Possono avere forme diverse, da domande semplici come chiedere la spiegazione di un teorema matematico a richieste più creative, ad esempio scrivere una poesia su un tema specifico.

Nel prompt engineering, la chiave non è solo cosa chiedi ma come lo chiedi. Questo può includere la scelta delle parole giuste, l’impostazione di un tono o stile particolare, la fornitura del contesto necessario o persino la definizione di un ruolo per l’IA, come chiederle di rispondere come se fosse un madrelingua di una certa lingua.

In alcuni casi, i prompt possono includere esempi per guidare il processo di apprendimento dell’IA. Questa tecnica, nota come few-shot learning, può essere particolarmente efficace per compiti complessi.

Quando si lavora con modelli che generano immagini o audio, i prompt di solito descrivono in dettaglio l’output desiderato, dal soggetto e dallo stile fino alla composizione e all’atmosfera del risultato finale. L’arte del prompt engineering sta nell’accordare questi elementi per guidare l’IA verso il risultato voluto.

Le basi dei Prompt

Immagine dell’autore

I prompt sono gli input forniti ai large language model (LLM) per ottenere una risposta desiderata. Prompt ben progettati sono fondamentali per ottenere output utili dagli LLM. L’obiettivo del prompt engineering è costruire con cura prompt che diano risposte accurate, pertinenti e utili.

Un buon prompt in genere contiene quattro componenti:

  1. Istruzioni - Dicono al modello cosa fare, come usare le informazioni fornite, cosa fare con la richiesta e come costruire l’output.
  2. Esempio di input - Fornisce input di esempio per mostrare al modello cosa ci si aspetta.
  3. Esempio di output - Fornisce i corrispondenti output di esempio.
  4. Query - L’input effettivo che vuoi far elaborare al modello.

A eccezione della query, tutto il resto è facoltativo ma può incidere molto sulla qualità della risposta, in particolare le istruzioni che guidano l’LLM sul compito e sull’output atteso.

Gli esempi mostrano il formato di output desiderato per un dato input di esempio.

La query è la domanda o richiesta rivolta all’LLM.

Costruire prompt efficaci significa combinare in modo creativo questi elementi in base al problema da risolvere.

Prompt in LangChain

LangChain offre varie classi e funzioni per aiutare a costruire e lavorare con i prompt, semplificando la gestione di compiti complessi che coinvolgono modelli linguistici.

LangChain fornisce supporto di prima classe al prompt engineering tramite l’oggetto `PromptTemplate`.

I prompt template fungono da guide strutturate per formulare query ai modelli linguistici.

In genere, questi template comprendono direttive, una selezione di input di esempio (few-shot examples) e domande e contesti adattati a compiti specifici.

L’obiettivo di LangChain è progettare template compatibili con vari modelli linguistici, facilitando il trasferimento dei template tra modelli diversi.

In breve, puoi usare la classe PromptTemplate per creare un template per un prompt testuale.

from langchain.prompts import PromptTemplate


prompt_template = PromptTemplate.from_template(
    "Tell me a {adjective} joke about {content}."
)
prompt_template.format(adjective="sad", content="data scientists")

Output:

>>> 'Tell me a sad joke about data scientists.'

Non è necessario avere una variabile. Puoi creare un prompt usando questa classe anche senza alcuna variabile.

from langchain.prompts import PromptTemplate
prompt_template = PromptTemplate.from_template("Tell me a joke")
prompt_template.format()

Output:

>>> 'Tell me a joke'

E se stessi costruendo un’app di chat in cui devi salvare e inviare la cronologia dei messaggi all’LLM ogni volta che l’utente invia un nuovo messaggio? Farlo manualmente richiede tempo.

Per i modelli di chat supportati, puoi invece usare ChatPromptTemplate:

from langchain.prompts import ChatPromptTemplate


chat_template = ChatPromptTemplate.from_messages(
    [
        ("system", "You are a helpful AI bot. Your name is {name}."),
        ("human", "Hello, how are you doing?"),
        ("ai", "I'm doing well, thanks!"),
        ("human", "{user_input}"),
    ]
)


messages = chat_template.format_messages(name="Bob", user_input="What is your name?")


print(messages)

Output:

>>> [SystemMessage(content='You are a helpful AI bot. Your name is Bob.'),

>>> HumanMessage(content='Hello, how are you doing?'),

>>> AIMessage(content="I'm doing well, thanks!"),

>>> HumanMessage(content='What is your name?')]

Ti starai chiedendo: perché abbiamo bisogno dei PromptTemplate? Perché non possiamo passare direttamente una stringa di prompt all’LLM? Ecco alcuni buoni motivi per usare i PromptTemplate di LangChain:

  • I prompt template sono riutilizzabili: puoi creare un prompt una volta e usarlo in più situazioni, ad esempio per riassumere articoli diversi senza riscriverlo ogni volta.
  • Separano la formattazione dei prompt dall’invocazione del modello, rendendo il codice più modulare e consentendo aggiornamenti indipendenti di template o modello.
  • Usare i template migliora la leggibilità del codice, perché incapsulano logiche complesse in un formato più semplice con variabili nominali più chiare.
  • La manutenzione è più semplice: le modifiche alla logica del prompt vanno fatte in un unico punto centrale, invece che in ogni prompt individuale.

Memoria in LangChain

Nelle applicazioni con funzionalità di chat basate su modelli linguistici, è importante che il sistema ricordi le conversazioni passate.

Come in una chat normale, il sistema dovrebbe poter riprendere ciò che è stato detto in precedenza.

Nel caso più semplice, questo significa che il sistema può vedere alcuni dei messaggi precedenti. Un sistema più avanzato ricorderà più dettagli, come fatti su vari argomenti e le loro connessioni.

Questa capacità di ricordare le chat passate è chiamata "memoria". LangChain aiuta ad aggiungere memoria a questi sistemi di chat.

Una memoria in LangChain fa due cose principali:

  1. Prima di inviare la query all’LLM, legge dalla memoria per arricchire il prompt iniziale ricevuto dall’utente.
  2. Una volta ottenuta la risposta dall’LLM, la scrive in memoria per interazioni future, prima di restituire l’output finale all’utente.

Memoria in LangChain (Fonte immagine)

Per usare la funzionalità Memory in LangChain puoi usare la classe ConversationBufferMemory.

from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory(return_messages=True)
memory.chat_memory.add_user_message("hi!")
memory.chat_memory.add_ai_message("what's up?")
memory.chat_memory.add_user_message("how are you doing?")
memory.chat_memory.add_ai_message("I am fine, thank you and you?")


# to check the variables history
memory.load_memory_variables({})

Output:

>>> {'history': [HumanMessage(content='hi!'),

>>> AIMessage(content="what's up?"),

>>> HumanMessage(content='how are you doing?'),

>>> AIMessage(content='I am fine, thank you and you?')]}

Restituisce un dizionario in cui la chiave predefinita è history. Questa chiave punta a un elenco di messaggi, che possono provenire da un umano (HumanMessage) o dall’LLM (AIMessage).

Chain in LangChain

Per compiti semplici, usare un singolo LLM (Large Language Model) funziona bene. Tuttavia, per compiti più complessi, di solito serve concatenare più passaggi e/o modelli.

Il modo legacy di usare le Chain in LangChain è tramite l’interfaccia Chain.

Il metodo più recente e consigliato è il LangChain Expression Language (LCEL). Anche se LCEL è preferibile per i nuovi progetti, il metodo Chain è ancora utile e supportato.

from langchain.llms import OpenAI
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.schema import StrOutputParser


model = ChatOpenAI(openai_api_key = “...”)


prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            "You're a expert data scientist and machine learning engineer who offer its expertise and responds to the point and accurately.",
        ),
        ("human", "{question}"),
    ]
)
runnable = prompt | model | StrOutputParser()


for chunk in runnable.stream({"question": "How is machine learning different than deep learning?"}):
    print(chunk, end="", flush=True)

Output:

>>> Machine learning and deep learning are subfields of artificial intelligence (AI) that involve training models to make predictions or decisions based on data. While there is an overlap between the two, they ……..

Il modo in cui viene creato runnable non è proprio standard in Python, ma questo | è un operatore pipe. Prompt | model | StrOutputParser() significa che il Prompt viene passato attraverso il model, e l’output di questo viene poi passato a StrOutputParser(). Ogni segmento della chain trasforma i dati in qualche modo.

Vuoi scoprire casi d’uso e applicazioni interessanti che si possono costruire con LangChain? Dai un’occhiata al nostro tutorial sui casi d’uso per Engineering e Data Application.

Agent in LangChain

Il concetto fondamentale degli agent riguarda l’uso di un modello linguistico per selezionare una serie di azioni.

A differenza delle chain, in cui la sequenza di azioni è predefinita e incorporata nel codice, gli agent usano un modello linguistico come strumento decisionale per identificare le azioni appropriate e il loro ordine.

Ci sono tre concetti chiave negli Agents di LangChain:

  1. Tools: Descrizioni degli strumenti a disposizione dell’LLM
  2. Input dell’utente: L’obiettivo di alto livello del compito
  3. Passi intermedi: Qualsiasi coppia (azione, output dello strumento) già eseguita per raggiungere l’input dell’utente

I tool rappresentano funzionalità che un agent può attivare. Due aspetti cruciali della progettazione dei tool includono:

  • Garantire che l’agent abbia accesso agli strumenti appropriati.
  • Definire gli strumenti in modo da massimizzarne l’utilità per l’agent.

Per varie attività di routine, un agent richiede una raccolta di tool interconnessi. Per questo, LangChain introduce il concetto di toolkit. LangChain offre un’ampia gamma di toolkit per iniziare.

Per saperne di più sugli Agent, consulta questa Guida ufficiale di LangChain.

Crediti: Alcuni esempi in questo blog sono stati generati usando la documentazione ufficiale di LangChain.

Conclusione

Offrendo un approccio strutturato alla progettazione dei prompt, LangChain non solo semplifica l’interazione con modelli linguistici diversi, ma massimizza anche l’efficienza e la pertinenza dei loro output. Funzionalità come PromptTemplate e Memory in LangChain dimostrano un’integrazione ponderata di flessibilità e precisione nel prompt engineering, adattandosi a un’ampia gamma di compiti, dalle richieste semplici a contesti conversazionali complessi.

Le funzionalità avanzate di Chains e Agents ampliano ulteriormente il potenziale delle applicazioni che si possono costruire con LangChain in poche righe di codice, con qualsiasi scelta di LLM sottostante — e le opzioni sono molte.

Sia per compiti semplici sia per applicazioni più articolate, l’approccio di LangChain al prompt engineering è piuttosto semplice, chiaro e facile da adottare.

Vuoi saperne di più? Dai un’occhiata alla parte 1 di Come costruire applicazioni LLM con LangChain su DataCamp.


Moez Ali's photo
Author
Moez Ali
LinkedIn
Twitter

Data Scientist, fondatore e creatore di PyCaret

Argomenti
Intelligenza artificiale

Scopri di più sugli LLM

Corso

Concetti sui Large Language Models (LLM)

2 ore
113.4K
Scopri il pieno potenziale degli LLM con il nostro corso concettuale su applicazioni, metodologie di training, aspetti etici e ultime ricerche.
Vedi i dettagliRight Arrow
Inizia Il Corso
Mostra altroRight Arrow
Correlato

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

Mostra AltroMostra Altro