Spaces:
Runtime error
Runtime error
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 | |