A very simple prototype of Natural Language Flow builder and Natural Language Generator for bots, using edges of contexts, and based on intents/skills defined by the user.
npm install natural-language-flows
Or use it into the browser:
<script type="text/javascript" src="https://github.com/davidemiceli/natural-language-flows/raw/master/lib/natural-language-flows.js"></script>
Initialize on node.js
// Require the natural language flows
var nlf = require('natural-language-flows');
// Initialize the bot
var bot = new nlf.Bot();
Initialize on the browser
// Initialize the bot
var bot = new Bot();
Use it adding skills/intents
// Set a default non matched reply
bot.NonMatchedReply = "Sorry, I do not understand...";
// Add some bot's skills/intents with edges of contexts
bot.AddMultipleCommands([
{
intent: 'buy-car',
utterances: [
"I want to {action} a {product}",
"I should {action} a {product}",
"Can you {action} me one {product}?"
],
entities: {
action: ['buy','have','take','give'],
product: ['car','automobile','ferrari','sport car']
},
response: {
default: 'Yes, of course! Could you tell me which model of Ferrari? (F12/GTC4/J50/California T/488 GTB)',
context: 'car-model',
no_need_context: true
}
},{
intent: 'car-model',
utterances: [
"{model}",
],
entities: {
model: ['F12','GTC4','J50','California T','488 GTB']
},
response: {
default: 'Oh, great! Do you confirm you want to purchase it? (yes/no)',
context: 'car-yes-no'
}
},{
intent: 'car-yes-no',
utterances: [
"{qresp}",
],
entities: {
qresp: ['yes','no']
},
response: {
default: 'Sorry, could you confirm the purchase? (yes/no)',
context: 'car-yes-no',
conditionals: [
{
conditions: {qresp: 'yes'},
resp: 'Wonderful! A great purchase!',
context: 'buy-car'
},
{
conditions: {qresp: 'no'},
resp: "I'm sorry, do you want buy another model? (F12/GTC4/J50/California T/488 GTB)",
context: 'car-model'
}
]
}
}]);
Start a discussion with the bot after skills' training:
// Printing the full discussion's objects
esit = bot.answer({text: 'I want to buy a ferrari', context: 'buy-car'});
console.log(esit);
esit = bot.answer({text: 'GTC4', context: esit.context});
console.log(esit);
esit = bot.answer({text: 'Maybe...', context: esit.context});
console.log(esit);
esit = bot.answer({text: 'yes', context: esit.context});
console.log(esit);
That will print the complete result object in this way:
{ text: 'I want to buy a ferrari',
intent: true,
entities: { action: [ 'buy' ], product: [ 'ferrari' ] },
reply: 'Yes, of course! Could you tell me which model of Ferrari? (F12/GTC4/J50/California T/488 GTB)',
context: 'car-model' }
{ text: 'GTC4',
intent: true,
entities: { model: [ 'GTC4' ] },
reply: 'Oh, great! Do you confirm you want to purchase it? (yes/no)',
context: 'car-yes-no' }
{ text: 'Maybe...',
intent: null,
entities: {},
reply: 'Sorry, I do not understand...',
context: 'car-yes-no' }
{ text: 'yes',
intent: true,
entities: { qresp: [ 'yes' ] },
reply: 'Wonderful! A great purchase!',
context: 'buy-car' }
To print only the discussion data:
// Only discussion's replies
esit = bot.answer({text: 'I want to buy a ferrari', context: 'buy-car'});
console.log('D:', esit.text);
console.log('R:', esit.reply);
esit = bot.answer({text: 'GTC4', context: esit.context});
console.log('D:', esit.text);
console.log('R:', esit.reply);
esit = bot.answer({text: 'Maybe...', context: esit.context});
console.log('D:', esit.text);
console.log('R:', esit.reply);
esit = bot.answer({text: 'no', context: esit.context});
console.log('D:', esit.text);
console.log('R:', esit.reply);
esit = bot.answer({text: 'California T', context: esit.context});
console.log('D:', esit.text);
console.log('R:', esit.reply);
esit = bot.answer({text: 'yes', context: esit.context});
console.log('D:', esit.text);
console.log('R:', esit.reply);
That will print:
D: I want to buy a ferrari
R: Yes, of course! Could you tell me which model of Ferrari? (F12/GTC4/J50/California T/488 GTB)
D: GTC4
R: Oh, great! Do you confirm you want to purchase it? (yes/no)
D: Maybe...
R: Sorry, I do not understand...
D: no
R: I'm sorry, do you want buy another model? (F12/GTC4/J50/California T/488 GTB)
D: California T
R: Oh, great! Do you confirm you want to purchase it? (yes/no)
D: yes
R: Wonderful! A great purchase!