Capítulo 11: Proyecto de Chatbot: Chatbot Asistente Personal
11.3 Construcción y Entrenamiento del Chatbot
En esta sección, nos enfocaremos en construir y entrenar nuestro chatbot asistente personal. Esto implica implementar las funcionalidades básicas, integrar los datos preprocesados y entrenar el modelo del chatbot para entender y responder eficazmente a las entradas de los usuarios.
11.3.1 Implementación de la Funcionalidad Básica
La funcionalidad básica de nuestro chatbot incluye el motor NLP para el reconocimiento de intenciones, funciones de gestión de tareas e integración con APIs externas. Comencemos implementando el motor NLP, que procesa las entradas de los usuarios y determina la intención correspondiente.
Implementación del Motor NLP
El motor NLP usará el modelo que entrenamos en la sección anterior para reconocer intenciones y extraer entidades de las entradas de los usuarios.
nlp_engine.py:
import json
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import load_model
import nltk
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
import string
import pickle
# Load pre-trained model and other resources
model = load_model('models/nlp_model.h5')
with open('models/vectorizer.pickle', 'rb') as file:
vectorizer = pickle.load(file)
with open('models/label_encoder.pickle', 'rb') as file:
label_encoder = pickle.load(file)
# Initialize lemmatizer
lemmatizer = WordNetLemmatizer()
# Define preprocessing function
def preprocess_text(text):
text = text.lower()
tokens = nltk.word_tokenize(text)
tokens = [word for word in tokens if word not in string.punctuation and word not in stopwords.words('english')]
tokens = [lemmatizer.lemmatize(word) for word in tokens]
return ' '.join(tokens)
# Define function to predict intent
def predict_intent(text):
preprocessed_text = preprocess_text(text)
input_vector = vectorizer.transform([preprocessed_text]).toarray()
predictions = model.predict(input_vector)
predicted_intent = label_encoder.inverse_transform([np.argmax(predictions)])
return predicted_intent[0]
# Test the NLP engine
user_input = "Can you set a reminder?"
predicted_intent = predict_intent(user_input)
print(f"Predicted Intent: {predicted_intent}")
En este script, cargamos el modelo preentrenado, el vectorizador y el codificador de etiquetas. Definimos una función de preprocesamiento para normalizar el texto, tokenizarlo, eliminar palabras vacías y lematizar tokens. La función predict_intent
utiliza el texto preprocesado para predecir la intención utilizando el modelo entrenado.
11.3.2 Integración de APIs Externas
Para mejorar la funcionalidad del chatbot, integraremos APIs externas para tareas como actualizaciones meteorológicas y conocimiento general. Implementemos la integración con una API meteorológica.
Integración de API para Actualizaciones Meteorológicas
Usaremos la API de OpenWeatherMap para obtener información meteorológica.
api_integration.py:
import requests
# Define function to get weather updates
def get_weather(city):
api_key = "your_openweathermap_api_key"
base_url = "<http://api.openweathermap.org/data/2.5/weather?">
complete_url = base_url + "q=" + city + "&appid=" + api_key + "&units=metric"
response = requests.get(complete_url)
data = response.json()
if data["cod"] != "404":
main = data["main"]
weather = data["weather"][0]
temperature = main["temp"]
weather_description = weather["description"]
return f"The temperature in {city} is {temperature}°C with {weather_description}."
else:
return "City not found."
# Test the weather API integration
city = "New York"
weather_update = get_weather(city)
print(f"Weather Update: {weather_update}")
En este script, definimos una función get_weather
que toma el nombre de una ciudad como entrada, obtiene información meteorológica de la API de OpenWeatherMap y devuelve una actualización meteorológica formateada.
11.3.3 Implementación de Funciones de Gestión de Tareas
A continuación, implementaremos funciones de gestión de tareas, como establecer recordatorios y gestionar listas de tareas.
Gestor de Tareas para Recordatorios
Crearemos funciones para agregar, ver y eliminar recordatorios.
task_manager.py:
import json
from datetime import datetime
# Load reminders from file
def load_reminders():
try:
with open('data/reminders.json', 'r') as file:
reminders = json.load(file)
except FileNotFoundError:
reminders = []
return reminders
# Save reminders to file
def save_reminders(reminders):
with open('data/reminders.json', 'w') as file:
json.dump(reminders, file, indent=4)
# Add a new reminder
def add_reminder(reminder_text, reminder_time):
reminders = load_reminders()
reminder = {
"text": reminder_text,
"time": reminder_time
}
reminders.append(reminder)
save_reminders(reminders)
return "Reminder added successfully."
# View all reminders
def view_reminders():
reminders = load_reminders()
if not reminders:
return "You have no reminders."
reminders_str = "\\n".join([f"{reminder['time']}: {reminder['text']}" for reminder in reminders])
return f"Your reminders:\\n{reminders_str}"
# Delete a reminder
def delete_reminder(reminder_text):
reminders = load_reminders()
reminders = [reminder for reminder in reminders if reminder['text'] != reminder_text]
save_reminders(reminders)
return "Reminder deleted successfully."
# Test the task manager functions
print(add_reminder("Buy groceries", "2024-06-27 18:00"))
print(view_reminders())
print(delete_reminder("Buy groceries"))
print(view_reminders())
En este script, definimos funciones para cargar y guardar recordatorios desde/hacia un archivo JSON, agregar un nuevo recordatorio, ver todos los recordatorios y eliminar un recordatorio. Estas funciones serán utilizadas por el chatbot para gestionar los recordatorios de los usuarios.
11.3.4 Creación de la Interfaz del Chatbot
Finalmente, construiremos la interfaz del chatbot para interactuar con los usuarios. Esto puede ser una interfaz de línea de comandos simple o una interfaz basada en web usando Flask.
Interfaz del Chatbot
Implementemos una interfaz de línea de comandos por simplicidad.
chatbot_interface.py:
from nlp_engine import predict_intent
from api_integration import get_weather
from task_manager import add_reminder, view_reminders, delete_reminder
def chatbot_response(user_input):
intent = predict_intent(user_input)
if intent == "greeting":
return "Hello! How can I assist you today?"
elif intent == "goodbye":
return "Goodbye! Have a great day!"
elif intent == "weather":
return "Which city would you like the weather update for?"
elif intent == "reminder":
return "What would you like to be reminded about and when?"
elif intent == "knowledge":
return "Here's a fun fact: Did you know that honey never spoils?"
else:
return "I'm sorry, I don't understand that. Can you please rephrase?"
# Test the chatbot interface
while True:
user_input = input("You: ")
if user_input.lower() == "exit":
print("ChatBot: Goodbye! Have a great day!")
break
response = chatbot_response(user_input)
print(f"ChatBot: {response}")
En este script, la función chatbot_response
determina la intención de la entrada del usuario y proporciona una respuesta apropiada. El chatbot puede manejar saludos, despedidas, actualizaciones meteorológicas, recordatorios y consultas de conocimiento general.
En esta sección, construimos y entrenamos nuestro chatbot asistente personal. Implementamos las funcionalidades principales, incluyendo el motor NLP para el reconocimiento de intenciones, la integración con APIs externas para actualizaciones meteorológicas y funciones de gestión de tareas para manejar recordatorios. También creamos una interfaz de línea de comandos simple para interactuar con el chatbot. Estos componentes trabajan juntos para proporcionar una experiencia de usuario robusta e interactiva.
11.3 Construcción y Entrenamiento del Chatbot
En esta sección, nos enfocaremos en construir y entrenar nuestro chatbot asistente personal. Esto implica implementar las funcionalidades básicas, integrar los datos preprocesados y entrenar el modelo del chatbot para entender y responder eficazmente a las entradas de los usuarios.
11.3.1 Implementación de la Funcionalidad Básica
La funcionalidad básica de nuestro chatbot incluye el motor NLP para el reconocimiento de intenciones, funciones de gestión de tareas e integración con APIs externas. Comencemos implementando el motor NLP, que procesa las entradas de los usuarios y determina la intención correspondiente.
Implementación del Motor NLP
El motor NLP usará el modelo que entrenamos en la sección anterior para reconocer intenciones y extraer entidades de las entradas de los usuarios.
nlp_engine.py:
import json
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import load_model
import nltk
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
import string
import pickle
# Load pre-trained model and other resources
model = load_model('models/nlp_model.h5')
with open('models/vectorizer.pickle', 'rb') as file:
vectorizer = pickle.load(file)
with open('models/label_encoder.pickle', 'rb') as file:
label_encoder = pickle.load(file)
# Initialize lemmatizer
lemmatizer = WordNetLemmatizer()
# Define preprocessing function
def preprocess_text(text):
text = text.lower()
tokens = nltk.word_tokenize(text)
tokens = [word for word in tokens if word not in string.punctuation and word not in stopwords.words('english')]
tokens = [lemmatizer.lemmatize(word) for word in tokens]
return ' '.join(tokens)
# Define function to predict intent
def predict_intent(text):
preprocessed_text = preprocess_text(text)
input_vector = vectorizer.transform([preprocessed_text]).toarray()
predictions = model.predict(input_vector)
predicted_intent = label_encoder.inverse_transform([np.argmax(predictions)])
return predicted_intent[0]
# Test the NLP engine
user_input = "Can you set a reminder?"
predicted_intent = predict_intent(user_input)
print(f"Predicted Intent: {predicted_intent}")
En este script, cargamos el modelo preentrenado, el vectorizador y el codificador de etiquetas. Definimos una función de preprocesamiento para normalizar el texto, tokenizarlo, eliminar palabras vacías y lematizar tokens. La función predict_intent
utiliza el texto preprocesado para predecir la intención utilizando el modelo entrenado.
11.3.2 Integración de APIs Externas
Para mejorar la funcionalidad del chatbot, integraremos APIs externas para tareas como actualizaciones meteorológicas y conocimiento general. Implementemos la integración con una API meteorológica.
Integración de API para Actualizaciones Meteorológicas
Usaremos la API de OpenWeatherMap para obtener información meteorológica.
api_integration.py:
import requests
# Define function to get weather updates
def get_weather(city):
api_key = "your_openweathermap_api_key"
base_url = "<http://api.openweathermap.org/data/2.5/weather?">
complete_url = base_url + "q=" + city + "&appid=" + api_key + "&units=metric"
response = requests.get(complete_url)
data = response.json()
if data["cod"] != "404":
main = data["main"]
weather = data["weather"][0]
temperature = main["temp"]
weather_description = weather["description"]
return f"The temperature in {city} is {temperature}°C with {weather_description}."
else:
return "City not found."
# Test the weather API integration
city = "New York"
weather_update = get_weather(city)
print(f"Weather Update: {weather_update}")
En este script, definimos una función get_weather
que toma el nombre de una ciudad como entrada, obtiene información meteorológica de la API de OpenWeatherMap y devuelve una actualización meteorológica formateada.
11.3.3 Implementación de Funciones de Gestión de Tareas
A continuación, implementaremos funciones de gestión de tareas, como establecer recordatorios y gestionar listas de tareas.
Gestor de Tareas para Recordatorios
Crearemos funciones para agregar, ver y eliminar recordatorios.
task_manager.py:
import json
from datetime import datetime
# Load reminders from file
def load_reminders():
try:
with open('data/reminders.json', 'r') as file:
reminders = json.load(file)
except FileNotFoundError:
reminders = []
return reminders
# Save reminders to file
def save_reminders(reminders):
with open('data/reminders.json', 'w') as file:
json.dump(reminders, file, indent=4)
# Add a new reminder
def add_reminder(reminder_text, reminder_time):
reminders = load_reminders()
reminder = {
"text": reminder_text,
"time": reminder_time
}
reminders.append(reminder)
save_reminders(reminders)
return "Reminder added successfully."
# View all reminders
def view_reminders():
reminders = load_reminders()
if not reminders:
return "You have no reminders."
reminders_str = "\\n".join([f"{reminder['time']}: {reminder['text']}" for reminder in reminders])
return f"Your reminders:\\n{reminders_str}"
# Delete a reminder
def delete_reminder(reminder_text):
reminders = load_reminders()
reminders = [reminder for reminder in reminders if reminder['text'] != reminder_text]
save_reminders(reminders)
return "Reminder deleted successfully."
# Test the task manager functions
print(add_reminder("Buy groceries", "2024-06-27 18:00"))
print(view_reminders())
print(delete_reminder("Buy groceries"))
print(view_reminders())
En este script, definimos funciones para cargar y guardar recordatorios desde/hacia un archivo JSON, agregar un nuevo recordatorio, ver todos los recordatorios y eliminar un recordatorio. Estas funciones serán utilizadas por el chatbot para gestionar los recordatorios de los usuarios.
11.3.4 Creación de la Interfaz del Chatbot
Finalmente, construiremos la interfaz del chatbot para interactuar con los usuarios. Esto puede ser una interfaz de línea de comandos simple o una interfaz basada en web usando Flask.
Interfaz del Chatbot
Implementemos una interfaz de línea de comandos por simplicidad.
chatbot_interface.py:
from nlp_engine import predict_intent
from api_integration import get_weather
from task_manager import add_reminder, view_reminders, delete_reminder
def chatbot_response(user_input):
intent = predict_intent(user_input)
if intent == "greeting":
return "Hello! How can I assist you today?"
elif intent == "goodbye":
return "Goodbye! Have a great day!"
elif intent == "weather":
return "Which city would you like the weather update for?"
elif intent == "reminder":
return "What would you like to be reminded about and when?"
elif intent == "knowledge":
return "Here's a fun fact: Did you know that honey never spoils?"
else:
return "I'm sorry, I don't understand that. Can you please rephrase?"
# Test the chatbot interface
while True:
user_input = input("You: ")
if user_input.lower() == "exit":
print("ChatBot: Goodbye! Have a great day!")
break
response = chatbot_response(user_input)
print(f"ChatBot: {response}")
En este script, la función chatbot_response
determina la intención de la entrada del usuario y proporciona una respuesta apropiada. El chatbot puede manejar saludos, despedidas, actualizaciones meteorológicas, recordatorios y consultas de conocimiento general.
En esta sección, construimos y entrenamos nuestro chatbot asistente personal. Implementamos las funcionalidades principales, incluyendo el motor NLP para el reconocimiento de intenciones, la integración con APIs externas para actualizaciones meteorológicas y funciones de gestión de tareas para manejar recordatorios. También creamos una interfaz de línea de comandos simple para interactuar con el chatbot. Estos componentes trabajan juntos para proporcionar una experiencia de usuario robusta e interactiva.
11.3 Construcción y Entrenamiento del Chatbot
En esta sección, nos enfocaremos en construir y entrenar nuestro chatbot asistente personal. Esto implica implementar las funcionalidades básicas, integrar los datos preprocesados y entrenar el modelo del chatbot para entender y responder eficazmente a las entradas de los usuarios.
11.3.1 Implementación de la Funcionalidad Básica
La funcionalidad básica de nuestro chatbot incluye el motor NLP para el reconocimiento de intenciones, funciones de gestión de tareas e integración con APIs externas. Comencemos implementando el motor NLP, que procesa las entradas de los usuarios y determina la intención correspondiente.
Implementación del Motor NLP
El motor NLP usará el modelo que entrenamos en la sección anterior para reconocer intenciones y extraer entidades de las entradas de los usuarios.
nlp_engine.py:
import json
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import load_model
import nltk
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
import string
import pickle
# Load pre-trained model and other resources
model = load_model('models/nlp_model.h5')
with open('models/vectorizer.pickle', 'rb') as file:
vectorizer = pickle.load(file)
with open('models/label_encoder.pickle', 'rb') as file:
label_encoder = pickle.load(file)
# Initialize lemmatizer
lemmatizer = WordNetLemmatizer()
# Define preprocessing function
def preprocess_text(text):
text = text.lower()
tokens = nltk.word_tokenize(text)
tokens = [word for word in tokens if word not in string.punctuation and word not in stopwords.words('english')]
tokens = [lemmatizer.lemmatize(word) for word in tokens]
return ' '.join(tokens)
# Define function to predict intent
def predict_intent(text):
preprocessed_text = preprocess_text(text)
input_vector = vectorizer.transform([preprocessed_text]).toarray()
predictions = model.predict(input_vector)
predicted_intent = label_encoder.inverse_transform([np.argmax(predictions)])
return predicted_intent[0]
# Test the NLP engine
user_input = "Can you set a reminder?"
predicted_intent = predict_intent(user_input)
print(f"Predicted Intent: {predicted_intent}")
En este script, cargamos el modelo preentrenado, el vectorizador y el codificador de etiquetas. Definimos una función de preprocesamiento para normalizar el texto, tokenizarlo, eliminar palabras vacías y lematizar tokens. La función predict_intent
utiliza el texto preprocesado para predecir la intención utilizando el modelo entrenado.
11.3.2 Integración de APIs Externas
Para mejorar la funcionalidad del chatbot, integraremos APIs externas para tareas como actualizaciones meteorológicas y conocimiento general. Implementemos la integración con una API meteorológica.
Integración de API para Actualizaciones Meteorológicas
Usaremos la API de OpenWeatherMap para obtener información meteorológica.
api_integration.py:
import requests
# Define function to get weather updates
def get_weather(city):
api_key = "your_openweathermap_api_key"
base_url = "<http://api.openweathermap.org/data/2.5/weather?">
complete_url = base_url + "q=" + city + "&appid=" + api_key + "&units=metric"
response = requests.get(complete_url)
data = response.json()
if data["cod"] != "404":
main = data["main"]
weather = data["weather"][0]
temperature = main["temp"]
weather_description = weather["description"]
return f"The temperature in {city} is {temperature}°C with {weather_description}."
else:
return "City not found."
# Test the weather API integration
city = "New York"
weather_update = get_weather(city)
print(f"Weather Update: {weather_update}")
En este script, definimos una función get_weather
que toma el nombre de una ciudad como entrada, obtiene información meteorológica de la API de OpenWeatherMap y devuelve una actualización meteorológica formateada.
11.3.3 Implementación de Funciones de Gestión de Tareas
A continuación, implementaremos funciones de gestión de tareas, como establecer recordatorios y gestionar listas de tareas.
Gestor de Tareas para Recordatorios
Crearemos funciones para agregar, ver y eliminar recordatorios.
task_manager.py:
import json
from datetime import datetime
# Load reminders from file
def load_reminders():
try:
with open('data/reminders.json', 'r') as file:
reminders = json.load(file)
except FileNotFoundError:
reminders = []
return reminders
# Save reminders to file
def save_reminders(reminders):
with open('data/reminders.json', 'w') as file:
json.dump(reminders, file, indent=4)
# Add a new reminder
def add_reminder(reminder_text, reminder_time):
reminders = load_reminders()
reminder = {
"text": reminder_text,
"time": reminder_time
}
reminders.append(reminder)
save_reminders(reminders)
return "Reminder added successfully."
# View all reminders
def view_reminders():
reminders = load_reminders()
if not reminders:
return "You have no reminders."
reminders_str = "\\n".join([f"{reminder['time']}: {reminder['text']}" for reminder in reminders])
return f"Your reminders:\\n{reminders_str}"
# Delete a reminder
def delete_reminder(reminder_text):
reminders = load_reminders()
reminders = [reminder for reminder in reminders if reminder['text'] != reminder_text]
save_reminders(reminders)
return "Reminder deleted successfully."
# Test the task manager functions
print(add_reminder("Buy groceries", "2024-06-27 18:00"))
print(view_reminders())
print(delete_reminder("Buy groceries"))
print(view_reminders())
En este script, definimos funciones para cargar y guardar recordatorios desde/hacia un archivo JSON, agregar un nuevo recordatorio, ver todos los recordatorios y eliminar un recordatorio. Estas funciones serán utilizadas por el chatbot para gestionar los recordatorios de los usuarios.
11.3.4 Creación de la Interfaz del Chatbot
Finalmente, construiremos la interfaz del chatbot para interactuar con los usuarios. Esto puede ser una interfaz de línea de comandos simple o una interfaz basada en web usando Flask.
Interfaz del Chatbot
Implementemos una interfaz de línea de comandos por simplicidad.
chatbot_interface.py:
from nlp_engine import predict_intent
from api_integration import get_weather
from task_manager import add_reminder, view_reminders, delete_reminder
def chatbot_response(user_input):
intent = predict_intent(user_input)
if intent == "greeting":
return "Hello! How can I assist you today?"
elif intent == "goodbye":
return "Goodbye! Have a great day!"
elif intent == "weather":
return "Which city would you like the weather update for?"
elif intent == "reminder":
return "What would you like to be reminded about and when?"
elif intent == "knowledge":
return "Here's a fun fact: Did you know that honey never spoils?"
else:
return "I'm sorry, I don't understand that. Can you please rephrase?"
# Test the chatbot interface
while True:
user_input = input("You: ")
if user_input.lower() == "exit":
print("ChatBot: Goodbye! Have a great day!")
break
response = chatbot_response(user_input)
print(f"ChatBot: {response}")
En este script, la función chatbot_response
determina la intención de la entrada del usuario y proporciona una respuesta apropiada. El chatbot puede manejar saludos, despedidas, actualizaciones meteorológicas, recordatorios y consultas de conocimiento general.
En esta sección, construimos y entrenamos nuestro chatbot asistente personal. Implementamos las funcionalidades principales, incluyendo el motor NLP para el reconocimiento de intenciones, la integración con APIs externas para actualizaciones meteorológicas y funciones de gestión de tareas para manejar recordatorios. También creamos una interfaz de línea de comandos simple para interactuar con el chatbot. Estos componentes trabajan juntos para proporcionar una experiencia de usuario robusta e interactiva.
11.3 Construcción y Entrenamiento del Chatbot
En esta sección, nos enfocaremos en construir y entrenar nuestro chatbot asistente personal. Esto implica implementar las funcionalidades básicas, integrar los datos preprocesados y entrenar el modelo del chatbot para entender y responder eficazmente a las entradas de los usuarios.
11.3.1 Implementación de la Funcionalidad Básica
La funcionalidad básica de nuestro chatbot incluye el motor NLP para el reconocimiento de intenciones, funciones de gestión de tareas e integración con APIs externas. Comencemos implementando el motor NLP, que procesa las entradas de los usuarios y determina la intención correspondiente.
Implementación del Motor NLP
El motor NLP usará el modelo que entrenamos en la sección anterior para reconocer intenciones y extraer entidades de las entradas de los usuarios.
nlp_engine.py:
import json
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import load_model
import nltk
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
import string
import pickle
# Load pre-trained model and other resources
model = load_model('models/nlp_model.h5')
with open('models/vectorizer.pickle', 'rb') as file:
vectorizer = pickle.load(file)
with open('models/label_encoder.pickle', 'rb') as file:
label_encoder = pickle.load(file)
# Initialize lemmatizer
lemmatizer = WordNetLemmatizer()
# Define preprocessing function
def preprocess_text(text):
text = text.lower()
tokens = nltk.word_tokenize(text)
tokens = [word for word in tokens if word not in string.punctuation and word not in stopwords.words('english')]
tokens = [lemmatizer.lemmatize(word) for word in tokens]
return ' '.join(tokens)
# Define function to predict intent
def predict_intent(text):
preprocessed_text = preprocess_text(text)
input_vector = vectorizer.transform([preprocessed_text]).toarray()
predictions = model.predict(input_vector)
predicted_intent = label_encoder.inverse_transform([np.argmax(predictions)])
return predicted_intent[0]
# Test the NLP engine
user_input = "Can you set a reminder?"
predicted_intent = predict_intent(user_input)
print(f"Predicted Intent: {predicted_intent}")
En este script, cargamos el modelo preentrenado, el vectorizador y el codificador de etiquetas. Definimos una función de preprocesamiento para normalizar el texto, tokenizarlo, eliminar palabras vacías y lematizar tokens. La función predict_intent
utiliza el texto preprocesado para predecir la intención utilizando el modelo entrenado.
11.3.2 Integración de APIs Externas
Para mejorar la funcionalidad del chatbot, integraremos APIs externas para tareas como actualizaciones meteorológicas y conocimiento general. Implementemos la integración con una API meteorológica.
Integración de API para Actualizaciones Meteorológicas
Usaremos la API de OpenWeatherMap para obtener información meteorológica.
api_integration.py:
import requests
# Define function to get weather updates
def get_weather(city):
api_key = "your_openweathermap_api_key"
base_url = "<http://api.openweathermap.org/data/2.5/weather?">
complete_url = base_url + "q=" + city + "&appid=" + api_key + "&units=metric"
response = requests.get(complete_url)
data = response.json()
if data["cod"] != "404":
main = data["main"]
weather = data["weather"][0]
temperature = main["temp"]
weather_description = weather["description"]
return f"The temperature in {city} is {temperature}°C with {weather_description}."
else:
return "City not found."
# Test the weather API integration
city = "New York"
weather_update = get_weather(city)
print(f"Weather Update: {weather_update}")
En este script, definimos una función get_weather
que toma el nombre de una ciudad como entrada, obtiene información meteorológica de la API de OpenWeatherMap y devuelve una actualización meteorológica formateada.
11.3.3 Implementación de Funciones de Gestión de Tareas
A continuación, implementaremos funciones de gestión de tareas, como establecer recordatorios y gestionar listas de tareas.
Gestor de Tareas para Recordatorios
Crearemos funciones para agregar, ver y eliminar recordatorios.
task_manager.py:
import json
from datetime import datetime
# Load reminders from file
def load_reminders():
try:
with open('data/reminders.json', 'r') as file:
reminders = json.load(file)
except FileNotFoundError:
reminders = []
return reminders
# Save reminders to file
def save_reminders(reminders):
with open('data/reminders.json', 'w') as file:
json.dump(reminders, file, indent=4)
# Add a new reminder
def add_reminder(reminder_text, reminder_time):
reminders = load_reminders()
reminder = {
"text": reminder_text,
"time": reminder_time
}
reminders.append(reminder)
save_reminders(reminders)
return "Reminder added successfully."
# View all reminders
def view_reminders():
reminders = load_reminders()
if not reminders:
return "You have no reminders."
reminders_str = "\\n".join([f"{reminder['time']}: {reminder['text']}" for reminder in reminders])
return f"Your reminders:\\n{reminders_str}"
# Delete a reminder
def delete_reminder(reminder_text):
reminders = load_reminders()
reminders = [reminder for reminder in reminders if reminder['text'] != reminder_text]
save_reminders(reminders)
return "Reminder deleted successfully."
# Test the task manager functions
print(add_reminder("Buy groceries", "2024-06-27 18:00"))
print(view_reminders())
print(delete_reminder("Buy groceries"))
print(view_reminders())
En este script, definimos funciones para cargar y guardar recordatorios desde/hacia un archivo JSON, agregar un nuevo recordatorio, ver todos los recordatorios y eliminar un recordatorio. Estas funciones serán utilizadas por el chatbot para gestionar los recordatorios de los usuarios.
11.3.4 Creación de la Interfaz del Chatbot
Finalmente, construiremos la interfaz del chatbot para interactuar con los usuarios. Esto puede ser una interfaz de línea de comandos simple o una interfaz basada en web usando Flask.
Interfaz del Chatbot
Implementemos una interfaz de línea de comandos por simplicidad.
chatbot_interface.py:
from nlp_engine import predict_intent
from api_integration import get_weather
from task_manager import add_reminder, view_reminders, delete_reminder
def chatbot_response(user_input):
intent = predict_intent(user_input)
if intent == "greeting":
return "Hello! How can I assist you today?"
elif intent == "goodbye":
return "Goodbye! Have a great day!"
elif intent == "weather":
return "Which city would you like the weather update for?"
elif intent == "reminder":
return "What would you like to be reminded about and when?"
elif intent == "knowledge":
return "Here's a fun fact: Did you know that honey never spoils?"
else:
return "I'm sorry, I don't understand that. Can you please rephrase?"
# Test the chatbot interface
while True:
user_input = input("You: ")
if user_input.lower() == "exit":
print("ChatBot: Goodbye! Have a great day!")
break
response = chatbot_response(user_input)
print(f"ChatBot: {response}")
En este script, la función chatbot_response
determina la intención de la entrada del usuario y proporciona una respuesta apropiada. El chatbot puede manejar saludos, despedidas, actualizaciones meteorológicas, recordatorios y consultas de conocimiento general.
En esta sección, construimos y entrenamos nuestro chatbot asistente personal. Implementamos las funcionalidades principales, incluyendo el motor NLP para el reconocimiento de intenciones, la integración con APIs externas para actualizaciones meteorológicas y funciones de gestión de tareas para manejar recordatorios. También creamos una interfaz de línea de comandos simple para interactuar con el chatbot. Estos componentes trabajan juntos para proporcionar una experiencia de usuario robusta e interactiva.