cadasme commited on
Commit
7c9815f
·
1 Parent(s): daf4b90

feat: casos de generacion y optimizacion de contenido

Browse files
.gitignore ADDED
@@ -0,0 +1,165 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Custom
2
+ *.mp3
3
+ *.wav
4
+ temp/
5
+
6
+ # Byte-compiled / optimized / DLL files
7
+ __pycache__/
8
+ *.py[cod]
9
+ *$py.class
10
+
11
+ # C extensions
12
+ *.so
13
+
14
+ # Distribution / packaging
15
+ .Python
16
+ build/
17
+ develop-eggs/
18
+ dist/
19
+ downloads/
20
+ eggs/
21
+ .eggs/
22
+ lib/
23
+ lib64/
24
+ parts/
25
+ sdist/
26
+ var/
27
+ wheels/
28
+ share/python-wheels/
29
+ *.egg-info/
30
+ .installed.cfg
31
+ *.egg
32
+ MANIFEST
33
+
34
+ # PyInstaller
35
+ # Usually these files are written by a python script from a template
36
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
37
+ *.manifest
38
+ *.spec
39
+
40
+ # Installer logs
41
+ pip-log.txt
42
+ pip-delete-this-directory.txt
43
+
44
+ # Unit test / coverage reports
45
+ htmlcov/
46
+ .tox/
47
+ .nox/
48
+ .coverage
49
+ .coverage.*
50
+ .cache
51
+ nosetests.xml
52
+ coverage.xml
53
+ *.cover
54
+ *.py,cover
55
+ .hypothesis/
56
+ .pytest_cache/
57
+ cover/
58
+
59
+ # Translations
60
+ *.mo
61
+ *.pot
62
+
63
+ # Django stuff:
64
+ *.log
65
+ local_settings.py
66
+ db.sqlite3
67
+ db.sqlite3-journal
68
+
69
+ # Flask stuff:
70
+ instance/
71
+ .webassets-cache
72
+
73
+ # Scrapy stuff:
74
+ .scrapy
75
+
76
+ # Sphinx documentation
77
+ docs/_build/
78
+
79
+ # PyBuilder
80
+ .pybuilder/
81
+ target/
82
+
83
+ # Jupyter Notebook
84
+ .ipynb_checkpoints
85
+
86
+ # IPython
87
+ profile_default/
88
+ ipython_config.py
89
+
90
+ # pyenv
91
+ # For a library or package, you might want to ignore these files since the code is
92
+ # intended to run in multiple environments; otherwise, check them in:
93
+ # .python-version
94
+
95
+ # pipenv
96
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
97
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
98
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
99
+ # install all needed dependencies.
100
+ #Pipfile.lock
101
+
102
+ # poetry
103
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
104
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
105
+ # commonly ignored for libraries.
106
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
107
+ #poetry.lock
108
+
109
+ # pdm
110
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
111
+ #pdm.lock
112
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
113
+ # in version control.
114
+ # https://pdm.fming.dev/#use-with-ide
115
+ .pdm.toml
116
+
117
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
118
+ __pypackages__/
119
+
120
+ # Celery stuff
121
+ celerybeat-schedule
122
+ celerybeat.pid
123
+
124
+ # SageMath parsed files
125
+ *.sage.py
126
+
127
+ # Environments
128
+ .env
129
+ .venv
130
+ env/
131
+ venv/
132
+ ENV/
133
+ env.bak/
134
+ venv.bak/
135
+
136
+ # Spyder project settings
137
+ .spyderproject
138
+ .spyproject
139
+
140
+ # Rope project settings
141
+ .ropeproject
142
+
143
+ # mkdocs documentation
144
+ /site
145
+
146
+ # mypy
147
+ .mypy_cache/
148
+ .dmypy.json
149
+ dmypy.json
150
+
151
+ # Pyre type checker
152
+ .pyre/
153
+
154
+ # pytype static type analyzer
155
+ .pytype/
156
+
157
+ # Cython debug symbols
158
+ cython_debug/
159
+
160
+ # PyCharm
161
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
162
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
163
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
164
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
165
+ #.idea/
app.py ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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", ['Home', 'Optimización de Contenido', 'Generación de Contenido'])
8
+
9
+ if selection == 'Home':
10
+ st.title("Bienvenido a la página de inicio")
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()
cases/content_generation.py ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from langchain import LLMChain
2
+ from langchain.chat_models import ChatOpenAI
3
+ from langchain.prompts.chat import (
4
+ ChatPromptTemplate,
5
+ SystemMessagePromptTemplate,
6
+ HumanMessagePromptTemplate,
7
+ )
8
+
9
+ def content_generation_with_langchain(content, openai_key):
10
+ chat = ChatOpenAI(temperature=0, openai_api_key=openai_key)
11
+
12
+ template = """
13
+ Debes actuar como un agente experto en SEO y Marketing Digital, y utilizando tus habilidades y conocimientos
14
+ deberás generar contenido basado en las necesidades del usuario optimizado para SEO.
15
+ Basado en esto deberás:
16
+ 1. Generar un esquema, esbozando la estrucutra del contenido a generar. Esto puede incluir una introducción, algunos puntos principales y una conclusión. La introducción debe ser atractiva y captar la atención del lector, los puntos principales deben proporcionar información valiosa y la conclusión debe resumir los puntos clave y proporcionar una llamada a la acción.
17
+ 2. Escritura del contenido: Desarrolla cada sección de tu esquema en párrafos completos. Intenta mantener cada párrafo corto y fácil de leer. Utiliza un lenguaje claro y directo, y evita el jergón siempre que sea posible. Incluye tus palabras clave de manera natural en el texto.
18
+ 3. Inclusión de emojies: Los emojis pueden hacer que tu contenido sea más atractivo y amigable. Sin embargo, debes usarlos con moderación para evitar sobrecargar tu contenido. Inclúyelos en puntos donde puedas resaltar una emoción o un punto importante, pero asegúrate de que sean apropiados para el tono y el contenido de tu artículo.
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)
25
+ chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
26
+
27
+ chain = LLMChain(llm=chat, prompt=chat_prompt)
28
+ optimized_content = chain.run(content=content)
29
+
30
+ return optimized_content
cases/optimize_content.py ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from langchain import LLMChain
2
+ from langchain.chat_models import ChatOpenAI
3
+ from langchain.prompts.chat import (
4
+ ChatPromptTemplate,
5
+ SystemMessagePromptTemplate,
6
+ HumanMessagePromptTemplate,
7
+ )
8
+
9
+ def optimize_content_with_langchain(content, openai_key):
10
+ chat = ChatOpenAI(temperature=0, openai_api_key=openai_key)
11
+
12
+ template = """
13
+ Debes actuar como un agente experto en SEO y Marketing Digital, y utilizando tus habilidades y conocimientos
14
+ deberás ayudar al usuario a determinar como mejorar el SEO del articulo en el cual este este trabajando.
15
+ Basado en esto deberás:
16
+ 1. Proporcionar puntos de mejora respecto al contenido del articulo.
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)
23
+ chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
24
+
25
+ chain = LLMChain(llm=chat, prompt=chat_prompt)
26
+ optimized_content = chain.run(content=content)
27
+
28
+ return optimized_content
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ streamlit
2
+ openai
3
+ langchain
4
+ requests
5
+ BeautifulSoup4