Menu iconMenu icon
Procesamiento de Lenguaje Natural con Python Edición Actualizada

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.