Langchain x OpenAI x Streamlit – Generatore di canzoni rap 🎙️

Langchain x OpenAI x Streamlit - Rap Song Generator 🎙️

Scopri come creare un’app web che integra il framework Langchain con il modello Streamlit e GPT3 di OpenAI.

Immagine di Autore

Streamlit 🔥

Streamlit è una libreria open-source Python che semplifica la creazione e la condivisione di app web personalizzate e belle per il machine learning e la scienza dei dati. In pochi minuti puoi costruire e distribuire app dati potenti.

Lo useremo per creare un’interfaccia utente di base per la nostra app e poi collegheremo i componenti dell’interfaccia utente per servire la risposta LLM tramite Langchain e il client OpenAI. 🙌

Documentazione di Streamlit

Langchain 🔗

Langchain è un framework per lo sviluppo di applicazioni basate su modelli di linguaggio. Consente di creare applicazioni che sono:

  • Sensibili ai dati: collegare un modello di linguaggio ad altre fonti di dati
  • Agenti: permettere a un modello di linguaggio di interagire con il proprio ambiente

Useremo il framework Langchain per costruire catene utilizzando prompt/attività individuali. Un LLM (Language Learning Model) elaborerà ogni link nella catena 🔗 in modo sequenziale e ciò ci permetterà di eseguire query più complesse attraverso il modello. L’output di un prompt diventerà l’input del successivo, e così via.

Documentazione di Langchain

OpenAI | GPT3.5 🤖

Il client OpenAI di Langchain ci permetterà di sfruttare la potenza dei loro modelli GPT all’avanguardia. Useremo il modello ‘gpt-3.5-turbo’, ma puoi usare qualsiasi modello desideri.

Ecco una breve descrizione del modello che utilizzeremo dal sito web di OpenAI:

Modello GPT-3.5 più capace e ottimizzato per la chat al 10% del costo di text-davinci-003. Sarà aggiornato con la nostra ultima iterazione del modello 2 settimane dopo il suo rilascio.

4.096 token massimi

Leggi di più qui!

🧑‍💻Iniziamo con il codice </>

Prima di tutto, sull’app —

Crea un Generatore di Canzoni Rap. Questa sarà la nostra app web con LLM incorporato.

In base a un argomento dato, genererà un titolo di canzone appropriato e poi genererà anche le strofe per quel titolo. Ecco una demo dell’app:

demo del generatore di canzoni rap

Emozionante? Iniziamo a costruire!🧑🏻‍💻💪🏻

🙋🏻‍ Istruzioni di importazione e configurazione iniziale —

Ci sono 3 pacchetti principali di cui abbiamo bisogno per questo progetto. Installali e installa anche altri pacchetti se necessario.

Dopo di ciò, importeremo la chiave API e la impostiamo come variabile d’ambiente. Inoltre, poiché ci sono più modelli GPT tra cui scegliere per la nostra app, ho definito quello che voglio in una variabile. Puoi cambiarlo secondo le tue esigenze.

#pip3 install streamlit#pip3 install langchain#pip3 install openaiimport osimport streamlit as stfrom langchain.prompts import PromptTemplatefrom langchain.chains import LLMChain, SimpleSequentialChain, SequentialChainfrom langchain.chat_models import ChatOpenAI#importa la chiave API dal file di configurazionefrom config import OPEN_API                     # variabile d'ambiente e il modello da usaremodel_id = 'gpt-3.5-turbo'os.environ["OPENAI_API_KEY"] = OPEN_API

✒️ Elementi dell’interfaccia utente (streamlit) –

Streamlit ha un’API molto intuitiva che ci consente di creare facilmente un frontend per le nostre app di Machine Learning/Scienza dei Dati.

Nel codice qui sotto, abbiamo prima creato un titolo per la nostra app e subito sotto di esso abbiamo una casella di input per l’utente in cui inserirà un argomento per la canzone.

Dopo di ciò abbiamo altri 2 titoli, uno per il titolo della canzone e l’altro per i versi. Ciascuno di questi titoli ha le sue proprie caselle di output, a cui verranno allegati gli output una volta generati.

# titolo principale e casella di inputst.title("🎙️ Generatore di canzoni Rap 🎙️🔥")                                                                           prompt = st.text_input("Argomento per la canzone?")                                                               # secondo titolo e area di output per il titolo della canzonest.markdown("#### Titolo della canzone")title_box = st.empty()# terzo titolo e area di output per i versist.markdown("#### Versi")verse_box = st.empty()

Quando viene fornito un input, verrà memorizzato nella variabile “prompt”. Questa variabile verrà successivamente utilizzata per generare l’output.

💥 Modelli di prompt, Catene e LLM (langchain, OpenAI) –

Ora dobbiamo creare modelli di prompt sia per la generazione del titolo che per la generazione dei versi.

  • Nel primo prompt, l’input è l’argomento che l’utente ha inserito dall’interfaccia utente. Questo argomento verrà utilizzato per formattare la stringa di template. Questo template verrà utilizzato per generare il “titolo” della canzone.
  • Il secondo prompt utilizzerà il “titolo” generato in precedenza come input e utilizzerà tale input per formattare la seconda stringa di template, che genererà i versi basandosi su questo “titolo” di input. L’output di questa catena (template) saranno i “versi”.

Una volta che abbiamo 2 modelli di template, creeremo 2 catene per ciascuno di essi. La prima catena sarà la catena del titolo e utilizzerà il modello del titolo.

Allo stesso modo, la seconda catena sarà la catena dei versi e utilizzerà il modello dei versi.

L’output che otterremo sarà in formato dizionario, quindi per ciascuna catena possiamo specificare cosa utilizzare come chiave. Ciò può essere fatto impostando “output_key = qualcosa” su entrambe le catene.

# template di prompt per generare il titolotitle_template = PromptTemplate(                                                                        input_variables = ["topic"],    template = "genera un titolo di una canzone rap sull'argomento: {topic}")# template di prompt per generare i versiverse_template = PromptTemplate(                                                                        input_variables = ["title"],    template = "genera due versi che fanno rima per una canzone rap intitolata: {title}")# creazione delle catenestitle_chain = LLMChain(llm=llm, prompt=title_template, verbose=True, output_key="title")                                 verse_chain = LLMChain(llm=llm, prompt=verse_template, verbose=True, output_key="verse")                                    # combinazione delle catenesequential_chain = SequentialChain(    chains=[title_chain, verse_chain],     input_variables=["topic"],    output_variables=["title", "verse"],    verbose=True,)    

Alla fine, combiniamo entrambe le catene e verranno eseguite in sequenza quando avviamo l’esecuzione. Le variabili di input in questa catena combinata saranno [“topic”] e le variabili di output saranno [“title”, “verse”], come definite durante la combinazione delle catene.

📺 Output sullo schermo —

Una volta ottenuto l’input dall’utente, eseguiremo la catena combinata che abbiamo appena creato. Passeremo il prompt come “topic” poiché questo è il nome che abbiamo definito per il nostro parametro “input_variables”.

La risposta sarà un dizionario e possiamo estrarre il testo richiesto da esso utilizzando le chiavi che abbiamo definito in precedenza nelle variabili “output_variables” e “output_keys”.

# esegui le catene se viene fornito un promptif prompt:    response = sequential_chain({        "topic" : prompt    })        title = response["title"]    body = response["verse"]      # visualizza ogni output nella propria casella di output    title_box.markdown(title)    verse_box.markdown(body)

Per avviare l’applicazione, utilizzare il comando —

streamlit run filename.py

Questo è tutto per questo articolo. Spero che sia valsa la pena del tuo tempo e seguimi per ulteriori aggiornamenti futuri!

🖤 Grazie per la lettura, dai un’occhiata a questi post correlati —

L’adozione precoce dell’IA generativa: abbracciare opportunità e mitigare rischi

Esploriamo perché le aziende stanno incorporando l’IA generativa nei loro business nonostante le sue imperfezioni, e come lo stanno facendo…

krnk97.medium.com

Come creare un clone di YouTube – YouTube API

Come sviluppare una web app di ricerca video di YouTube utilizzando HTML, CSS e JavaScript (jQuery) e l’API di YouTube.

enlear.academy