File size: 3,257 Bytes
4579e3f
7c9815f
 
 
 
 
 
 
 
cfe8f38
9ca1656
18af915
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4579e3f
18af915
 
 
9ca1656
4579e3f
7c9815f
 
18af915
 
7c9815f
18af915
7c9815f
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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