Update python-chatGPT course
Signed-off-by: Manuel Vergara <manuel@vergaracarmona.es>
This commit is contained in:
parent
bd11fc17e2
commit
c3fdcdec37
@ -378,8 +378,132 @@ Y el chatbot ya recuerda la conversación:
|
|||||||
|
|
||||||
![](img/python-chatgpt06.png)
|
![](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
|
### 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
|
### 4.4. - Análisis de sentimiento y clasificaciones
|
||||||
|
|
||||||
|
BIN
python-chatgpt/img/python-chatgpt07.png
Normal file
BIN
python-chatgpt/img/python-chatgpt07.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 67 KiB |
BIN
python-chatgpt/img/python-chatgpt08.png
Normal file
BIN
python-chatgpt/img/python-chatgpt08.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 400 KiB |
@ -1,3 +1,7 @@
|
|||||||
|
"""
|
||||||
|
Primer programa con chatgpt
|
||||||
|
"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import openai
|
import openai
|
||||||
import spacy
|
import spacy
|
@ -1,6 +1,11 @@
|
|||||||
|
"""
|
||||||
|
Chatbot con OpenAI GPT-3
|
||||||
|
"""
|
||||||
|
|
||||||
import openai
|
import openai
|
||||||
import os
|
import os
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
|
from colorama import init, Fore
|
||||||
|
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
api_key = os.getenv("OPENAI_API_KEY")
|
api_key = os.getenv("OPENAI_API_KEY")
|
||||||
@ -10,6 +15,9 @@ openai.api_key = api_key
|
|||||||
preguntas_anteriores = []
|
preguntas_anteriores = []
|
||||||
respuestas_anteriores = []
|
respuestas_anteriores = []
|
||||||
|
|
||||||
|
# Inicializar colorama
|
||||||
|
init()
|
||||||
|
|
||||||
|
|
||||||
def preguntar_chat_gpt(prompt, modelo="text-davinci-002"):
|
def preguntar_chat_gpt(prompt, modelo="text-davinci-002"):
|
||||||
"""
|
"""
|
||||||
@ -28,22 +36,24 @@ def preguntar_chat_gpt(prompt, modelo="text-davinci-002"):
|
|||||||
|
|
||||||
|
|
||||||
# Bienvenida
|
# 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
|
# Loop para controlar el flujo de la conversación
|
||||||
while True:
|
while True:
|
||||||
|
|
||||||
conversacion_historica = ""
|
conversacion_historica = ""
|
||||||
|
|
||||||
ingreso_usuario = input("\nTú: ")
|
ingreso_usuario = input(Fore.MAGENTA + "Tú: " + Fore.RESET)
|
||||||
|
|
||||||
if ingreso_usuario == "salir":
|
if ingreso_usuario == "salir":
|
||||||
break
|
break
|
||||||
|
|
||||||
for pregunta, respuesta in zip(preguntas_anteriores, respuestas_anteriores):
|
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
|
conversacion_historica += prompt
|
||||||
respuesta_gpt = preguntar_chat_gpt(conversacion_historica)
|
respuesta_gpt = preguntar_chat_gpt(conversacion_historica)
|
||||||
|
|
47
python-chatgpt/src/03_crear_contenido.py
Normal file
47
python-chatgpt/src/03_crear_contenido.py
Normal file
@ -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)
|
47
python-chatgpt/src/04_resumir_articulo.py
Normal file
47
python-chatgpt/src/04_resumir_articulo.py
Normal file
@ -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)
|
Loading…
Reference in New Issue
Block a user