Documente Academic
Documente Profesional
Documente Cultură
LUIS junto con Microsoft Bot Framework forma un tándem a tener en cuenta
ya que se integran perfectamente para que trabajen juntos en nuestro sistema.
El ejemplo que vamos a hacer es uno de los más típicos y se trata de realizar
un bot que sea capaz de pedir una pizza especialidad de la casa y que nos
llegue a casa en media hora aproximadamente. Podremos ir preguntando al
bot el estado de nuestro pedido y si por un casual ya no nos apetece, cancelar
el pedido.
Enseñando a LUIS
Para ello vamos a empezar a enseñar a LUIS que acciones y entidades son
necesarias para que nos entienda. Los pasos a seguir para esto son:
Pizza: que es la entidad que nos indica el tipo de pizza que quiere
pedirnos el usuario
Datetime: que es una entidad preconstruida que nos permitirá obtener
fechas y horas de las frases.
Una vez que tenemos bien definido estos campos, tenemos la parte más
difícil de nuestro LUIS ya que delimitar bien las intenciones de una
manera abstracta es complicado. Se podrá comprobar si queremos hacer
modelos más complejos. Cuando más acotados y discretos sean las
intenciones mejorar para conseguir lo que nos proponemos.
La siguiente fase trata de entrenar a LUIS con frases que queramos que sean
relacionadas con las intenciones configurada. Para ello usamos la barra central
del dashboard. Esta barra es nuestro canal de comunicación de
LUIS. Podemos indicarle frases y el nos dirá qué intención tenemos.
Iremos confirmando o corrigiendo el comportamiento de LUIS
dependiendo de si acertó o falló en la predicción.
En la siguiente imagen vemos el proceso de estudio de una frase por parte de
LUIS donde se ha acertado la intención y las entidades que puede sustraer de
la oración:
Seguiremos entrenando a LUIS hasta que estemos seguros de que siempre
acierta nuestra intención. Una vez que tengamos esto simplemente tendremos
que exponerlo en Internet por medio del botón ‘Publish’. Cuando pulsamos en
este botón, si todo ha ido bien, LUIS nos indicará una url donde se encuentra
expuesto nuestro modelo:
Con esto podremos integrarlo en nuestro bot.
mkdir pizzas-del-abismo
cd pizzas-del-abismo
npm init
-- instalamos restify como librería API REST y botbuilder para tener
// Setup bot
const connector = new builder.ChatConnector({
appId: process.env.MICROSOFT_APP_ID,
appPassword: process.env.MICROSOFT_APP_PASSWORD
});
const bot = new builder.UniversalBot(connector);
// Setup LUIS
const recognizer = new builder.LuisRecognizer('https://api.projectoxford.ai/luis/v1/application?id=26f79385-d6b4-49ec-b4e3-24b6
const intents = new builder.IntentDialog({ recognizers: [recognizer] });
// Setup Intents
intents.matches('Saludar', function (session, results) {
session.send('Hola ¿En que te puedo ayudar?');
});
if (entityPizza) {
const match = builder.EntityRecognizer.findBestMatch(pizzas, entityPizza.entity);
}
if (!match) {
builder.Prompts.choice(session, 'Ahora mismo tenemos estas pizzas disponibles, ¿Cual te gustaría probar?', pizzas
} else {
next({ response: match });
}
}, function (session, results) {
if (results.response) {
const time = moment().add(30, 'm');
session.dialogData.time = time.format('HH:mm');
session.send("De acuerdo, tu pizza %s llegará a las %s.", results.response.entity, session.dialogData.time);
} else {
session.send('De acuerdo, si no te gustan, intenta la próxima vez :)');
}
}]);
bot.dialog('/', intents);
Analicémoslo en detalle.
appId: process.env.MICROSOFT_APP_ID,
appPassword: process.env.MICROSOFT_APP_PASSWORD
});
const bot = new builder.UniversalBot(connector);
Lo siguiente en hacer es integrar LUIS dentro de nuestro bot, de esta
manera haremos que el bot sepa nuestras intenciones. Como vemos,
hay que indicar la url, que LUIS nos proporcionó, de esta manera y
usar la clase LuisRecognizer. Obtenemos también un objeto diálogo de
tipo Intent. El objeto intent contendrá eventos que se lanzará cuando
LUIS haya acertado una intención.
// Setup LUIS
.findEntity(args.entities, 'Pizza');
if (entityPizza) {
entityPizza.entity);
if (!match) {
builder.Prompts.choice(session,
} else {
if (results.response) {
session.dialogData.time = time.format('HH:mm');
session.send("Derdo, tu pizza %s llegará a las %s.",
results.response.entity, session.dialogData.time);
} else {
session.send('Deerdo, si no te gustan, intenta la próxima vez :)');
}
}]);
Las intenciones ‘Cancelar’, ‘Comprobar’ y ‘default’ simplemente
envían un mensaje al usuario para confirmar la acción a realizar.
Lógicamente esta funcionalidad se puede complicar todo lo que
necesitemos y podremos hacer lo que cualquier API haría: acceder a
disco, a sistema de ficheros, a base de datos a otras APIS, consultar a
otros bots, etc.
intents.matches('Cancelar', function (session, results) {
intents.onDefault(builder.DialogAction.send(
'No he entendido lo que quieres decir'));
Después incluimos todas estas intenciones como un diálogo del bot.
bot.dialog('/', intents);
server.post('/api/messagesonnector.listen());
Conclusión
Aunque el tutorial es algo extenso, creo que se extrae la esencia de lo que
quería enseñaros. El uso de estas tecnologías es sencillo y nos va a dar muchas
alegrías en el futuro.
Nos leemos