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