seo-powered-by-ia / cases /content_generation.py
cadasme's picture
refactor: v1
18af915
from .monitoring import HEADERS
import streamlit as st
from langchain import LLMChain
from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (
ChatPromptTemplate,
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
)
CREATIVE_TEMPLATE = """Debes actuar como un agente experto en SEO y Marketing Digital, y utilizando tus habilidades y conocimientos deberás proporcionar ideas innovadoras para la creación de contenido basado en las necesidades del usuario.\n
Analiza la descripción proporcionada y propone varias ideas de temas, ángulos o enfoques que podrían ser interesantes y atractivos para la audiencia, manteniendo siempre un enfoque de optimización SEO.
"""
GENERATIVE_TEMPLATE = """Debes actuar como un agente experto en SEO y Marketing Digital, y utilizando tus habilidades y conocimientos deberás generar contenido basado en las ideas y necesidades del usuario optimizado para SEO.\n
1. Generar un esquema, esbozando la estructura del contenido a generar.\n
2. Escritura del contenido: Desarrolla cada sección de tu esquema en párrafos completos.\n
3. Inclusión de emojies: Los emojis pueden hacer que tu contenido sea más atractivo y amigable.\n
4. Optimización SEO: Asegúrate de que tus palabras clave aparecen en los lugares importantes de tu contenido.\n
5. Análisis: Debes analizar el contenido generado con el fin de identificar palabras claves que puedan optimizarse para SEO, puntos de mejora en la estructura y detalle del contenido.
"""
def handle_seo_action(template, action, action_text, model, api_key, creativity_level=None):
if api_key:
if template:
with st.spinner(f'{action_text}...'):
if creativity_level:
return action(None, model, api_key, creativity_level, template)
return action(None, model, api_key, template)
else:
st.warning('Please enter some template to generate.')
else:
st.warning('Please enter your API Key.')
return None
def get_prompt_template(mode, include_emojis, tone, user_request):
base_template = CREATIVE_TEMPLATE if mode == "Lluvia de Ideas" else GENERATIVE_TEMPLATE
if include_emojis:
base_template += "\n\nIncluye emojis en tu contenido para hacerlo más atractivo."
if tone == 'Formal':
base_template += "\n\nEl tono del contenido debe ser formal."
if user_request:
base_template += f"\n\nSolicitud del usuario: {user_request}"
return base_template
def display_content_generation(api_key, model):
st.title("Generación de Contenido Digital")
# Agregamos las opciones personalizables
st.markdown("Personaliza tu contenido:")
mode = st.radio("Modo", ['Lluvia de Ideas', 'Generador de Contenido'])
include_emojis = st.checkbox("Incluir emojis")
tone = st.selectbox("Tono del contenido", ['Formal', 'Informal', 'Amigable', 'Profesional'])
st.markdown("Selecciona el nivel de creatividad:")
creativity_level = st.slider("Nivel de Creatividad", min_value=0.0, max_value=1.0, value=0.5, step=0.1)
# Allow the user to modify the template and enter user request
st.markdown("Modifica las instrucciones del bot si lo deseas:")
user_request = st.text_input("Solicitud del usuario")
_ = st.text_area("Previsualización de Solicitud", get_prompt_template(mode, include_emojis, tone, user_request), height=200)
if st.button("Generar"):
# Combine template and user request
template_with_request = get_prompt_template(mode, include_emojis, tone, user_request)
# Pass the template to handle_seo_action function
generated_content = handle_seo_action(template_with_request, content_generation_with_langchain, 'Creando el contenido optimizado para SEO', model, api_key, creativity_level)
if generated_content:
st.success('Generación de contenido completada.')
st.markdown("**Contenido generado:**")
st.markdown(f"> {generated_content}")
def content_generation_with_langchain(content, model, openai_key, creativity_level, template):
chat = ChatOpenAI(
model=model,
temperature=creativity_level,
openai_api_key=openai_key,
headers=HEADERS if HEADERS else None,
)
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
human_template = "{content}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
chain = LLMChain(llm=chat, prompt=chat_prompt)
optimized_content = chain.run(content=content)
return optimized_content