Spaces:
Runtime error
Runtime error
refactor: using openai api key from env vars
Browse files- app.py +51 -37
- cases/content_generation.py +2 -0
- cases/optimize_content.py +6 -1
- requirements.txt +1 -2
app.py
CHANGED
|
@@ -1,46 +1,60 @@
|
|
|
|
|
|
|
|
| 1 |
import streamlit as st
|
| 2 |
from cases.optimize_content import optimize_content_with_langchain
|
| 3 |
from cases.content_generation import content_generation_with_langchain
|
| 4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5 |
def main():
|
| 6 |
st.sidebar.title("Menú")
|
| 7 |
-
selection = st.sidebar.radio("SEO Powered By AI",
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
st.markdown('''
|
| 12 |
-
En esta aplicación, exploraremos los siguientes casos de uso de SEO potenciado por IA:
|
| 13 |
-
1. **Optimización de Contenido**: Las herramientas de AI pueden sugerir mejoras a tu contenido, como cambios en la redacción o la ubicación de palabras clave, para que sea más amigable para SEO. También pueden analizar el rendimiento SEO de tu contenido existente y sugerir mejoras.
|
| 14 |
-
2. **Generación de Contenido**: Las herramientas de AI pueden generar tu contenido, como articulos, newsletter o posts para RRSS, de modo que sea más amigable para SEO.
|
| 15 |
-
|
| 16 |
-
Para continuar, selecciona el caso de uso en la barra lateral.
|
| 17 |
-
''')
|
| 18 |
-
|
| 19 |
-
elif selection == 'Optimización de Contenido':
|
| 20 |
-
st.title("Optimización de Contenido")
|
| 21 |
-
st.markdown("Por favor, copia y pega tu artículo y tu clave de API de OpenAI a continuación:")
|
| 22 |
-
openai_key = st.text_input("Clave API OpenAI", type='password')
|
| 23 |
-
article_content = st.text_area("Contenido del Artículo")
|
| 24 |
-
|
| 25 |
-
if article_content and openai_key:
|
| 26 |
-
with st.spinner('Optimizando el contenido para SEO...'):
|
| 27 |
-
optimized_content = optimize_content_with_langchain(article_content, openai_key)
|
| 28 |
-
|
| 29 |
-
st.success('Optimización de contenido completada.')
|
| 30 |
-
st.write(optimized_content)
|
| 31 |
-
|
| 32 |
-
elif selection == 'Generación de Contenido':
|
| 33 |
-
st.title("Generación de Contenido")
|
| 34 |
-
st.markdown("Por favor, completa los siguientes campos y tu clave de API de OpenAI a continuación:")
|
| 35 |
-
openai_key = st.text_input("Clave API OpenAI", type='password')
|
| 36 |
-
content_type = st.text_area("Tipo de Contenido (Articulo, Posts, Newsletter)")
|
| 37 |
-
|
| 38 |
-
if content_type and openai_key:
|
| 39 |
-
with st.spinner('Creando el contenido optimizado para SEO...'):
|
| 40 |
-
optimized_content = content_generation_with_langchain(content_type, openai_key)
|
| 41 |
-
|
| 42 |
-
st.success('Optimización de contenido completada.')
|
| 43 |
-
st.write(optimized_content)
|
| 44 |
|
| 45 |
if __name__ == '__main__':
|
| 46 |
main()
|
|
|
|
| 1 |
+
from dotenv import load_dotenv
|
| 2 |
+
import os
|
| 3 |
import streamlit as st
|
| 4 |
from cases.optimize_content import optimize_content_with_langchain
|
| 5 |
from cases.content_generation import content_generation_with_langchain
|
| 6 |
|
| 7 |
+
load_dotenv()
|
| 8 |
+
|
| 9 |
+
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
|
| 10 |
+
|
| 11 |
+
def display_home():
|
| 12 |
+
st.title("Bienvenido a la página de inicio")
|
| 13 |
+
st.markdown('''
|
| 14 |
+
En esta aplicación, exploraremos los siguientes casos de uso de SEO potenciado por IA:
|
| 15 |
+
1. **Optimización de Contenido**: Las herramientas de AI pueden sugerir mejoras a tu contenido, como cambios en la redacción o la ubicación de palabras clave, para que sea más amigable para SEO. También pueden analizar el rendimiento SEO de tu contenido existente y sugerir mejoras.
|
| 16 |
+
2. **Generación de Contenido**: Las herramientas de AI pueden generar tu contenido, como artículos, newsletters o posts para RRSS, de modo que sea más amigable para SEO.
|
| 17 |
+
Para continuar, selecciona el caso de uso en la barra lateral.
|
| 18 |
+
''')
|
| 19 |
+
|
| 20 |
+
def handle_seo_action(text, action, action_text):
|
| 21 |
+
if text:
|
| 22 |
+
with st.spinner(f'{action_text}...'):
|
| 23 |
+
return action(text, OPENAI_API_KEY)
|
| 24 |
+
return None
|
| 25 |
+
|
| 26 |
+
def display_content_optimization():
|
| 27 |
+
st.title("Optimización de Contenido")
|
| 28 |
+
st.markdown("Por favor, copia y pega tu artículo a continuación:")
|
| 29 |
+
article_content = st.text_area("Contenido del Artículo")
|
| 30 |
+
|
| 31 |
+
optimized_content = handle_seo_action(article_content, optimize_content_with_langchain, 'Optimizando el contenido para SEO')
|
| 32 |
+
if optimized_content:
|
| 33 |
+
st.success('Optimización de contenido completada.')
|
| 34 |
+
st.write(optimized_content)
|
| 35 |
+
|
| 36 |
+
def display_content_generation():
|
| 37 |
+
st.title("Generación de Contenido")
|
| 38 |
+
st.markdown("Por favor, una descripción del tipo de contenido que deseas generar:")
|
| 39 |
+
content_type = st.text_area("Tipo de Contenido (Artículo de ventas, Posts sobre IA en RRSS, Newsletter de Suscripcion mensual sobre Tecnologia)")
|
| 40 |
+
|
| 41 |
+
generated_content = handle_seo_action(content_type, content_generation_with_langchain, 'Creando el contenido optimizado para SEO')
|
| 42 |
+
if generated_content:
|
| 43 |
+
st.success('Generación de contenido completada.')
|
| 44 |
+
st.write(generated_content)
|
| 45 |
+
|
| 46 |
+
MENU_FUNCTIONS = {
|
| 47 |
+
'Home': display_home,
|
| 48 |
+
'Optimización de Contenido': display_content_optimization,
|
| 49 |
+
'Generación de Contenido': display_content_generation,
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
def main():
|
| 53 |
st.sidebar.title("Menú")
|
| 54 |
+
selection = st.sidebar.radio("SEO Powered By AI", list(MENU_FUNCTIONS.keys()))
|
| 55 |
+
|
| 56 |
+
menu_function = MENU_FUNCTIONS[selection]
|
| 57 |
+
menu_function()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 58 |
|
| 59 |
if __name__ == '__main__':
|
| 60 |
main()
|
cases/content_generation.py
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
|
|
| 1 |
from langchain import LLMChain
|
| 2 |
from langchain.chat_models import ChatOpenAI
|
| 3 |
from langchain.prompts.chat import (
|
|
@@ -19,6 +20,7 @@ def content_generation_with_langchain(content, openai_key):
|
|
| 19 |
4. Optimización SEO: Asegúrate de que tus palabras clave aparecen en los lugares importantes de tu contenido, como el título, los subtítulos, el primer y último párrafo, y la descripción de la meta.
|
| 20 |
5. Analisis: 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.
|
| 21 |
"""
|
|
|
|
| 22 |
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
|
| 23 |
human_template = "{content}"
|
| 24 |
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
|
|
|
|
| 1 |
+
import streamlit as st
|
| 2 |
from langchain import LLMChain
|
| 3 |
from langchain.chat_models import ChatOpenAI
|
| 4 |
from langchain.prompts.chat import (
|
|
|
|
| 20 |
4. Optimización SEO: Asegúrate de que tus palabras clave aparecen en los lugares importantes de tu contenido, como el título, los subtítulos, el primer y último párrafo, y la descripción de la meta.
|
| 21 |
5. Analisis: 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.
|
| 22 |
"""
|
| 23 |
+
st.text_area(template)
|
| 24 |
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
|
| 25 |
human_template = "{content}"
|
| 26 |
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
|
cases/optimize_content.py
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
|
|
| 1 |
from langchain import LLMChain
|
| 2 |
from langchain.chat_models import ChatOpenAI
|
| 3 |
from langchain.prompts.chat import (
|
|
@@ -7,7 +8,10 @@ from langchain.prompts.chat import (
|
|
| 7 |
)
|
| 8 |
|
| 9 |
def optimize_content_with_langchain(content, openai_key):
|
| 10 |
-
chat = ChatOpenAI(
|
|
|
|
|
|
|
|
|
|
| 11 |
|
| 12 |
template = """
|
| 13 |
Debes actuar como un agente experto en SEO y Marketing Digital, y utilizando tus habilidades y conocimientos
|
|
@@ -17,6 +21,7 @@ def optimize_content_with_langchain(content, openai_key):
|
|
| 17 |
2. Proporcionar alternativas para titulo con el fin de generar más tracción a que los usuarios realicen click.
|
| 18 |
3. Proporcionar una lista de keywords que puedan incluirse en el contenido del articulo y que NO se encuentren en el contenido proporcionado por el usuario.
|
| 19 |
"""
|
|
|
|
| 20 |
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
|
| 21 |
human_template = "{content}"
|
| 22 |
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
|
|
|
|
| 1 |
+
import streamlit as st
|
| 2 |
from langchain import LLMChain
|
| 3 |
from langchain.chat_models import ChatOpenAI
|
| 4 |
from langchain.prompts.chat import (
|
|
|
|
| 8 |
)
|
| 9 |
|
| 10 |
def optimize_content_with_langchain(content, openai_key):
|
| 11 |
+
chat = ChatOpenAI(
|
| 12 |
+
temperature=0,
|
| 13 |
+
openai_api_key=openai_key
|
| 14 |
+
)
|
| 15 |
|
| 16 |
template = """
|
| 17 |
Debes actuar como un agente experto en SEO y Marketing Digital, y utilizando tus habilidades y conocimientos
|
|
|
|
| 21 |
2. Proporcionar alternativas para titulo con el fin de generar más tracción a que los usuarios realicen click.
|
| 22 |
3. Proporcionar una lista de keywords que puedan incluirse en el contenido del articulo y que NO se encuentren en el contenido proporcionado por el usuario.
|
| 23 |
"""
|
| 24 |
+
st.text_area(template)
|
| 25 |
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
|
| 26 |
human_template = "{content}"
|
| 27 |
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
|
requirements.txt
CHANGED
|
@@ -1,5 +1,4 @@
|
|
| 1 |
streamlit
|
| 2 |
openai
|
| 3 |
langchain
|
| 4 |
-
|
| 5 |
-
BeautifulSoup4
|
|
|
|
| 1 |
streamlit
|
| 2 |
openai
|
| 3 |
langchain
|
| 4 |
+
python-dotenv
|
|
|