Spaces:
Running
Running
from dotenv import load_dotenv | |
import streamlit as st | |
import os | |
import google.generativeai as genai | |
# Cargar las variables de entorno | |
load_dotenv() | |
# Configurar la API de Google | |
genai.configure(api_key=os.getenv("GOOGLE_API_KEY")) | |
# Fórmulas con ejemplos y explicaciones | |
benefits_formulas = { | |
"GPS": { | |
"description": """ | |
Crea bullets de beneficios que respondan estas tres preguntas clave: | |
1. ¿Qué es lo que el lector quiere conseguir? | |
2. ¿En qué periodo de tiempo quiere conseguirlo? | |
3. ¿Cuál es la objeción principal del lector que le impide lograrlo? | |
""", | |
"examples": [ | |
"Obtén tus primeros 100 clientes en 30 días, sin gastar un solo centavo en publicidad.", | |
"Pierde esos 5 kilos en solo 10 minutos al día, sin dejar de disfrutar tus comidas favoritas.", | |
"Ahorra para salir de viaje en tres meses, sin sacrificar esas noches de cine." | |
] | |
}, | |
"Númerica Suprema": { | |
"description": """ | |
La Fórmula Suprema de Istvanova combina 5 elementos clave más artículos plurales para crear bullets persuasivos: | |
1. **Artículos Plurales** (Art): | |
- Los (para masculino plural) | |
- Las (para femenino plural) | |
- Dan naturalidad y autoridad al texto | |
- Ejemplos: "Los 7 métodos...", "Las 3 técnicas..." | |
2. **Números** (N): | |
- Específicos y creíbles (3, 5, 7, 10...) | |
- Crean estructura y expectativas claras | |
- Se combinan con artículos: "Los 5...", "Las 3..." | |
3. **Adjetivo** (A): | |
- Emocionales y descriptivos | |
- Conectan con deseos/miedos | |
- Ejemplos: poderosos, simples, efectivos, revolucionarios | |
4. **Palabra Clave** (P): | |
- Término central del beneficio en plural | |
- Fácil de entender y recordar | |
- Ejemplos: métodos, estrategias, técnicas, secretos | |
5. **Razón** (R): | |
- Justifica el beneficio | |
- Añade credibilidad | |
- Conecta con la motivación del lector | |
6. **Promesa** (P): | |
- Resultado específico y medible | |
- Timeframe realista | |
- Beneficio final atractivo | |
Formatos: | |
- Corto: Art plural + N + A + P + P | |
- Medio: Art plural + N + A + P + R + P | |
- Largo: Art plural + N + A + P + R detallada + P específica | |
""", | |
"examples": [ | |
"Los 3 rituales probados para dormir mejor.", | |
"Las 5 rutinas efectivas para fortalecer tu core.", | |
"Los 7 hábitos esenciales para aumentar productividad.", | |
"Las 3 técnicas comprobadas para dormir mejor basadas en neurociencia.", | |
"Los 5 movimientos efectivos para fortalecer tu core sin equipamiento.", | |
"Las 7 estrategias esenciales para aumentar productividad sin estrés.", | |
"Los 3 métodos científicos para dormir mejor basados en los últimos descubrimientos de la neurociencia del sueño que transformarán tus noches.", | |
"Las 5 secuencias efectivas para fortalecer tu core descubiertas por fisioterapeutas olímpicos que puedes hacer en casa.", | |
"Los 7 sistemas revolucionarios para aumentar productividad desarrollados por CEOs que duplicarán tus resultados." | |
], | |
"variaciones_estructura": { | |
"básica": "Art plural + N + A + P + P", | |
"intermedia": "Art plural + N + A + P + R + P", | |
"avanzada": "Art plural + N + A + P + R detallada + P específica" | |
}, | |
"uso_articulos_plurales": { | |
"masculino_plural": { | |
"artículo": "los", | |
"ejemplos_palabras": "métodos, sistemas, pasos, secretos, trucos, hábitos" | |
}, | |
"femenino_plural": { | |
"artículo": "las", | |
"ejemplos_palabras": "técnicas, estrategias, rutinas, tácticas, claves" | |
} | |
}, | |
"consejos_uso": [ | |
"Usa siempre la forma plural para mayor impacto", | |
"Alterna entre 'los' y 'las' según la palabra clave", | |
"Mantén coherencia en el género a lo largo del bullet", | |
"Combina artículos con números de forma natural", | |
"Asegura que la palabra clave esté en plural" | |
] | |
}, | |
"AIDA": { | |
"description": """ | |
La fórmula AIDA se aplica de manera flexible y estratégica, combinando 1-4 elementos para crear bullets impactantes y naturales: | |
1. **Atención** (A): | |
Ganchos de apertura poderosos: | |
- "¿Sabías que...?" + dato sorprendente | |
- Mini-historia disruptiva | |
- Idea contraintuitiva | |
- Descubrimiento inesperado | |
- Analogía poderosa | |
- "La mayoría no sabe que..." | |
- "Contrario a lo que piensas..." | |
- "Me sorprendió descubrir que..." | |
2. **Interés** (I): | |
Desarrollo del gancho inicial: | |
- Detalles específicos y relevantes | |
- Conexión problema-solución inesperada | |
- Beneficios únicos y memorables | |
- Puente situación actual-resultado | |
- "La razón es simple..." | |
- "Lo fascinante es que..." | |
- "Y lo mejor de todo..." | |
- "Lo que hace la diferencia es..." | |
3. **Deseo** (D): | |
Amplificación emocional: | |
- Imagen vivida del resultado | |
- Experiencia personalizada | |
- Prueba social natural | |
- Toque de exclusividad | |
- Conexión emocional profunda | |
- "Imagina poder..." | |
- "Piensa cómo sería..." | |
- "Esto significa que podrás..." | |
4. **Acción** (A): | |
Cierre natural: | |
- Siguiente paso simple | |
- Baja fricción para comenzar | |
- Gratificación inmediata | |
- Primer paso sencillo | |
- Seguridad fluida | |
- "Pruébalo hoy mismo..." | |
- "Comienza con un simple..." | |
- "Solo necesitas..." | |
Combinaciones estratégicas: | |
- A + I: Para despertar curiosidad y explicar el valor | |
- A + D: Para conectar problema con deseo | |
- I + D: Para construir deseo desde la lógica | |
- I + D + A: Para construir convicción y motivar | |
- A + I + D: Para educar, intrigar y crear anhelo | |
Cada bullet debe mantener un tono conversacional y evitar parecer una fórmula obvia. | |
""", | |
"examples": [ | |
"• Un estudio con deportistas de élite reveló algo sorprendente los atletas que menos entrenaban tenían mejores resultados. La clave está en un ritual de recuperación de 8 minutos que ahora puedes usar en casa.", # A (dato sorprendente) + I (conexión problema-solución) | |
"• Mi cliente más exitoso solía dormir solo 4 horas por noche. Ahora duerme 8 y factura el doble, todo gracias a una rutina matutina que cambió su forma de trabajar.", # A (mini-historia) + I (beneficio único) + D (prueba social) | |
"• Como el bambú chino, que parece no crecer durante años y de repente se dispara hacia arriba, tu negocio está a punto de experimentar ese momento de explosión.", # A (analogía poderosa) + D (imagen vivida) | |
"• La técnica que transformó mi productividad apareció en el lugar más inesperado una clase de cocina italiana. Descubre cómo este método tan simple puede revolucionar tu forma de trabajar.", # A (descubrimiento inesperado) + I (beneficio único) | |
"• Los expertos en productividad estaban equivocados. Las mañanas no son el momento más importante del día. Descubre cuándo ocurre realmente la magia y aprovecha ese momento desde hoy.", # A (contraintuitivo) + I (detalle específico) + A (siguiente paso) | |
"• Imagina despertar cada mañana con tu bandeja de entrada vacía y tus tareas importantes ya organizadas. Este pequeño truco de 5 minutos lo hace posible.", # D (imagen vivida) + I (beneficio) + A (simplicidad) | |
] | |
}, | |
"3 en 1": { | |
"description": """ | |
La fórmula 3 en 1 para empezar a conectar con las personas combina: | |
1. **Característica**: Describe las propiedades tangibles del producto o servicio. Por ejemplo, "Este software tiene una función de automatización única". | |
2. **Para qué**: El beneficio inmediato que resuelve un problema o cumple una necesidad. Por ejemplo, "Para que puedas enfocarte en tareas más importantes sin distracciones". | |
3. **Con lo que**: El impacto emocional o práctico a largo plazo que obtiene el cliente. Por ejemplo, "Con lo que podrás disfrutar de un día más productivo y menos estresante". | |
Crea bullets points que integren estos elementos para mostrar beneficios de forma clara, emocional y conectada al producto. | |
""", | |
"examples": [ | |
"Una batería de larga duración para que puedas trabajar todo el día con lo que mantienes tu productividad sin interrupciones.", | |
"Un sistema de seguridad avanzado para que duermas tranquilo con lo que proteges lo que más valoras.", | |
"Un diseño intuitivo para que aprendas rápido con lo que ahorras tiempo y esfuerzos innecesarios." | |
] | |
} | |
} | |
# Función para generar bullets de beneficios | |
def generate_benefits(number_of_benefits, target_audience, product, temperature, selected_formula): | |
# Crear la configuración del modelo | |
generation_config = { | |
"temperature": temperature, | |
"top_p": 0.65, # Considerar un poco menos de palabras probables | |
"top_k": 360, # Aumentar las palabras candidatas para más variedad | |
"max_output_tokens": 8196, # Mantenerlo igual, pero puedes aumentar si deseas más detalle | |
} | |
model = genai.GenerativeModel( | |
model_name="gemini-2.0-flash", | |
generation_config=generation_config, | |
) | |
# Incluir las instrucciones del sistema en el prompt principal | |
system_prompt = """Eres un copywriter experto de clase mundial, con experiencia en crear beneficios que conectan emocionalmente y abordan los deseos, problemas y motivaciones de la audiencia objetivo. | |
OBJETIVO: | |
- Generar bullets de beneficios convincentes y específicos en español | |
- Conectar emocionalmente con la audiencia | |
- Abordar deseos, problemas y motivaciones reales | |
- Mantener un lenguaje natural y conversacional | |
- Orientar cada beneficio a la acción | |
REGLAS DE FORMATO: | |
- Cada beneficio debe comenzar con "• " | |
- Un beneficio por línea | |
- Sin números al inicio | |
- Sin explicaciones ni categorías | |
- Añadir un salto de línea entre cada beneficio | |
- Nunca incluir símbolos : en los bullets | |
- Cada beneficio debe ser una frase completa y concisa | |
ESTRUCTURA DE CADA BENEFICIO: | |
- Debe ser relevante para la audiencia objetivo | |
- Debe mostrar un resultado específico | |
- Debe incluir un elemento emocional | |
- Debe eliminar una objeción o dolor | |
- Debe inspirar acción inmediata | |
EJEMPLO DE FORMATO: | |
• Transforma tu negocio con estrategias probadas que duplican tus ingresos en 90 días, sin sacrificar tu tiempo en familia. | |
• Domina las técnicas más efectivas para conquistar tu mercado, mientras mantienes el equilibrio entre trabajo y vida personal. | |
• Implementa sistemas automatizados que hacen crecer tu empresa incluso mientras duermes, eliminando la necesidad de trabajar más horas. | |
IMPORTANTE: | |
- Cada beneficio debe ser único y específico | |
- Evitar repeticiones y generalidades | |
- Mantener un tono persuasivo pero honesto | |
- Adaptar el lenguaje al nivel de comprensión de la audiencia | |
- Enfocarse en resultados tangibles y medibles""" | |
# Crear un mensaje para el modelo, destacando la audiencia, el producto, la fórmula seleccionada y los ejemplos | |
benefits_instruction = ( | |
f"{system_prompt}\n\n" | |
f"Tu tarea es crear {number_of_benefits} beneficios irresistibles diseñados para {target_audience}. " | |
f"El objetivo es mostrar cómo {product} puede transformar la vida del lector, conectando de forma natural y emocional. " | |
f"Evita usar menciones literales o repetitivas, y destaca soluciones concretas, mostrando cómo el producto elimina obstáculos o satisface deseos reales. " | |
f"Usa la fórmula seleccionada como guía:\n\n{selected_formula['description']}\n\n" | |
f"Inspírate en estos ejemplos:\n" | |
f"- {selected_formula['examples'][0]}\n" | |
f"- {selected_formula['examples'][1]}\n" | |
f"- {selected_formula['examples'][2]}\n\n" | |
f"Tu objetivo es inspirar deseo y acción, evitando explicaciones o categorías en la respuesta." | |
) | |
chat_session = model.start_chat( | |
history=[ | |
{ | |
"role": "user", | |
"parts": [benefits_instruction], | |
}, | |
] | |
) | |
response = chat_session.send_message("Genera los beneficios") # Enviar mensaje para obtener la respuesta | |
return response.text # Regresar la respuesta directamente | |
# Configurar la interfaz de usuario con Streamlit | |
st.set_page_config(page_title="Bullet Benefits Generator", layout="wide") | |
# Leer el contenido del archivo manual.md | |
with open("manual.md", "r", encoding="utf-8") as file: | |
manual_content = file.read() | |
# Mostrar el contenido del manual en el sidebar | |
st.sidebar.markdown(manual_content) | |
# Ocultar elementos de la interfaz | |
st.markdown(""" | |
<style> | |
/* Reducir espacio superior */ | |
.block-container { | |
padding-top: 1rem; | |
padding-bottom: 5rem; | |
} | |
/* Ajustar espaciado del título */ | |
h1 { | |
margin-top: -2rem; | |
padding-top: 1rem; | |
} | |
/* Ajustar espaciado del subtítulo */ | |
h4 { | |
margin-top: 0.5rem; | |
padding-top: 0rem; | |
} | |
</style> | |
""", unsafe_allow_html=True) | |
# Centrar el título y el subtítulo | |
st.markdown("<h1 style='text-align: center;'>Bullet Benefits Generator</h1>", unsafe_allow_html=True) | |
st.markdown("<h4 style='text-align: center;'>Transforma características en beneficios irresistibles que conectan emocionalmente con tu audiencia.</h4>", unsafe_allow_html=True) | |
# Añadir CSS personalizado para el botón | |
st.markdown(""" | |
<style> | |
div.stButton > button { | |
background-color: #FFCC00; | |
color: black; | |
width: 90%; | |
height: 60px; | |
font-weight: bold; | |
font-size: 22px; | |
text-transform: uppercase; | |
border: 1px solid #000000; | |
border-radius: 8px; | |
display: block; | |
margin: 0 auto; | |
} | |
div.stButton > button:hover { | |
background-color: #FFD700; | |
color: black; | |
} | |
</style> | |
""", unsafe_allow_html=True) | |
# Crear columnas | |
col1, col2 = st.columns([1, 2]) | |
# Columnas de entrada | |
with col1: | |
target_audience = st.text_input("¿Quién es tu público objetivo?", placeholder="Ejemplo: Estudiantes Universitarios") | |
product = st.text_input("¿Qué producto tienes en mente?", placeholder="Ejemplo: Curso de Inglés") | |
number_of_benefits = st.selectbox("Número de Beneficios", options=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], index=4) | |
# Crear un único acordeón para fórmula y creatividad | |
with st.expander("Personaliza tus beneficios"): | |
temperature = st.slider("Creatividad", min_value=0.0, max_value=2.0, value=1.0, step=0.1) | |
selected_formula_key = st.selectbox( | |
"Selecciona una fórmula para tus beneficios", | |
options=list(benefits_formulas.keys()) | |
) | |
selected_formula = benefits_formulas[selected_formula_key] | |
# Botón de enviar | |
submit = st.button("Generar Beneficios") | |
# Mostrar los beneficios generados | |
if submit: | |
if target_audience and product and selected_formula: | |
try: | |
# Obtener la respuesta del modelo | |
generated_benefits = generate_benefits(number_of_benefits, target_audience, product, temperature, selected_formula) | |
col2.markdown(f""" | |
<div style="padding: 15px; border: 1px solid #ddd; border-radius: 8px;"> | |
<h3>Beneficios Generados:</h3> | |
<p>{generated_benefits}</p> | |
</div> | |
""", unsafe_allow_html=True) | |
except Exception as e: | |
col2.error(f"Error al generar beneficios: {e}") | |
else: | |
col2.warning("Por favor, completa todos los campos antes de generar beneficios.") |