Cómo utilizar Gen AI para generar contenido de Marketing con PaLM API y Maker Suite

Nathaly Alarcón
LatinXinAI
Published in
8 min readSep 6, 2023
Tutorial on Youtube

La Inteligencia Artificial Generativa nos permite generar nuevo contenido creativo en texto, código, imágenes, etc. En esta ocasión, vamos a crear una aplicación web que nos permita crear contenido de marketing.

Para ello, vamos a utilizar las siguientes herramientas:

  • PaLM API: Es la interfaz que Google nos proporciona para acceder a los Large Language Models (LLM) más avanzados de la familia PaLM 2.
  • Maker Suite: Es una herramienta web que nos permite prototipar rápidamente aplicaciones haciendo uso de Generative Language Models.
  • Streamlit: Es un framework que nos permite crear sitios web usando Python.

Descripción de la aplicación web

Vamos a crear una aplicación para ayudar a promocionar cursos en línea. La aplicación se ha diseñado bajo el siguiente esquema:

Diseño de la Aplicación web .

La idea es que el usuario inserte el nombre del curso que desea promocionar, y automáticamente la API PaLM entregue el contenido de marketing creativo para promocionar el resultado en Twitter, LinkedIn, y nos dé las guías de diseño para poder crear un afiche o banner del curso.
Ok, manos a la obra. Procedamos a crear la aplicación

Paso 1. Crea tu PaLM API key.

En Maker Suite, dirígete al menú lateral, selecciona la opción “Get API Key” y luego haz clic en el botón “Create API key in new project”

Genera tu API Key y guárdala en algún lugar seguro. La vamos a necesitar en los próximos pasos.

Paso 2. Generemos el contenido de ejemplo para la promoción de un curso.

Del menú lateral seleccionamos la opción “Create New” y después seleccionamos “Text prompt”.

Ahora vamos a crear el contenido de ejemplo que necesitamos:

Para Twitter usaremos el siguiente prompt: “Write a tweet to promote a Python Course for Teenagers”, luego dale click a Run.

Prompt para obtener contenido de Redes Sociales

Puedes repetir el proceso hasta que el modelo retorne el contenido que más te guste.

Copia y guarda en un editor de texto el resultado que obtengas. Para este paso, también puedes usar Bard.

Sigue el mismo procedimiento para obtener ejemplos de promoción del curso en Linkedin y para las guías del banner. Puedes usar los siguientes prompts.

Para Linkedin: “Write a short LinkedIn post to promote a Python Course for Teenagers

Para el banner: “Generate guidelines to create a banner for a Python Course for Teenagers

Paso 3. Construyamos el Data Prompt

Vamos a estructurar el formato del output que necesitamos para la aplicación web. Del menú lateral, selecciona “Create New” y luego “Data Prompt”

Data Prompt Format en Maker Suite

Primero agregaremos el contexto para obtener mejores respuestas.

Contexto: We are an online academy that generates online courses, create formal marketing content

Para lograr cumplir con el formato del sitio web objetivo adicionaremos 3 columnas de Output: O_twitter, O_linkedin, O_banner. Nota que estamos utilizando en los nombres de los outputs el prefijo “O_”, esto nos servirá en como indicador para separar más adelante el resultado retornado por la API.

Estructura de Data Prompt para la aplicación Web

Copia en las columnas de Outputs el contenido que generaste en el paso previo. El data prompt en Maker Suite tendrá el siguiente aspecto:

Data Prompt para la aplicación web

Ahora probemos el resultado del Prompt que acabamos de configurar en Maker Suite. Generemos contenido para un nuevo curso, ejemplo: “Python for Finance”.

Prompt testing

Veamos el contenido generado para el nuevo curso :

¡Genial ! Ya tenemos el Prompt Configurado. Ahora vamos a exportar el código generado en Python. Para ello haz click en “Get code” y copia el código generado en editor de texto.

Paso 4. Analicemos el código generado en un Jupyter Notebook

Primero es necesario instalar e importar la librería google.generativeai, luego procedemos a configurar el API Key que generamos en el paso 1.

Configuración de PaLM Api en Python
  • La variable prompt: contiene el formato del prompt generado por Maker Suite. Como puedes ver, toda la tabla de prompt configurada ha sido traducida a un solo string, manteniendo los nombres de los outputs, en nuestro caso O_twitter, O_linkedin y O_banner.
Prompt generado en Python
  • Para poder hacer uso del resultado generado, solamente tomaremos el string resultante y le haremos un split por el prefijo que hemos configurado (“O_”) (Paso 6 en el notebook) y listo, ya tenemos en variables separadas los tres outputs configurados.

Puedes encontrar el código del notebook en el siguiente repositorio:

Paso 5. Crear la Aplicación Web con Streamlit

Instala en tu ambiente las librerías requeridas.

pip install streamlit 
pip install google.generativeai

Crea un archivo con el nombre app.py, Importa en el script las librerías de streamlit y google.generativeai, después adiciona tu PaLM API Key.

import streamlit as st
import google.generativeai as palm

# Adiciona tu PaLM API Key
palm.configure(api_key=“Add Your API Key here”)

A continuación, definamos el side bar de la aplicación, noten que solo estamos adicionando el input text para introducir el nombre del curso y un botón

st.set_page_config(layout="wide")

def inputs():
# Definimos en el panel lateral un formulario que tendrá los siguientes elementos:
# 1) Una caja de texto
# 2) Un botón
# En la caja de texto recibiremos el Nombre del curso como parte del prompt
# y con el botón llamaremos a PaLM API para generar el nuevo contenido.

st.sidebar.header("Marketing Content Generator")

prompt_input = st.sidebar.text_input("Prompt", placeholder = "Write the name of the course you want to promote", )
button = st.sidebar.button("Get Palm API response")

return prompt_input, button

Ahora vamos a definir una función para interactuar con PaLM API y obtener los 3 outputs deseados (twitter, LinkedIn y el contenido del banner)


def get_generative_data(prompt_input):
# Usamos como base el código que exportamos de Maker Suite
# Esta función recibe el Prompt del formulario definido en el panel lateral

defaults = {
'model': 'models/text-bison-001',
'temperature': 0.7,
'candidate_count': 1,
'top_k': 40,
'top_p': 0.95,
'max_output_tokens': 1024,
'stop_sequences': [],
'safety_settings': [{"category":"HARM_CATEGORY_DEROGATORY","threshold":1},{"category":"HARM_CATEGORY_TOXICITY","threshold":1},{"category":"HARM_CATEGORY_VIOLENCE","threshold":2},{"category":"HARM_CATEGORY_SEXUAL","threshold":2},{"category":"HARM_CATEGORY_MEDICAL","threshold":2},{"category":"HARM_CATEGORY_DANGEROUS","threshold":2}],
}

prompt = f"""We are an online academy that generates online courses, create formal marketing content
input: Basic Python for Teenagers.
O_twitter: Want to learn a new skill that will help you in your future career? Learn Python! Our Python for Teenagers course will teach you the basics of Python, so you can start coding today.
[Course link]
O_linkedin: Are you a teenager who wants to learn how to code? Python is a powerful programming language that can be used for a variety of tasks. Our Python for Teenagers course will teach you the basics of Python, so you can start coding today.

Enroll today and start learning Python!
O_banner: A relevant image or graphic, such as a computer screen with code being typed on it, or a group of teenagers working on a coding project.
A short, catchy phrase that summarizes the course, such as "Learn Python for Teenagers" or "Coding for the Future."
A call to action, such as "Enroll now" or "Learn more."
The course name, instructor, and start date.
The course logo or branding.
input: {prompt_input}
O_twitter:"""


# Llamamos a Palm API
response = palm.generate_text(
**defaults,
prompt=prompt
)
new_gen_content = response.result

# Vamos a dividir el resultado en los 3 outputs deseados.
splitted_res = new_gen_content.split("O_")
twitter_content = splitted_res[0]
linkedin_content = splitted_res[1]
banner_guidelines = splitted_res[2]

# Retornaremos 3 resultados (Twitter, LinkedIn y los lineamientos de creación del banner)
return twitter_content, linkedin_content, banner_guidelines

Listo , ya tenemos todo lo necesario. Ahora vamos a conectar el input y el botón con la función get_generative_data.

def main():
# Llamamos al formulario del sidebar
prompt_input, button = inputs()

if button:
# Cuando se hace click en el botón
# Mostraremos el texto del prompt introducido
st.header('Content Generated for Course: "'+prompt_input+'"', divider='rainbow')

# Llamamos a la función previamente definida para generar nuevo contenido a través de PaLM API
# Como resultado recibiremos 3 resultados: twitter, LinkedIn y los lineamientos para el banner
palm_res1, palm_res2, palm_res3 = get_generative_data(prompt_input)


# Ahora desplegamos los resultados :)
# Mostramos el Tweet
st.header('Twitter', divider='rainbow')
st.text(palm_res1)

# Mostramos el contenido generado para el post en Linkedin
st.header('LinkedIn Content', divider='rainbow')
st.text(palm_res2)

# Mostramos los lineamientos generados para construir el banner
st.header('Banner Guides', divider='rainbow')
st.text(palm_res3)

if __name__ == "__main__":
main()

Ejecuta la aplicación desde tu terminal con el siguiente comando:

streamlit run app.py

¡Listo! Ya creaste tu web app interactiva y puedes probar con los prompts que desees.

Web App creada con streamlit

Si quieres, puedes mejorar la aplicación adicionando más estilos, funcionalidades y outputs :)

Ejemplo de Web App con más contenido para redes sociales

Hemos utilizado Streamlit version 1.26.0. Encuentra el código de la app en el siguiente repositorio: https://github.com/nathalyAlarconT/PalmAPI_Sprint/blob/main/Marketing_Web_App/app.py

Y eso es todo. Gracias por llegar al final de esta guía.

Si te gustó, comparte esta guía para qué más gente pueda conocer e interactuar con estas sencillas herramientas.

LatinX in AI (LXAI) logo

Do you identify as Latinx and are working in artificial intelligence or know someone who is Latinx and is working in artificial intelligence?

Don’t forget to hit the 👏 below to help support our community — it means a lot!

--

--

Nathaly Alarcón
LatinXinAI

I code in my sleep - ♡ I love Coffee ♡ - Data Scientist — Google Developer Expert in Machine Learning - Google Cloud Champion Innovator