Migliorare l’ingegneria delle prompt per le applicazioni LLM con LangChain

Potenziare prompt engineering per LLM app con LangChain

Introduzione

Nell’era digitale, le applicazioni basate sul linguaggio svolgono un ruolo vitale nelle nostre vite, alimentando vari strumenti come chatbot e assistenti virtuali. Impara a padroneggiare l’ingegneria delle richieste per le applicazioni LLM con LangChain, un framework Python open-source che ha rivoluzionato la creazione di applicazioni all’avanguardia basate su LLM. Questa guida mira a dotare i lettori delle conoscenze e degli strumenti necessari per creare applicazioni linguistiche dinamiche e consapevoli del contesto utilizzando LangChain. Esploreremo la gestione delle richieste, sfruttando LLM aggiuntivi e dati esterni e padroneggiando l’incatenamento per applicazioni linguistiche sofisticate. Che tu sia un programmatore o un appassionato di intelligenza artificiale, questa guida ti aiuterà a sfruttare il potere del linguaggio e a trasformare le tue idee di applicazione LLM in realtà con LangChain.

Obiettivi di apprendimento

  • Comprendere i fondamenti di LangChain e le sue applicazioni.
  • Imparare tecniche efficaci di ingegneria delle richieste per migliorare le applicazioni basate su LLM.
  • Padroneggiare l’arte dell’incatenamento per creare applicazioni linguistiche intelligenti e consapevoli del contesto.
  • Creare applicazioni linguistiche reali utilizzando LangChain, applicando le conoscenze acquisite durante la guida.
  • Rimani aggiornato sulle ultime novità e sviluppi nell’ingegneria delle richieste e nelle applicazioni LLM.

Questo articolo è stato pubblicato come parte del Data Science Blogathon.

Cosa sono i Large Language Models (LLMs)?

I Large Language Models sono robusti sistemi AI costruiti su architetture di apprendimento profondo addestrati su enormi quantità di dati. Questi modelli possono comprendere schemi, sfumature e contesto del linguaggio complesso, rendendoli competenti nella traduzione linguistica, nella generazione di testo, nella sintesi e altro ancora. Un esempio importante di un LLM è il modello GPT (Generative Pre-trained Transformer) di OpenAI.

Cos’è LangChain?

LangChain è una piattaforma open-source completa che offre una serie di strumenti, componenti e interfacce per semplificare il processo di costruzione di applicazioni basate su grandi modelli linguistici. L’obiettivo principale della piattaforma è consentire agli sviluppatori di integrare senza soluzione di continuità le capacità di elaborazione del linguaggio nelle loro applicazioni senza partire da zero. LangChain fornisce un approccio user-friendly ed efficiente per la gestione delle interazioni con LLM, collegando in modo fluido diversi componenti e incorporando risorse come API e database.

Applicazioni di LangChain

LangChain, un framework open-source progettato per agevolare lo sviluppo di applicazioni basate su grandi modelli linguistici (LLMs), offre molte potenziali applicazioni nell’elaborazione del linguaggio naturale (NLP) e oltre. Ecco alcune delle applicazioni cruciali di LangChain:

  1. Chatbot e assistenti virtuali: LangChain consente agli sviluppatori di creare chatbot intelligenti e assistenti virtuali per intrattenere conversazioni in linguaggio naturale con gli utenti. Questi chatbot possono assistere gli utenti in varie attività, rispondere alle domande, fornire supporto clienti e offrire raccomandazioni personalizzate.
  2. Utilità di traduzione linguistica: Con LangChain, gli sviluppatori possono creare strumenti di traduzione linguistica che facilitano la comunicazione senza soluzione di continuità tra lingue diverse. Gli utenti possono inserire testo in una lingua e l’applicazione può generare traduzioni accurate nella lingua di destinazione desiderata.
  3. Strumenti di analisi del sentiment: LangChain può essere utilizzato per sviluppare applicazioni di analisi del sentiment che valutano emozioni e opinioni espresse nel testo. Le aziende possono utilizzare tali strumenti per comprendere il feedback dei clienti, analizzare il sentiment sui social media e monitorare la reputazione del marchio.
  4. Sintesi del testo: Gli sviluppatori possono sfruttare LangChain per creare applicazioni di sintesi del testo che generano automaticamente riassunti concisi di testi più lunghi. Questi strumenti di sintesi sono preziosi per estrarre rapidamente informazioni chiave da grandi volumi di testo.
  5. Generazione di contenuti: LangChain consente lo sviluppo di applicazioni di generazione di contenuti per produrre testi creativi e coerenti basati su prompt predefiniti. Ciò può essere utile nel marketing dei contenuti, nella scrittura creativa e nella generazione di messaggi personalizzati.

Configurazione di LangChain & OpenAI in Python

Installazione tramite pip

pip install langchain
pip install openai

Installazione tramite conda

conda install langchain -c conda-forge
conda install -c conda-forge openai

In questo modo verranno configurate le necessità di LangChain. Tuttavia, il vero potere e la versatilità di LangChain si realizzano quando viene integrato in modo fluido con diversi fornitori di modelli, archivi di dati e altri componenti essenziali.

Come creare un’applicazione di modellazione del linguaggio in LangChain?

LangChain fornisce una classe LLM per l’interfacciamento con vari fornitori di modelli di linguaggio, come OpenAI, Cohere e Hugging Face. La funzionalità più basilare di un LLM è la generazione di testo.

import os
os.environ["OPENAI_API_KEY"] = ""
  • La chiave API di OpenAI è un codice univoco che identifica le tue richieste all’API di OpenAI. Viene utilizzata per autenticare le tue richieste e controllare l’accesso all’API.
  • Per utilizzare l’API di OpenAI, devi creare un account e generare una chiave API. Una volta ottenuta la tua chiave API, puoi iniziare a effettuare richieste all’API.

Gestione dei modelli di promemoria per i LLM in LangChain

Il modulo OpenAI fornisce una classe che può essere utilizzata per accedere all’API di OpenAI. Il modulo LLMChain fornisce una classe che può concatenare più modelli di linguaggio.

Il codice crea quindi un’istanza della classe OpenAI e imposta il parametro di temperatura su 0.7. Il parametro di temperatura controlla la creatività del testo generato dall’API di OpenAI. Una temperatura più alta produrrà testo più creativo, mentre una temperatura più bassa produrrà testo più prevedibile.

from langchain.llms import OpenAI
from langchain.chains import LLMChain

llm = OpenAI(temperature=0.7)

Un PromptTemplate in LangChain consente di utilizzare il templating per generare un prompt. Questo è utile quando si utilizza lo stesso schema di prompt in più posizioni ma con determinati valori modificati.

from langchain import PromptTemplate

Prompt Template 1: Fai da Ruolo

Abbiamo impostato un LLMChain che funge da consulente finanziario in grado di spiegare i concetti di base dell’imposta sul reddito o qualsiasi altro concetto finanziario specificato dall’utente. Quando viene eseguita, la catena spiegherà facilmente il concetto finanziario.

template1 = '''Voglio che tu faccia da consulente finanziario per le persone.
In modo semplice, spiega i concetti di base di {concetto_finanziario}.'''

prompt1 = PromptTemplate(
    input_variables = ['concetto_finanziario'],
    template = template1
)

prompt1.format(concetto_finanziario='imposta sul reddito')

chain1 = LLMChain(llm=llm,prompt=prompt1)
chain1.run('imposta sul reddito')
Imposta sul reddito
chain1.run('PIL')
PIL

Prompt Template 2: Traduzione di lingua

Abbiamo impostato LLMChain in grado di tradurre una frase dall’inglese all’hindi e al francese. Quando viene eseguita, la catena prenderà la frase “Come stai?” e la lingua di destinazione ‘hindi’ e ‘francese’ come input, e il modello di linguaggio genererà l’output tradotto in hindi e francese come risposta.

template2='''In modo semplice, traduci la seguente frase '{frase}' in {lingua_destinazione}'''

language_prompt = PromptTemplate(
    input_variables = ["frase","lingua_destinazione"],
    template=template2
)

language_prompt.format(frase="Come stai",lingua_destinazione='hindi')

chain2 = LLMChain(llm=llm,prompt=language_prompt)

data = chain2({
    'frase':"Come ti chiami?",
    'lingua_destinazione':'hindi'
})

print("Frase in inglese:", data['frase'])
print("Lingua di destinazione:", data['lingua_destinazione'])
print("Testo tradotto:")
print(data['text'])
Hindi
data = chain2({
    'frase':"Ciao Come stai?",
    'lingua_destinazione':'francese'
})

print("Frase in inglese:", data['frase'])
print("Lingua di destinazione:", data['lingua_destinazione'])
print("Testo tradotto:")
print(data['text'])
Francese

Template 3: Guida di viaggio

Abbiamo creato un’applicazione basata su un modello di linguaggio che fornisce consigli di viaggio per l’India. Il modello di linguaggio risponderà con tre punti elenco di cose specifiche da fare durante un viaggio in India, basandosi sull’input fornito nel template di prompt.

template3 = """ Sto viaggiando a {location}. Quali sono le prime 3 cose che posso fare mentre sono lì.
Sii molto specifico e rispondi con tre punti elenco """


travel_prompt = PromptTemplate(
    input_variables=["location"],
    template=template3,
)

travel_prompt = travel_prompt.format(location='Parigi')

print(f"Output LLM: {llm(travel_prompt)}")
Viaggio in India

Combina LLM e Prompt in flussi di lavoro multi-step

Motore di ricerca delle celebrità

MS Dhoni

Gli utenti possono inserire il nome di una celebrità e l’applicazione fornirà informazioni dettagliate sulla celebrità, inclusa la data di nascita e gli eventi significativi di quel giorno.

# Catena 1: Parlami della celebrità
first_input_prompt = PromptTemplate(
    input_variables=['name'],
    template="Parlami della celebrità {name}"
)
chain1 = LLMChain(
    llm=llm,
    prompt=first_input_prompt,
    output_key='person'
)

# Catena 2: Data di nascita della celebrità
second_input_prompt = PromptTemplate(
    input_variables=['person'],
    template="quando è nato {person}"
)
chain2 = LLMChain(
    llm=llm,
    prompt=second_input_prompt,
    output_key='dob'
)

# Catena 3: 5 eventi principali di quel giorno
third_input_prompt = PromptTemplate(
    input_variables=['dob'],
    template="Menziona 5 eventi principali accaduti intorno a {dob} nel mondo"
)
chain3 = LLMChain(
    llm=llm,
    prompt=third_input_prompt,
    output_key='description'
)

# Combinazione delle catene
from langchain.chains import SequentialChain
celebrity_chain = SequentialChain(
    chains=[chain1, chain2, chain3],
    input_variables=['name'],
    output_variables=['person', 'dob', 'description']
)

data = celebrity_chain({'name':"MS Dhoni"})
print("Nome:", data['name'])
print("Data di nascita:", data['dob'])
print("Descrizione:")
print(data['person'])
print("Eventi storici:")
print(data['description'])
Descrizione
Eventi storici

Generatore di nomi per ristoranti

Gli utenti possono inserire un tipo di cucina e l’applicazione risponderà con un nome di ristorante suggerito per quella cucina e un elenco di piatti del menu per il ristorante suggerito.

# Catena 1: Nome del ristorante
prompt_template_name = PromptTemplate(
    input_variables=['cuisine'],
    template="Voglio aprire un ristorante di cucina {cuisine}. Suggerisci un nome elegante per questo."
)

name_chain = LLMChain(llm=llm, prompt=prompt_template_name, output_key="restaurant_name")

# Catena 2: Elementi del menu
prompt_template_items = PromptTemplate(
    input_variables=['restaurant_name'],
    template="""Suggerisci alcuni elementi del menu per {restaurant_name}. Restituiscili come una stringa separata da virgole"""
)

food_items_chain = LLMChain(llm=llm, prompt=prompt_template_items, output_key="menu_items")

# Combinazione delle catene
from langchain.chains import SequentialChain
restaurant_chain = SequentialChain(
    chains=[name_chain, food_items_chain],
    input_variables=['cuisine'],
    output_variables=['restaurant_name', "menu_items"]
)

data = restaurant_chain({'cuisine':'indiana'})
print("Cucina:", data['cuisine'])
print("Nome del ristorante:", data['restaurant_name'])
print("Elementi del menu:")
print(data['menu_items'])
Ristorante

Conclusion

In conclusione, LangChain ha rivoluzionato il mondo dei Modelli di Linguaggio, fornendo agli sviluppatori un framework Python open-source per costruire facilmente applicazioni all’avanguardia supportate da Grandi Modelli di Linguaggio (LLM). La sua integrazione senza soluzione di continuità con modelli fondamentali e fonti di dati esterne, insieme al supporto per la gestione dei suggerimenti e i template, semplifica il processo di sviluppo e favorisce la creatività. Dai chatbot agli assistenti virtuali e alle utility di traduzione linguistica, LangChain offre una piattaforma robusta che accelera lo sviluppo dei progetti e stimola l’innovazione nel campo dell’elaborazione del linguaggio naturale.

Principali Punti Chiave

  • LangChain, un framework Python open-source, permette agli sviluppatori di creare applicazioni all’avanguardia supportate da Grandi Modelli di Linguaggio (LLM).
  • L’integrazione senza soluzione di continuità con modelli fondamentali e fonti di dati esterne potenzia le capacità delle applicazioni linguistiche.
  • Le tecniche di ingegneria dei suggerimenti efficaci consentono agli sviluppatori di personalizzare i LLM per compiti specifici, creando applicazioni linguistiche consapevoli del contesto.
  • LangChain accelera lo sviluppo dei progetti, stimolando l’innovazione nell’elaborazione del linguaggio naturale e aprendo infinite possibilità per le applicazioni linguistiche.

Il codice e l’implementazione sono stati caricati su Github nel repository LangChain.

Spero che tu abbia trovato utile questo articolo. Collegati con me su LinkedIn.

Domande Frequenti

Il media mostrato in questo articolo non è di proprietà di Analytics Vidhya ed è utilizzato a discrezione dell’autore.