Langchain x OpenAI x Streamlit — Generador de canciones de rap🎙️
Langchain x OpenAI x Streamlit - Rap song generator 🎙️
Aprende cómo crear una aplicación web que integre el framework Langchain con el modelo GPT3 de Streamlit y OpenAI.

Streamlit 🔥
Streamlit es una biblioteca de Python de código abierto que facilita la creación y el intercambio de aplicaciones web personalizadas y hermosas para el aprendizaje automático y la ciencia de datos. En solo unos minutos, puedes construir y desplegar poderosas aplicaciones de datos.
Lo usaremos para crear una interfaz de usuario básica para nuestra aplicación y luego conectaremos los componentes de la interfaz de usuario para servir la respuesta de LLM a través de Langchain y el cliente de OpenAI. 🙌
Documentación de Streamlit
Langchain 🔗
Langchain es un framework para desarrollar aplicaciones impulsadas por modelos de lenguaje. Permite aplicaciones que son:
- Conscientes de los datos: conectar un modelo de lenguaje a otras fuentes de datos
- Agentes: permitir que un modelo de lenguaje interactúe con su entorno
Utilizaremos el framework de Langchain para construir cadenas utilizando tareas o instrucciones individuales. Un LLM procesará cada enlace en la cadena 🔗secuencialmente y esto nos permitirá ejecutar consultas más complejas a través del modelo. La salida de una instrucción se convertirá en entrada para la siguiente, y así sucesivamente.
- Mejores herramientas de mejora y aumento de imágenes con IA (2023)
- Piensa de esta manera y respóndeme Este enfoque de IA utiliza la es...
- Ajuste fino de modelos de difusión estables en CPUs de Intel
Documentación de Langchain
OpenAI | GPT3.5 🤖
El cliente de OpenAI de Langchain nos permitirá aprovechar el poder de sus modelos GPT de última generación. Utilizaremos el modelo ‘gpt-3.5-turbo’, pero puedes utilizar cualquier modelo que desees.
Aquí tienes una breve descripción del modelo que vamos a utilizar del sitio web de OpenAI:
El modelo GPT-3.5 más capaz y optimizado para chat a 1/10 del costo de
text-davinci-003
. Se actualizará con nuestra última iteración del modelo 2 semanas después de su lanzamiento.Máximo de 4,096 tokens
¡Lee más aquí!
🧑💻¡Comencemos con el código </>
Primero, sobre la aplicación —
Crearemos un Generador de Canciones de Rap. Esta será nuestra propia aplicación web impulsada por LLM.
Basado en un tema dado, generará un título de canción apropiado y también generará versos para ese título. Aquí tienes una demostración de la aplicación:

¿Emocionante? ¡Comencemos a construir!🧑🏻💻💪🏻
🙋🏻 Las declaraciones de importación y la configuración inicial —
Hay 3 paquetes principales que necesitamos para este proyecto. Instálalos y cualquier otro paquete si es necesario.
Después de eso, importaremos la API KEY y la estableceremos como una variable de entorno. Además, dado que hay varios modelos GPT que podemos elegir para nuestra aplicación, he definido el que quiero en una variable. Puedes cambiarlo según tus necesidades.
#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#import API key from config filefrom config import OPEN_API # environment variable & the model to usemodel_id = 'gpt-3.5-turbo'os.environ["OPENAI_API_KEY"] = OPEN_API
✒️ Elementos de la interfaz de usuario (streamlit) –
Streamlit tiene una API muy amigable que nos permite crear fácilmente una interfaz frontal para nuestras aplicaciones de ML/Ciencia de Datos.
En el código siguiente, primero creamos un título para nuestra aplicación y justo debajo tenemos una caja de entrada para el usuario donde ingresará un tema para la canción.
Después de eso, tenemos otros 2 encabezados, uno para el título que va a tener y otro para los versos. Cada uno de estos encabezados tiene sus propias cajas de salida, donde se adjuntarán las salidas una vez que se generen.
# título principal y la caja de entradast.title("🎙️ Generador de Canciones de Rap 🎙️🔥") prompt = st.text_input("¿Tema para la canción?") # segundo encabezado y el área de salida para el título de la canciónt.markdown("#### Título de la Canción")title_box = st.empty()# tercer encabezado y el área de salida para los versost.markdown("#### Versos")verse_box = st.empty()
Cuando se proporciona una entrada, se almacenará en la variable ‘prompt’. Esta variable se utilizará más tarde para generar la salida.
💥 Plantillas de Indicación, Cadenas y LLM (langchain, OpenAI) –
Ahora necesitamos crear plantillas tanto para la generación del título como para la generación de los versos.
- En la primera indicación, la entrada es el ‘tema’ que el usuario ingresó desde la interfaz. Este ‘tema’ se utilizará para formatear la cadena de la plantilla. Esta plantilla se utilizará para generar el ‘título’ de la canción.
- La segunda indicación utilizará el ‘título’ generado anteriormente como entrada y utilizará eso para formatear la segunda cadena de plantilla, que generará versos basados en este ‘título’ de entrada. La salida de esta plantilla (cadena) serán los ‘versos’.
Una vez que tengamos 2 plantillas, crearemos 2 cadenas para cada una de ellas. La primera cadena será la cadena del título y utilizará la plantilla del título.
De manera similar, la segunda cadena será la cadena de los versos y utilizará la plantilla de los versos.
La salida que obtendremos estará en formato de diccionario, por lo que para cada cadena, podemos especificar qué usar como clave. Esto se puede hacer estableciendo “output_key = algo” en ambas cadenas.
# plantilla de indicación para generar el títulotitle_template = PromptTemplate( input_variables = ["topic"], template = "generar un título de canción de rap sobre el tema: {topic}")# plantilla de indicación para generar los versosverse_template = PromptTemplate( input_variables = ["title"], template = "generar 2 versos que riman para una canción de rap titulada: {title}")# construyendo las cadenastitle_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") # combinando las cadenassequential_chain = SequentialChain( chains=[title_chain, verse_chain], input_variables=["topic"], output_variables=["title", "verse"], verbose=True,)
Al final, combinamos ambas cadenas y se ejecutarán de forma secuencial cuando iniciemos la ejecución. Las variables de entrada en esta cadena combinada serán [“topic”] y las variables de salida serán [“title”, “verse”] como se define al combinar las cadenas.
📺 Mostrando en la pantalla —
Una vez que tengamos la entrada del usuario, ejecutaremos la cadena combinada que acabamos de crear. Pasaremos la indicación como “topic” ya que ese es el nombre que definimos para nuestro parámetro “input_variables”.
La respuesta será un diccionario y podemos extraer el texto requerido de eso usando las claves que también definimos anteriormente en las variables ‘output_variables’ y ‘output_keys’.
# ejecutar las cadenas si se proporciona una indicaciónif prompt: response = sequential_chain({ "topic" : prompt }) title = response["title"] body = response["verse"] # mostrar cada salida en su propia caja de salidatitle_box.markdown(title) verse_box.markdown(body)
Para ejecutar la aplicación, usa el comando —
streamlit run filename.py
Eso es todo para este artículo. ¡Espero que haya valido la pena tu tiempo y sígueme para más actualizaciones en el futuro!
🖤 Gracias por leer, echa un vistazo a estas publicaciones relacionadas —
La adopción temprana de la IA generativa: abrazando oportunidades y mitigando riesgos
Vamos a explorar por qué las empresas están incorporando GAI en sus negocios a pesar de sus imperfecciones y cómo lo están haciendo…
krnk97.medium.com
Cómo crear un clon de YouTube — YouTube API
Cómo desarrollar una aplicación web de búsqueda de videos de YouTube utilizando HTML, CSS y JavaScript (jQuery) y la YouTube API.
enlear.academy