Tabla de contenidos
¿Qué es el proyecto y por qué completarlo?
Un tema potencialmente candente es la creación de chatbots con tecnología de gráficos. Si bien esto no es de ninguna manera un chatbot avanzado, es una forma de combinar el poder de TigerGraph y Discord para crear un bot receptivo para un servidor de Discord.
Paso 1: crea el bot en Discord
Primero, necesitas crear el bot en Discord. Para este proyecto, usaremos Discord.py. Para crear bots, necesitarás una cuenta de Discord y habilitar el modo de desarrollador. Entonces deberías poder acceder a la página de aplicaciones: https://discord.com/developers/applications
Desde aquí, en la esquina superior derecha, haz clic en «Nueva aplicación».
Haz clic en el botón azul «Nueva aplicación».
A continuación, asigna un nombre a tu aplicación cuando te lo solicite.
Después de nombrarlo, debes redirigir a una página para el bot. Aquí, en la barra lateral izquierda, cambia a «Bot», luego haz clic en «Agregar Bot».
Cambia a «Bot» y luego haz clic en «Agregar bot»
Después de confirmar, ¡tendrás tu bot! Eventualmente, necesitarás el token del bot. Para copiarlo, simplemente presiona el botón azul «Copiar».
Copia el token de tu bot con el botón Copia azul
Paso II: Crea el gráfico
Paso 2a: importar bibliotecas
El gráfico se creará en pyTigerGraph. Primero, asegúrate de tener tanto pyTigerGraph como Discord.py instalados.
pip install pyTigerGraph
pip install discord.py
Paso 2b: Inicia la solución
Luego, crea un documento llamado createGraph.py o algo similar. Primero, inicia una solución en https://tgcloud.iocreando una cuenta y luego completando los siguientes pasos:
- Ve a «Mis soluciones» y luego haz clic en «Crear solución
- Haz clic en “Blank v3” y luego presiona Siguiente dos veces.
- Edita el nombre de la solución, las etiquetas y el subdominio según sea necesario y luego presiona Siguiente.
- Presiona Enviar y espera a que comience la solución.
Paso 2c: crea una conexión
Una vez que se inicia la solución, puedes crear una conexión en tu documento con lo siguiente. Primero, importa pyTigerGraph, luego utilízalo para crear la conexión utilizando la información que envió en el paso tres para HOST_NAME, USERNAME y PASSWORD.
import pyTigerGraph as tgconn = tg.TigerGraphConnection(host=»https://HOST_NAME.i.tgcloud.io», username=»USERNAME», version=»3.0.5″, password=»PASSWORD», useCert=True)
Paso 2d: crear el esquema
A continuación, crearemos un esquema. El esquema en este caso será simple: los vértices Message y Word conectados con un vértice MESSAGE_WORD.
conn.gsql(»’CREATE VERTEX Word(primary_id word STRING) with primary_id_as_attribute=»true»
CREATE VERTEX Message(primary_id id INT, message STRING, url STRING)
CREATE UNDIRECTED EDGE WORD_MESSAGE(FROM Message, To Word)
CREATE GRAPH ChatBot(Word, Message, WORD_MESSAGE)»’)
Después de ejecutar esto, ¡habrás creado su gráfico en TigerGraph! ¡Felicidades! A continuación, deberás ajustar los detalles de tu conexión, luego cargar datos y escribir una consulta.
conn.graphname = «ChatBot»
conn.apiToken = conn.getToken(conn.createSecret())
Paso III: extraer datos de una API
Para obtener mis datos, tomé de artículos de https://community.tigergraph.com/. Para hacer esto, extraje mensajes recientes del foro usando el punto final https://community.tigergraph.com/posts.json. Utilizando la biblioteca JSON, cargué «latest_posts».
import requests
import json
x = requests.get(«https://community.tigergraph.com/posts.json»)
data = json.loads(x.text)[«latest_posts»]
Los datos tienen algunas secciones que serán importantes: raw (el mensaje completo), id, «topic_slug» y «topic_id». Juntos, «topic_slug» y «topic_id» pueden recuperar la URL original.
print(data[0][«raw»]) # Message
print(data[0][«id»]) # ID
print(«https://community.tigergraph.com/t/» + data[0][«topic_slug»] + «/» + str(data[0][«topic_id»])) # Url
A continuación, necesitamos cargar los datos en el gráfico. Antes de cargar los datos, debemos limpiarlos, eliminando las palabras vacías o los signos de puntuación. A continuación, lo insertaremos en el gráfico.
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenizestop_words = set(stopwords.words(‘english’))for msg in data:
raw_msg=»<br>».join((«».join(msg[«raw»].split(«,»))).split(«\n»))
individual_words = raw_msg.split()
word_tokens = word_tokenize(raw_msg.lower())
filtered_sentence = [w for w in word_tokens if not w in stop_words]
filtered_sentence = [w for w in filtered_sentence if not w in [ ‘.’, ‘,’, ‘!’, ‘?’, ‘:’, ‘;’]]
url = «https://community.tigergraph.com/t/» + msg[«topic_slug»] + «/» + str(msg[«topic_id»])
conn.upsertVertex(«Message», msg[«id»], attributes={«id»: msg[«id»], «message»: msg[«raw»], «url»: url}) for word in filtered_sentence:
conn.upsertVertex(«Word», word, attributes = {«word»: word})
conn.upsertEdge(«Word», word, «WORD_MESSAGE», «Message», msg[«id»])
¡Excelente! Ahora tienes todos los datos cargados en tu gráfico. A continuación, creemos el bot.
Paso IV: crea el bot
Crea un nuevo archivo ahora. ¿Recuerda el token que generó en el Paso I? Lo necesitarás ahora.
Primero crearemos el esquema de un bot de discordia.
import discord
import pyTigerGraph as tg
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenizeclient = discord.Client()conn = tg.TigerGraphConnection(host=»https://HOST_NAME.i.tgcloud.io», username=»USERNAME», version=»3.0.5″, password=»PASSWORD», useCert=True)conn.graphname = «ChatBot»
conn.apiToken = conn.getToken(conn.createSecret())@client.event
async def on_message(msg):
print(msg.content)@client.event
async def on_ready():
print(f»We have logged in as {client.user}»)client.run(«YOUR_DISCORD_TOKEN»)
Todo el trabajo que haremos estará en el on_message. Allí, primero, veremos si el mensaje termina con un «??», el disparador de este bot en particular. A continuación, realizaremos los mismos pasos de limpieza de datos que en el Paso III. Finalmente, encontraremos a qué publicación se parece más el mensaje y lo devolveremos.
if (msg.author.name != "TGbot" and msg.content[-2:] == "??"): stop_words = set(stopwords.words('english')) word_tokens = word_tokenize((msg.content[:-2]).lower()) filtered_sentence = [w for w in word_tokens if not w in stop_words] filtered_sentence = list(set([w for w in filtered_sentence if not w in [ '.', ',', '!', '?', ':', ';']])) possible_options = [] for word in filtered_sentence: x = conn.runInstalledQuery("similarArticles", {"word": word}) for opt in x[0]["blogs"]: possible_options.append(opt["attributes"]["url"]) # print(x[0]["blogs"][0]["attributes"]["message"]) word_counter = {} for word in possible_options: if word in word_counter: word_counter[word] += 1 else: word_counter[word] = 1 popular_words = sorted( word_counter, key=word_counter.get, reverse=True) print(word_counter) if len(popular_words) == 0 or word_counter[popular_words[0]] < len(filtered_sentence)/2: await msg.channel.send("I couldn't find anything like that.") elif len(popular_words) >= 2 and word_counter[popular_words[1]] >= word_counter[popular_words[0]]-2: await msg.channel.send("You might want to check out these:\n" + popular_words[0] + "\n" + popular_words[1]) else: await msg.channel.send("You might want to check out this: " + popular_words[0])
¡Ahora puedes ejecutar tu bot y ver los resultados!
Resultados del bot en Discord
Paso V: Pasos siguientes
¡Felicidades! ¡Creaste un bot básico de preguntas y respuestas para Discord con TigerGraph! A continuación, modifIcalo para que sea el suyo.
Mientras lo haces, únete TigerGraph Discord si tienes alguna pregunta o necesitas ayuda.
¡Buena suerte!