diff --git a/python-chatgpt/README.md b/python-chatgpt/README.md index 8084254..24272bf 100644 --- a/python-chatgpt/README.md +++ b/python-chatgpt/README.md @@ -378,8 +378,132 @@ Y el chatbot ya recuerda la conversación: ![](img/python-chatgpt06.png) +4.2.1. - Color para diferenciar pregunta y respuesta +Vamos a darle un poco de color para que se vea mejor en la terminal. Lo haremos con la librería colorama. Así queda el código: +```python +import openai +import os +from dotenv import load_dotenv +from colorama import init, Fore + +load_dotenv() +api_key = os.getenv("OPENAI_API_KEY") + +openai.api_key = api_key + +preguntas_anteriores = [] +respuestas_anteriores = [] + +# Inicializar colorama +init() + + +def preguntar_chat_gpt(prompt, modelo="text-davinci-002"): + """ + Pregunta a la API de OpenAI GPT-3 + """ + + respuesta = openai.Completion.create( + engine=modelo, + prompt=prompt, + n=1, + temperature=0.1, + max_tokens=150 + ) + + return respuesta.choices[0].text.strip() + + +# Bienvenida +print(Fore.YELLOW + "Bienvenido al chatbot de OpenAI GPT-3." + Fore.RESET) +print(Fore.CYAN + "Escribe \"salir\" cuando quieras terminar la conversación." + Fore.RESET) + +# Loop para controlar el flujo de la conversación +while True: + + conversacion_historica = "" + + ingreso_usuario = input(Fore.MAGENTA + "Tú: " + Fore.RESET) + + if ingreso_usuario == "salir": + break + + for pregunta, respuesta in zip(preguntas_anteriores, respuestas_anteriores): + conversacion_historica += f"{Fore.BLUE}Usuario pregunta: {Fore.RESET}{pregunta}{respuesta}\n" + + prompt = f"{Fore.BLUE}Usuario pregunta: {Fore.RESET}{ingreso_usuario}" + conversacion_historica += prompt + respuesta_gpt = preguntar_chat_gpt(conversacion_historica) + + print(f"{Fore.GREEN}{respuesta_gpt}{Fore.RESET}") + + preguntas_anteriores.append(ingreso_usuario) + respuestas_anteriores.append(respuesta_gpt) +``` + ### 4.3. - Generación de contenido y resúmenes automáticos +Vamos a crear dos funciones, una para generar el contenido y otra para resumirlo. Creando un archivo nuevo con las bibliotecas necesarias y cargando la clave de nuevo, como en los anteriores casos. +Función generar contenido: +```python +def crear_contenido(tema, tokens, temperatura, modelo="text-davinci-002"): + prompt = f"Escribe un artículo corto sobre el tema: {tema}" + respuesta = openai.Completion.create( + engine=modelo, + prompt=prompt, + n=1, + temperature=temperatura, + max_tokens=tokens + ) + return respuesta.choices[0].text.strip() +``` + +Ahora, vamos a darle la dinámica al programa: +```python +# Bienvenida +print("Bienvenido a la aplicación de creación de contenido. \n Necesito que me des algunos datos.") +# Pedir datos +tema = input("Elige un tema para tu artículo: ") +tokens = int(input("Tokens máximos: ")) +temperatura = int( + input("Del 1 al 10, ¿Cuánto quieres que sea de creativo el artículo?: ")) / 10 +# Crear contenido +articulo_creado = crear_contenido(tema, tokens, temperatura) +print(articulo_creado) +``` + +![](img/python-chatgpt07.png) + +Ahora haremos lo mismo en otro fichero con la función para el resumen: +```python +def resumir_text(texto, tokens, temperatura, modelo="text-davinci-002 + prompt = f"Resume el siguiente texto: {texto}\n\n" + respuesta = openai.Completion.create( + engine=modelo, + prompt=prompt, + n=1, + temperature=temperatura, + max_tokens=tokens + ) + return respuesta.choices[0].text.strip() +``` +Y su dinámica: +```python +# Bienvenida +print("Bienvenido a la aplicación de creación de contenido. \n Necesito que me des algunos datos.") +# Pedir datos +original = input("Pega aquí el artículo a resumir: ") +tokens = int(input("Tokens máximos: ")) +temperatura = int( + input("Del 1 al 10, ¿Cuánto quieres que sea de creativo el resumen?: ")) / 10 +# Crear contenido +resumen = resumir_text(original, tokens, temperatura) +print(resumen) +``` + +Pero en este artículo hay un problema. No podemos pasar saltos de línea. Así que tenemos que pasar el artículo a texto plano y eliminar todos los saltos de línea. He usado este artículo: https://www.unicef.org/es/comunicados-prensa/ninos-afectados-por-sequia-zonas-africa-borde-catastrofe + +![](img/python-chatgpt08.png) ### 4.4. - Análisis de sentimiento y clasificaciones diff --git a/python-chatgpt/img/python-chatgpt07.png b/python-chatgpt/img/python-chatgpt07.png new file mode 100644 index 0000000..da1f90e Binary files /dev/null and b/python-chatgpt/img/python-chatgpt07.png differ diff --git a/python-chatgpt/img/python-chatgpt08.png b/python-chatgpt/img/python-chatgpt08.png new file mode 100644 index 0000000..ac146cb Binary files /dev/null and b/python-chatgpt/img/python-chatgpt08.png differ diff --git a/python-chatgpt/code/miPrograma.py b/python-chatgpt/src/01_miPrograma.py similarity index 97% rename from python-chatgpt/code/miPrograma.py rename to python-chatgpt/src/01_miPrograma.py index c715961..2c2979b 100644 --- a/python-chatgpt/code/miPrograma.py +++ b/python-chatgpt/src/01_miPrograma.py @@ -1,3 +1,7 @@ +""" +Primer programa con chatgpt +""" + import os import openai import spacy diff --git a/python-chatgpt/code/chatbot.py b/python-chatgpt/src/02_chatbot.py similarity index 62% rename from python-chatgpt/code/chatbot.py rename to python-chatgpt/src/02_chatbot.py index a4e6bbe..a0a4efe 100644 --- a/python-chatgpt/code/chatbot.py +++ b/python-chatgpt/src/02_chatbot.py @@ -1,6 +1,11 @@ +""" +Chatbot con OpenAI GPT-3 +""" + import openai import os from dotenv import load_dotenv +from colorama import init, Fore load_dotenv() api_key = os.getenv("OPENAI_API_KEY") @@ -10,6 +15,9 @@ openai.api_key = api_key preguntas_anteriores = [] respuestas_anteriores = [] +# Inicializar colorama +init() + def preguntar_chat_gpt(prompt, modelo="text-davinci-002"): """ @@ -28,22 +36,24 @@ def preguntar_chat_gpt(prompt, modelo="text-davinci-002"): # Bienvenida -print("Bienvenido al chatbot de OpenAI GPT-3. \nEscribe \"salir\" cuando quieras terminar la conversación.") +print(Fore.RED + "Bienvenido al chatbot de OpenAI GPT-3." + Fore.RESET) +print(Fore.RED + "Escribe \"salir\" cuando quieras terminar la conversación." + Fore.RESET) # Loop para controlar el flujo de la conversación while True: conversacion_historica = "" - ingreso_usuario = input("\nTú: ") + ingreso_usuario = input(Fore.MAGENTA + "Tú: " + Fore.RESET) if ingreso_usuario == "salir": break for pregunta, respuesta in zip(preguntas_anteriores, respuestas_anteriores): - conversacion_historica += f"Usuario pregunta: {pregunta}\nChatbot responde: {respuesta}\n" + conversacion_historica += f"{Fore.BLUE}Usuario pregunta: {Fore.RESET}{pregunta}" + conversacion_historica += f"{Fore.GREEN}Bot responde: {Fore.RESET}{respuesta}\n" - prompt = f"Usuario pregunta: {ingreso_usuario}" + prompt = f"{Fore.CYAN}Usuario pregunta: {Fore.RESET}{ingreso_usuario}" conversacion_historica += prompt respuesta_gpt = preguntar_chat_gpt(conversacion_historica) diff --git a/python-chatgpt/src/03_crear_contenido.py b/python-chatgpt/src/03_crear_contenido.py new file mode 100644 index 0000000..ab6c8a4 --- /dev/null +++ b/python-chatgpt/src/03_crear_contenido.py @@ -0,0 +1,47 @@ +""" +Programa para crear contenido +y resumirlo con la API de OpenAI +""" + +import openai +import os +from dotenv import load_dotenv + +load_dotenv() +api_key = os.getenv("OPENAI_API_KEY") + +openai.api_key = api_key + + +def crear_contenido(tema, tokens, temperatura, modelo="text-davinci-002"): + """ + Crea contenido con OpenAI GPT-3 + """ + + prompt = f"Escribe un artículo corto sobre el tema: {tema}" + + respuesta = openai.Completion.create( + engine=modelo, + prompt=prompt, + n=1, + temperature=temperatura, + max_tokens=tokens + ) + + return respuesta.choices[0].text.strip() + + +# Bienvenida +print("Bienvenido a la aplicación de creación de contenido. \n Necesito que me des algunos datos.") + +# Pedir datos +tema = input("Elige un tema para tu artículo: ") +tokens = int(input("Tokens máximos: ")) +temperatura = int( + input("Del 1 al 10, ¿Cuánto quieres que sea de creativo el artículo?: ")) / 10 + +# Crear contenido +articulo_creado = crear_contenido(tema, tokens, temperatura) + + +print(articulo_creado) diff --git a/python-chatgpt/src/04_resumir_articulo.py b/python-chatgpt/src/04_resumir_articulo.py new file mode 100644 index 0000000..c1d354e --- /dev/null +++ b/python-chatgpt/src/04_resumir_articulo.py @@ -0,0 +1,47 @@ +""" +Programa para crear contenido +y resumirlo con la API de OpenAI +""" + +import openai +import os +from dotenv import load_dotenv + +load_dotenv() +api_key = os.getenv("OPENAI_API_KEY") + +openai.api_key = api_key + + +def resumir_text(texto, tokens, temperatura, modelo="text-davinci-002"): + """ + Resumir texto con OpenAI GPT-3 + """ + + prompt = f"Resume el siguiente texto: {texto}\n\n" + + respuesta = openai.Completion.create( + engine=modelo, + prompt=prompt, + n=1, + temperature=temperatura, + max_tokens=tokens + ) + + return respuesta.choices[0].text.strip() + + +# Bienvenida +print("Bienvenido a la aplicación de creación de contenido. \n Necesito que me des algunos datos.") + +# Pedir datos +original = input("Pega aquí el artículo a resumir: ") +tokens = int(input("Tokens máximos: ")) +temperatura = int( + input("Del 1 al 10, ¿Cuánto quieres que sea de creativo el resumen?: ")) / 10 + +# Crear contenido +resumen = resumir_text(original, tokens, temperatura) + + +print(resumen) diff --git a/python-chatgpt/code/modelos_openai.json b/python-chatgpt/src/modelos_openai.json similarity index 100% rename from python-chatgpt/code/modelos_openai.json rename to python-chatgpt/src/modelos_openai.json