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
|
|