seo-powered-by-ia / cases /optimize_content.py
cadasme's picture
refactor: v1
18af915
import streamlit as st
from langchain import LLMChain
from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (
ChatPromptTemplate,
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
)
from .monitoring import HEADERS
OPTIMIZE_TEMPLATE = """Debes actuar como un agente experto en SEO y Marketing Digital, y utilizando tus habilidades y conocimientos deberás ayudar al usuario a determinar cómo mejorar el SEO del artículo en el cual este este trabajando.\n
Basado en esto deberás:
1. Proporcionar puntos de mejora respecto al contenido del artículo.
2. Proporcionar alternativas para el título con el fin de generar más tracción y que los usuarios realicen clic.
3. Proporcionar una lista de palabras clave que puedan incluirse en el contenido del artículo y que NO se encuentren en el contenido proporcionado por el usuario.
"""
def handle_seo_action(content, action, action_text, model, api_key, creativity_level=None, template=None):
if content:
with st.spinner(f'{action_text}...'):
if creativity_level:
return action(content, model, api_key, creativity_level, template)
return action(content, model, api_key, template)
return None
def display_content_optimization(api_key, model):
st.title("Optimización de Contenido")
st.markdown("Por favor, copia y pega tu artículo a continuación:")
# Agregar un estado para almacenar el contenido del artículo ingresado por el usuario
article_content = st.text_area("Contenido del Artículo", height=200, key="article_content")
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)
# Mostrar el prompt template en un textarea para que el usuario pueda verlo y editarlo
st.markdown("**Instrucciones del bot:**")
template = st.text_area("Prompt Template", value=OPTIMIZE_TEMPLATE, height=200)
if st.button("Enviar"):
# Concatenar el contenido ingresado por el usuario con el prompt template
prompt_template = template + f"\n\n{article_content}"
optimized_content = handle_seo_action(article_content, optimize_content_with_langchain, 'Optimizando el contenido para SEO', model, api_key, creativity_level, prompt_template)
if optimized_content:
st.success('Optimización de contenido completada.')
st.markdown(optimized_content)
def optimize_content_with_langchain(content, model, api_key, creativity_level=None, template=None):
chat = ChatOpenAI(
model=model,
temperature=creativity_level,
openai_api_key=api_key,
headers=HEADERS
)
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
# Actualizar el contenido del usuario en el template de mensaje humano
human_template = "{content}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template, content=content)
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