Una alternativa que tenemos para construir un chatbot son los mapas conceptuales, que nos ayudan a conectar conceptos y definir relaciones entre ellos. Esta práctica fue parte de la temática expuesta en la materia de Inteligencia Artificial, enfocada en la aplicación de modelos de representación del conocimiento en el desarrollo de asistentes virtuales.
Los mapas conceptuales o grafos de conocimiento permiten modelar información en forma de nodos y relaciones, facilitando la organización y el acceso a los datos. En este contexto, podemos crear un chatbot que responda preguntas basadas en la estructura de un grafo. Los conceptos utilizados son referentes a la temática de Inteligencia Artificial, aprovechando los temas propios de la materia de IA que imparto, en donde utilicé el ejemplo para explicar la relación.
El primer ejercicio consistió en construir un grafo dirigido que representa la relación entre distintos subcampos de la Inteligencia Artificial. Con la biblioteca networkx, al ejecutar el código se puede observar el grafo.

import networkx as nx
import matplotlib.pyplot as plt
G = nx.DiGraph()
G.add_edges_from([
("IA", "Machine Learning"),
("IA", "Deep Learning"),
("Machine Learning", "Redes Neuronales"),
("Machine Learning", "Árboles de Decisión"),
("Deep Learning", "CNN"),
("Deep Learning", "RNN")
])
plt.figure(figsize=(8,6))
nx.draw(G, with_labels=True, node_color='lightblue', edge_color='gray', node_size=3000, font_size=10)
plt.show()
Este ejercicio ayudó a visualizar cómo los conceptos de IA están conectados y cómo se pueden representar jerárquicamente mediante grafos.
y el chat bot?
Ahora toca integrar el mapa en un chatbot que pueda responder preguntas. Para esto se implementó un sistema de preguntas y respuestas que interpreta consultas sobre conceptos en el grafo y devuelve respuestas basadas en las conexiones definidas.
def responder_pregunta(pregunta):
pregunta = pregunta.lower()
# Pregunta: ¿Qué es <concepto>?
for nodo in G.nodes:
if f"qué es {nodo.lower()}" in pregunta:
subtemas = list(G.successors(nodo))
if subtemas:
return f"{nodo} es un área de la Inteligencia Artificial que incluye conceptos como: {', '.join(subtemas)}."
else:
return f"{nodo} es un concepto en Inteligencia Artificial, pero no tiene subcategorías en este modelo."
# Pregunta: ¿Qué relación tiene <concepto1> con <concepto2>?
conceptos = [nodo for nodo in G.nodes if nodo.lower() in pregunta]
if len(conceptos) == 2:
nodo1, nodo2 = conceptos
if G.has_edge(nodo1, nodo2):
return f"{nodo1} es una subcategoría de {nodo2}."
elif G.has_edge(nodo2, nodo1):
return f"{nodo2} es una subcategoría de {nodo1}."
else:
return f"{nodo1} y {nodo2} están relacionadas con Inteligencia Artificial, pero no directamente en este grafo."
return "Lo siento, no tengo información sobre eso."
Aquí algunas de las preguntas y la salida.

qué sigue?
El reto no termina aquí. Ahora se espera que los estudiantes puedan aplicar lo aprendido en otro contexto, utilizando otro tipo de conocimientos. La idea es ver los resultados más adelante y explorar cómo se pueden extender estos modelos a otras áreas de conocimiento.