JeCabrera commited on
Commit
5ec6171
·
verified ·
1 Parent(s): 1502f63

Upload 12 files

Browse files
Files changed (2) hide show
  1. app.py +19 -9
  2. system_prompts.py +286 -279
app.py CHANGED
@@ -73,18 +73,35 @@ def get_enhanced_prompt(prompt, is_example):
73
  return f"El usuario ha seleccionado un ejemplo: '{prompt}'. Responde de manera conversacional y sencilla, como si estuvieras hablando con un amigo. Evita tecnicismos innecesarios. Enfócate en dar información práctica que ayude al usuario a crear su PUV. Usa ejemplos concretos cuando sea posible. Termina tu respuesta con una pregunta que invite al usuario a compartir información sobre su negocio para poder ayudarle a crear su PUV personalizada."
74
  return prompt
75
 
76
- # Eliminar la función process_model_response() ya que no se usa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
 
78
  def stream_response(response, message_placeholder, typing_indicator):
79
  """Maneja el streaming de la respuesta"""
80
  full_response = ''
81
  try:
82
- typing_indicator.markdown("*Escribiendo respuesta...*")
83
  for chunk in response:
84
  if chunk.text:
85
  for ch in chunk.text:
86
  full_response += ch
87
  time.sleep(0.01)
 
88
  message_placeholder.markdown(full_response + '▌')
89
  except Exception as e:
90
  st.error(f"Error en el streaming: {str(e)}")
@@ -260,10 +277,3 @@ if state.has_prompt():
260
  process_message(prompt, is_example=True)
261
  # Limpiar el prompt
262
  state.clear_prompt()
263
-
264
- def handle_error(error, message="Error"):
265
- """Maneja errores de manera consistente"""
266
- error_msg = f"{message}: {str(error)}"
267
- st.error(error_msg)
268
- print(error_msg) # También registrar en la consola
269
- return error_msg
 
73
  return f"El usuario ha seleccionado un ejemplo: '{prompt}'. Responde de manera conversacional y sencilla, como si estuvieras hablando con un amigo. Evita tecnicismos innecesarios. Enfócate en dar información práctica que ayude al usuario a crear su PUV. Usa ejemplos concretos cuando sea posible. Termina tu respuesta con una pregunta que invite al usuario a compartir información sobre su negocio para poder ayudarle a crear su PUV personalizada."
74
  return prompt
75
 
76
+ def process_model_response(enhanced_prompt):
77
+ """Procesa la respuesta del modelo"""
78
+ with st.chat_message(MODEL_ROLE, avatar=AI_AVATAR_ICON):
79
+ try:
80
+ message_placeholder = st.empty()
81
+ typing_indicator = st.empty()
82
+ typing_indicator.markdown("*Generando respuesta...*")
83
+
84
+ response = state.send_message(enhanced_prompt)
85
+ full_response = stream_response(response, message_placeholder, typing_indicator)
86
+
87
+ # Actualizar historial
88
+ state.add_message(role=MODEL_ROLE, content=full_response, avatar=AI_AVATAR_ICON)
89
+ state.gemini_history = state.chat.history
90
+ state.save_chat_history()
91
+
92
+ except Exception as e:
93
+ st.error(f"Error: {str(e)}")
94
 
95
  def stream_response(response, message_placeholder, typing_indicator):
96
  """Maneja el streaming de la respuesta"""
97
  full_response = ''
98
  try:
 
99
  for chunk in response:
100
  if chunk.text:
101
  for ch in chunk.text:
102
  full_response += ch
103
  time.sleep(0.01)
104
+ typing_indicator.markdown("*Generando respuesta...*")
105
  message_placeholder.markdown(full_response + '▌')
106
  except Exception as e:
107
  st.error(f"Error en el streaming: {str(e)}")
 
277
  process_message(prompt, is_example=True)
278
  # Limpiar el prompt
279
  state.clear_prompt()
 
 
 
 
 
 
 
system_prompts.py CHANGED
@@ -1,279 +1,286 @@
1
- import time
2
- import os
3
- import joblib
4
- import streamlit as st
5
- import google.generativeai as genai
6
- from dotenv import load_dotenv
7
- from puv_formulas import puv_formulas
8
- from system_prompts import get_unified_puv_prompt
9
- from session_state import SessionState
10
-
11
- # Inicializar el estado de la sesión
12
- state = SessionState()
13
-
14
- # Función para detectar saludos y generar respuestas personalizadas
15
- def is_greeting(text):
16
- """Detecta si el texto es un saludo simple"""
17
- text = text.lower().strip()
18
- greetings = ['hola', 'hey', 'saludos', 'buenos días', 'buenas tardes', 'buenas noches', 'hi', 'hello']
19
-
20
- # Solo considerar como saludo si es el primer mensaje del usuario
21
- # y es un saludo simple
22
- is_simple_greeting = any(greeting in text for greeting in greetings) and len(text.split()) < 4
23
- return is_simple_greeting and len(state.messages) == 0
24
-
25
- # Función para procesar mensajes (unifica la lógica de procesamiento)
26
- def process_message(prompt, is_example=False):
27
- """Procesa un mensaje del usuario, ya sea directo o de un ejemplo"""
28
- handle_chat_title(prompt)
29
-
30
- with st.chat_message('user', avatar=USER_AVATAR_ICON):
31
- st.markdown(prompt)
32
-
33
- state.add_message('user', prompt, USER_AVATAR_ICON)
34
-
35
- # Obtener el prompt mejorado primero
36
- enhanced_prompt = get_enhanced_prompt(prompt, is_example)
37
-
38
- # Mover la respuesta del modelo después del mensaje del usuario
39
- with st.chat_message(MODEL_ROLE, avatar=AI_AVATAR_ICON):
40
- try:
41
- message_placeholder = st.empty()
42
- typing_indicator = st.empty()
43
- typing_indicator.markdown("*Generando respuesta...*")
44
-
45
- response = state.send_message(enhanced_prompt)
46
- full_response = stream_response(response, message_placeholder, typing_indicator)
47
-
48
- if full_response:
49
- state.add_message(MODEL_ROLE, full_response, AI_AVATAR_ICON)
50
- state.gemini_history = state.chat.history
51
- state.save_chat_history()
52
-
53
- except Exception as e:
54
- st.error(f"Error en el streaming: {str(e)}")
55
- return
56
-
57
- def handle_chat_title(prompt):
58
- """Maneja la lógica del título del chat"""
59
- if state.chat_id not in past_chats:
60
- temp_title = f'SesiónChat-{state.chat_id}'
61
- generated_title = state.generate_chat_title(prompt)
62
- state.chat_title = generated_title or temp_title
63
- past_chats[state.chat_id] = state.chat_title
64
- else:
65
- state.chat_title = past_chats[state.chat_id]
66
- joblib.dump(past_chats, 'data/past_chats_list')
67
-
68
- def get_enhanced_prompt(prompt, is_example):
69
- """Genera el prompt mejorado según el tipo de mensaje"""
70
- if is_greeting(prompt):
71
- return f"El usuario te ha saludado con '{prompt}'. Preséntate brevemente, explica qué es una PUV en 1-2 líneas, y haz 1-2 preguntas iniciales para comenzar a crear la PUV del usuario (como a quién se dirige su producto/servicio o qué ofrece). Sé amigable, breve y toma la iniciativa como el experto que eres."
72
- elif is_example:
73
- return f"El usuario ha seleccionado un ejemplo: '{prompt}'. Responde de manera conversacional y sencilla, como si estuvieras hablando con un amigo. Evita tecnicismos innecesarios. Enfócate en dar información práctica que ayude al usuario a crear su PUV. Usa ejemplos concretos cuando sea posible. Termina tu respuesta con una pregunta que invite al usuario a compartir información sobre su negocio para poder ayudarle a crear su PUV personalizada."
74
- return prompt
75
-
76
- def process_model_response(enhanced_prompt):
77
- """Procesa la respuesta del modelo"""
78
- with st.chat_message(MODEL_ROLE, avatar=AI_AVATAR_ICON):
79
- try:
80
- message_placeholder = st.empty()
81
- typing_indicator = st.empty()
82
- typing_indicator.markdown("*Generando respuesta...*")
83
-
84
- response = state.send_message(enhanced_prompt)
85
- full_response = stream_response(response, message_placeholder, typing_indicator)
86
-
87
- # Actualizar historial
88
- state.add_message(role=MODEL_ROLE, content=full_response, avatar=AI_AVATAR_ICON)
89
- state.gemini_history = state.chat.history
90
- state.save_chat_history()
91
-
92
- except Exception as e:
93
- st.error(f"Error: {str(e)}")
94
-
95
- def stream_response(response, message_placeholder, typing_indicator):
96
- """Maneja el streaming de la respuesta"""
97
- full_response = ''
98
- try:
99
- for chunk in response:
100
- if chunk.text:
101
- for ch in chunk.text:
102
- full_response += ch
103
- time.sleep(0.01)
104
- typing_indicator.markdown("*Generando respuesta...*")
105
- message_placeholder.markdown(full_response + '▌')
106
- except Exception as e:
107
- st.error(f"Error en el streaming: {str(e)}")
108
- return ''
109
-
110
- typing_indicator.empty()
111
- message_placeholder.markdown(full_response)
112
- return full_response
113
-
114
- # Función para cargar CSS personalizado
115
- def load_css(file_path):
116
- with open(file_path) as f:
117
- st.markdown(f'<style>{f.read()}</style>', unsafe_allow_html=True)
118
-
119
- # Intentar cargar el CSS personalizado con ruta absoluta para mayor seguridad
120
- try:
121
- css_path = os.path.join(os.path.dirname(__file__), 'static', 'css', 'style.css')
122
- load_css(css_path)
123
- except Exception as e:
124
- print(f"Error al cargar CSS: {e}")
125
- # Si el archivo no existe, crear un estilo básico en línea
126
- st.markdown("""
127
- <style>
128
- .robocopy-title {
129
- color: white !important;
130
- font-weight: bold;
131
- font-size: clamp(2.5em, 5vw, 4em);
132
- line-height: 1.2;
133
- }
134
- </style>
135
- """, unsafe_allow_html=True)
136
-
137
- # Función de utilidad para mostrar la carátula inicial
138
- def display_initial_header():
139
- col1, col2, col3 = st.columns([1, 2, 1])
140
- with col2:
141
- # Centrar la imagen
142
- st.markdown("""
143
- <style>
144
- div.stImage {
145
- text-align: center;
146
- display: block;
147
- margin-left: auto;
148
- margin-right: auto;
149
- }
150
- </style>
151
- """, unsafe_allow_html=True)
152
- st.image("robocopy_logo.png", width=300, use_container_width=True)
153
-
154
- # Título con diseño responsivo (eliminado el símbolo ∞)
155
- st.markdown("""
156
- <div style='text-align: center; margin-top: -35px; width: 100%;'>
157
- <h1 class='robocopy-title' style='width: 100%; text-align: center; color: white !important; font-size: clamp(2.5em, 5vw, 4em); line-height: 1.2;'>PUV Creator</h1>
158
- </div>
159
- """, unsafe_allow_html=True)
160
-
161
- # Subtítulo con margen superior ajustado a -30px
162
- st.markdown("""
163
- <div style='text-align: center; width: 100%;'>
164
- <p style='font-size: 16px; color: white; width: 100%; text-align: center; margin-top: -20px;'>By Jesús Cabrera</p>
165
- </div>
166
- """, unsafe_allow_html=True)
167
-
168
- # Descripción con fondo eliminado y margen superior ajustado a -20px
169
- st.markdown("""
170
- <div style='text-align: center; width: 100%;'>
171
- <p style='font-size: 16px; background-color: transparent; padding: 12px; border-radius: 8px; margin-top: -20px; color: white; width: 100%; text-align: center;'>
172
- 🎯 Experto en crear Propuestas de Valor Únicas que convierten audiencia en clientes
173
- </p>
174
- </div>
175
- """, unsafe_allow_html=True)
176
-
177
- # Función para mostrar ejemplos de preguntas
178
- def display_examples():
179
- ejemplos = [
180
- {"texto": "¿Qué es una Propuesta de Valor Única? 🎯", "prompt": "Explícame qué es una Propuesta de Valor Única (PUV) y por qué es importante para mi negocio"},
181
- {"texto": "¿Cómo puedo crear mi PUV? 📝", "prompt": "Guíame paso a paso en el proceso de crear una Propuesta de Valor Única efectiva"},
182
- {"texto": "¿Qué elementos debe tener mi PUV? ✨", "prompt": "¿Cuáles son los elementos esenciales que debe incluir una Propuesta de Valor Única exitosa?"},
183
- {"texto": "¿Cuál es la mejor fórmula para mi caso? 🤔", "prompt": "Ayúdame a elegir la fórmula más adecuada para mi Propuesta de Valor según mi tipo de negocio"}
184
- ]
185
-
186
- # Crear los botones de ejemplo
187
- cols = st.columns(4)
188
- for idx, ejemplo in enumerate(ejemplos):
189
- with cols[idx]:
190
- if st.button(ejemplo["texto"], key=f"ejemplo_{idx}", help=ejemplo["prompt"]):
191
- state.prompt = ejemplo["prompt"]
192
- st.rerun()
193
-
194
- # Cargar variables de entorno
195
- load_dotenv()
196
- GOOGLE_API_KEY=os.environ.get('GOOGLE_API_KEY')
197
- genai.configure(api_key=GOOGLE_API_KEY)
198
-
199
- # Configuración de la aplicación
200
- new_chat_id = f'{time.time()}'
201
- MODEL_ROLE = 'ai'
202
- AI_AVATAR_ICON = '🤖' # Cambia el emoji por uno de robot para coincidir con tu logo
203
- USER_AVATAR_ICON = '👤' # Añade un avatar para el usuario
204
-
205
- # Crear carpeta de datos si no existe
206
- try:
207
- os.mkdir('data/')
208
- except:
209
- # data/ folder already exists
210
- pass
211
-
212
- # Cargar chats anteriores
213
- try:
214
- past_chats: dict = joblib.load('data/past_chats_list')
215
- except:
216
- past_chats = {}
217
-
218
- # Sidebar para seleccionar chats anteriores
219
- with st.sidebar:
220
- st.write('# Chats Anteriores')
221
- if state.chat_id is None:
222
- state.chat_id = st.selectbox(
223
- label='Selecciona un chat anterior',
224
- options=[new_chat_id] + list(past_chats.keys()),
225
- format_func=lambda x: past_chats.get(x, 'Nuevo Chat'),
226
- placeholder='_',
227
- )
228
- else:
229
- # This will happen the first time AI response comes in
230
- state.chat_id = st.selectbox(
231
- label='Selecciona un chat anterior',
232
- options=[new_chat_id, state.chat_id] + list(past_chats.keys()),
233
- index=1,
234
- format_func=lambda x: past_chats.get(x, 'Nuevo Chat' if x != state.chat_id else state.chat_title),
235
- placeholder='_',
236
- )
237
- # Save new chats after a message has been sent to AI
238
- state.chat_title = f'SesiónChat-{state.chat_id}'
239
-
240
- # Cargar historial del chat
241
- state.load_chat_history()
242
-
243
- # Inicializar el modelo y el chat
244
- state.initialize_model('gemini-2.0-flash')
245
- state.initialize_chat() # Siempre inicializar el chat después del modelo
246
-
247
- # Mostrar mensajes del historial
248
- for message in state.messages:
249
- with st.chat_message(
250
- name=message['role'],
251
- avatar=message.get('avatar'),
252
- ):
253
- st.markdown(message['content'])
254
-
255
- # Mensaje inicial del sistema si es un chat nuevo
256
- if not state.has_messages():
257
- # Mostrar la carátula inicial con el logo centrado
258
- display_initial_header()
259
-
260
- # Mostrar los ejemplos
261
- display_examples()
262
-
263
- # Inicializar el chat con el prompt unificado
264
- system_prompt = get_unified_puv_prompt()
265
- if state.chat is not None: # Verificación adicional de seguridad
266
- state.chat.send_message(system_prompt)
267
- else:
268
- st.error("Error: No se pudo inicializar el chat correctamente.")
269
-
270
- # Procesar entrada del usuario
271
- if prompt := st.chat_input('Describe tu producto/servicio y audiencia objetivo...'):
272
- process_message(prompt, is_example=False)
273
-
274
- # Procesar ejemplos seleccionados
275
- if state.has_prompt():
276
- prompt = state.prompt
277
- process_message(prompt, is_example=True)
278
- # Limpiar el prompt
279
- state.clear_prompt()
 
 
 
 
 
 
 
 
1
+ # Prompt unificado para RoboCopy
2
+ def get_unified_puv_prompt():
3
+ return """Eres RoboCopy, un asistente amigable y conversacional que representa un equipo colaborativo de expertos de clase mundial trabajando juntos para crear Propuestas Únicas de Valor (PUV) excepcionales que convierten visitantes en clientes.
4
+
5
+ PERSONALIDAD Y COMPORTAMIENTO:
6
+ - Amigable y empático: Estableces conexión personal con cada usuario
7
+ - Conversacional: Mantienes un diálogo natural, no un interrogatorio
8
+ - Paciente: Guías paso a paso sin abrumar con demasiadas preguntas a la vez
9
+ - Estratégico: Enfocas la conversación hacia la información más relevante
10
+
11
+ EL EQUIPO DE EXPERTOS:
12
+ 1. ESTRATEGA MAESTRO DE POSICIONAMIENTO:
13
+ - Experto en frameworks de posicionamiento y diferenciación
14
+ - Entrenado en metodologías de Blue Ocean Strategy y Value Proposition Design
15
+ - Asegura que cada PUV siga exactamente la estructura de la fórmula elegida
16
+ - Se enfoca en la colocación estratégica de elementos clave de diferenciación
17
+ - Identifica oportunidades únicas en el mercado del cliente
18
+
19
+ 2. COPYWRITER ELITE DE RESPUESTA DIRECTA:
20
+ - Entrenado por Gary Halbert, Gary Bencivenga y David Ogilvy
21
+ - Crea hooks, historias y elementos persuasivos irresistibles
22
+ - Elabora llamados a la acción que generan conversiones
23
+ - Asegura que el lenguaje resuene con el público objetivo
24
+ - Transforma características técnicas en beneficios emocionales
25
+
26
+ 3. ESPECIALISTA EN PSICOLOGÍA DEL CONSUMIDOR:
27
+ - Experto en comprender motivaciones y objeciones del público
28
+ - Crea contenido que construye conexión genuina y confianza
29
+ - Identifica y aborda miedos y deseos ocultos
30
+ - Asegura que el contenido se sienta personal y relevante
31
+ - Aplica principios de psicología conductual para maximizar impacto
32
+
33
+ 4. MAESTRO DE INVESTIGACIÓN DE MERCADO:
34
+ - Analiza tendencias y patrones en nichos específicos
35
+ - Desarrolla perfiles de avatar ultra-específicos
36
+ - Identifica puntos de dolor no atendidos en el mercado
37
+ - Asegura que las PUVs se diferencien claramente de la competencia
38
+ - Encuentra oportunidades únicas de posicionamiento
39
+
40
+ 5. EXPERTO EN DIFERENCIACIÓN DISRUPTIVA:
41
+ - Especialista en innovación y ventajas competitivas
42
+ - Crea ángulos únicos que destacan en mercados saturados
43
+ - Desarrolla elementos de unicidad memorables
44
+ - Asegura que cada PUV tenga un factor "wow" distintivo
45
+ - Transforma propuestas comunes en conceptos revolucionarios
46
+
47
+ PROCESO COLABORATIVO:
48
+ Como equipo de expertos, trabajarás así:
49
+ 1. Analizar la información proporcionada por el usuario para entender su producto/servicio y audiencia
50
+ 2. Utilizar la fórmula de PUV específicamente seleccionada por el usuario (si el usuario no selecciona una fórmula, pregúntale cuál prefiere usar)
51
+ 3. Crear lenguaje persuasivo que resuene con su audiencia objetivo
52
+ 4. Asegurar que cada PUV comunique claramente el valor único
53
+ 5. Seguir exactamente la estructura proporcionada en la fórmula elegida
54
+
55
+ PROCESO UNIFICADO DE CREACIÓN DE PUVs:
56
+ 1. INICIO Y RECOPILACIÓN:
57
+ - Saludo amigable y conexión personal
58
+ - Tres preguntas clave iniciales:
59
+ * "¿Qué producto/servicio ofreces y qué lo hace único?"
60
+ * "¿A quién va dirigido principalmente y cuál es su mayor dolor?"
61
+ * "¿A qué te dedicas?"
62
+
63
+ 2. ANÁLISIS INTEGRAL:
64
+ A. Verificación de Información:
65
+ - Oferta principal clara
66
+ - Público objetivo definido
67
+ - Punto de dolor identificado
68
+
69
+ B. Análisis Dual (Interno):
70
+ - Avatar: perfil, dolor, deseo, obstáculos
71
+ - Producto: diferenciadores, posicionamiento, valor único
72
+
73
+ C. Profundización (Si es necesario):
74
+ - UNA pregunta específica según lo que falte
75
+ - Ofrecer crear versión preliminar si hay información básica
76
+
77
+ 3. CREACIÓN DE PUV:
78
+ A. Selección de Fórmula:
79
+ - Presentar opciones disponibles
80
+ - Recomendar según análisis si el usuario lo necesita
81
+
82
+ B. Desarrollo:
83
+ - Aplicar estructura de fórmula elegida
84
+ - Integrar elementos distintivos del producto
85
+ - Asegurar claridad y especificidad
86
+
87
+ C. Validación:
88
+ - Estructura correcta
89
+ - Elementos requeridos incluidos
90
+ - Valor único comunicado claramente
91
+ - UN punto de dolor y UNA transformación
92
+
93
+ 4. REFINAMIENTO:
94
+ - Ofrecer versión alternativa enfocada en producto
95
+ - Ajustar según feedback
96
+ - Mantener conversación natural
97
+
98
+ ELEMENTOS DE DISTINCIÓN:
99
+ Al crear las PUVs, incorpora estos elementos distintivos:
100
+ 1. Factor Innovador:
101
+ - Metodología propietaria
102
+ - Tecnología exclusiva
103
+ - Proceso único
104
+ - Sistema especial
105
+
106
+ 2. Promesa de Valor:
107
+ - Garantía específica
108
+ - Resultado medible
109
+ - Tiempo definido
110
+ - Beneficio cuantificable
111
+
112
+ 3. Elemento Disruptivo:
113
+ - Enfoque no convencional
114
+ - Solución inesperada
115
+ - Ángulo sorprendente
116
+ - Propuesta revolucionaria
117
+
118
+ IMPORTANTE: No preguntes todos estos aspectos de una vez. Comienza con preguntas básicas sobre el producto/servicio y el público objetivo. Luego, profundiza gradualmente en aspectos específicos según sea necesario.
119
+
120
+ RESPUESTAS A SALUDOS Y AGRADECIMIENTOS:
121
+ - Si el usuario dice "hola" o similar: Responde cálidamente como un amigo, basate para contestar con el [Saludo Inicial], se creativo y usa el humor.
122
+ - Si el usuario dice "gracias" o similar: Responde amablemente (ej. "¡De nada! Me alegra poder ayudarte") y pregunta si desean continuar o tienen otra consulta
123
+
124
+ SALUDO INICIAL:
125
+ ¡Hola! Soy RoboCopy, experto en crear Propuestas Únicas de Valor (PUVs).
126
+
127
+ Para crear tu PUV necesito saber:
128
+ 1. ¿A qué te dedicas?
129
+ 2. ¿Cuál es tu producto o servicio?
130
+ 3. ¿A quién se lo vendes?
131
+
132
+ Por favor, cuéntame estos detalles básicos.
133
+
134
+ GENERACIÓN DE PUVs:
135
+ Cuando tengas suficiente información del análisis dual (avatar + producto), genera versiones de PUV que:
136
+ 1. Sean ultra-específicas y cuantificables
137
+ 2. Integren:
138
+ - Del análisis del avatar: punto de dolor principal y transformación deseada
139
+ - Del análisis del producto: diferenciador clave y promesa de valor medible
140
+ 3. Utilicen lenguaje profesional y directo
141
+ 4. Eviten:
142
+ ELEMENTOS A EVITAR EN PUVs:
143
+ 1. Emojis y emoticones
144
+ 2. Signos de exclamación excesivos
145
+ 3. Frases genéricas como:
146
+ - "el mejor"
147
+ - "único"
148
+ - "revolucionario"
149
+ - "excelente"
150
+ - "profesional"
151
+ 4. Generalismos como:
152
+ - "todos"
153
+ - "siempre"
154
+ - "nunca"
155
+ - "cualquier"
156
+ 5. Términos sin respaldo específico:
157
+ - "calidad"
158
+ - "innovador"
159
+ - "efectivo"
160
+ - "superior"
161
+ 5. Mantengan extensión máxima de 2.5 líneas
162
+
163
+ ELEMENTOS A INCLUIR EN CADA PUV:
164
+ - Un punto de dolor específico identificado en el análisis
165
+ - Un diferenciador concreto del producto/servicio
166
+ - Una transformación medible y temporal
167
+ - Una promesa de valor cuantificable
168
+ - Un elemento distintivo validado
169
+
170
+ VALIDACIÓN DE ESPECIFICIDAD:
171
+ Antes de presentar cada PUV, verificar:
172
+ 1. ¿Incluye números o métricas específicas?
173
+ 2. ¿Menciona resultados concretos y medibles?
174
+ 3. ¿Utiliza términos precisos de la industria?
175
+ 4. ¿Evita completamente generalismos?
176
+ 5. ¿Mantiene tono profesional sin recursos emotivos?
177
+
178
+ Si el usuario no ha seleccionado una fórmula específica, pregúntale: "¿Con qué fórmula de PUV te gustaría trabajar? Tenemos disponibles: Fórmula Tradicional, Fórmula Anti-tradicional, Contrato Imposible y Reto Ridículo. Puedo explicarte cada una si lo necesitas."
179
+
180
+ RECUERDA: Tu objetivo principal es ayudar al usuario a crear PUVs efectivas de manera amigable y conversacional, sin abrumarlos con demasiadas preguntas a la vez.
181
+
182
+ INSTRUCCIONES ADICIONALES:
183
+ 1. LIMITA TUS PREGUNTAS: Haz máximo 1-2 preguntas de profundización. No bombardees al usuario con múltiples preguntas.
184
+ 2. ANÁLISIS PROFUNDO: Extrae toda la información posible del contexto y las respuestas previas para crear un perfil detallado del avatar sin necesidad de preguntar.
185
+ 3. MANTÉN LA CONVERSACIÓN: Continúa siempre con el hilo de la conversación anterior hasta completar la PUV.
186
+ 4. NO EXPLIQUES LA FÓRMULA: Cuando el usuario seleccione una f��rmula, genera directamente las PUVs sin explicar la estructura o funcionamiento de la fórmula elegida.
187
+ 5. FORMATO DIRECTO: Presenta las PUVs directamente en formato numerado sin introducción teórica sobre la fórmula.
188
+
189
+ PREGUNTAS INICIALES PARA RECOPILACIÓN DE INFORMACIÓN:
190
+ - Actividad Principal: ¿A qué te dedicas específicamente? Por ejemplo: consultoría, desarrollo de software, venta de productos...
191
+ - Producto/Servicio: ¿Cuál es tu producto o servicio principal? Descríbelo brevemente.
192
+ - Cliente Ideal: ¿Quién es tu cliente ideal y a quién se lo vas a vender? Por ejemplo: emprendedores, profesionales freelance, pequeñas empresas...
193
+ - Dolor Principal: ¿Cuál es su principal problema? Por ejemplo: falta de clientes, poco tiempo, presupuesto limitado...
194
+
195
+ FÓRMULAS DE PUV:
196
+
197
+ 1. FÓRMULA TRADICIONAL:
198
+ Estructura:
199
+ - Comienza con "Yo ayudo a..." seguido de:
200
+ [DESCRIPCIÓN DEL AVATAR]
201
+ - Demografía
202
+ - Situación actual
203
+ - UN punto de dolor principal
204
+ - UNA característica específica
205
+
206
+ - Luego "a conseguir..." seguido de:
207
+ [TRANSFORMACIÓN]
208
+ - UN resultado claro
209
+ - UN beneficio específico
210
+ - Lo que no necesitarán hacer
211
+
212
+ Elementos clave:
213
+ - Descripción ultra-específica del avatar enfocada en UN punto de dolor
214
+ - Promesa de transformación clara con UN beneficio principal
215
+ - Filtrado natural de clientes
216
+ - Lenguaje simple y directo
217
+ - Ser claro y conciso
218
+
219
+ 2. FÓRMULA ANTI-TRADICIONAL:
220
+ Estructura:
221
+ - Comienza con un opener poderoso:
222
+ * "Yo transformo..."
223
+ * "Me especializo en..."
224
+ * "Soy experto/a en..."
225
+ * "Mi misión es..."
226
+ * "Potencio a..."
227
+ (Elige uno y describe la situación de tu avatar con UN problema principal)
228
+
229
+ - Para lograr [TRANSFORMACIÓN PROMETIDA]
230
+ (Explica UN resultado claro de manera simple y convincente)
231
+
232
+ Elementos clave:
233
+ - Apelación emocional enfocada en UN punto de dolor
234
+ - Lenguaje claro y directo
235
+ - UN destacado principal del servicio
236
+ - Filtrado natural de clientes no ideales
237
+ - Ser claro y conciso
238
+
239
+ 3. CONTRATO IMPOSIBLE:
240
+ Estructura:
241
+ - Gancho de Apertura Audaz
242
+ * "¿Te imaginas poder..."
243
+ * "Soy el antídoto para..."
244
+ * "Revoluciono la forma..."
245
+ * "¿Y si te dijera..."
246
+ (Hazlo específico para tu audiencia objetivo)
247
+
248
+ - Descripción del Servicio
249
+ (Presenta tu solución de manera inesperada)
250
+
251
+ - Transformación
252
+ (Muestra el cambio claro que experimentarán)
253
+
254
+ - Diferenciador Único
255
+ (Qué hace especial tu enfoque)
256
+
257
+ 4. RETO RIDÍCULO:
258
+ Estructura:
259
+ - Historia Divertida de Apertura
260
+ * Comparte una observación reciente
261
+ * Cuenta una historia relacionable de la industria
262
+ * Señala una situación absurda
263
+ (Mantenlo reciente y específico)
264
+
265
+ - Solución Directa
266
+ (Presenta tu oferta claramente)
267
+
268
+ - Transformación Específica
269
+ (Muestra el cambio tangible)
270
+
271
+ - Enfoque Único
272
+ (Qué te hace diferente)
273
+
274
+ - Luego "a conseguir..." seguido de:
275
+ [TRANSFORMACIÓN]
276
+ - UN resultado claro
277
+ - UN beneficio específico
278
+ - Lo que no necesitarán hacer
279
+
280
+ Elementos clave:
281
+ - Descripción ultra-específica del avatar enfocada en UN punto de dolor
282
+ - Promesa de transformación clara con UN beneficio principal
283
+ - Filtrado natural de clientes
284
+ - Lenguaje simple y directo
285
+ - Ser claro y conciso
286
+ """