Skills for SUSI
Susi is an open source personal assistant can do a lot of amazing things for you apart from just answering queries in the text. Susi supports many action type such as answer, table, pie chart, RSS, web search, map. Actions contain a list of objects each with type attribute, there can be more than one actions in the object list. For example
curl http://api.susi.ai/susi/chat.json?timezoneOffset=-330&q=Who+are+you
We get a json response similar to
{ "query": "Who are you", "answers": [{ "data": [], "metadata": {"count": 0}, "actions": [{ "type": "answer", "expression": "I was told that I am a Social Universal Super Intelligence. What do you think?" }] }], }
The above query is an example of action type ‘answer’, for developing more skills on action type answer refer to the Fossasia blog : How to teach Susi skills. In this blog we will see how to teach a table skill to susi and how susi interprets the skill .So let’s add a skill to display football teams and its players using service Football-Data.org .
For writing rules Open a new etherpad with a desired name <etherpad name> at http://dream.susi.ai/
- Next let’s set some query for which we want Susi to answer.
Example queries:
tell me the teams in premier league | Premier league teams
To get answer we define the following rule
!console: { "url":"http://api.football-data.org/v1/competitions/398/teams", "path":"$.teams", "actions":[{ "type":"table", "columns":{"name":"Name","code":"Code","shortName":"Short Name","crestUrl":Logo}, "count": -1 }] } eol
Expalanation:
The JSON response for above URL look like this:
{ "_links": { "self": { "href": "http://api.football-data.org/v1/competitions/398/teams" }, "competition": { "href": "http://api.football-data.org/v1/competitions/398" } }, "count": 20, "teams": [{ "_links": { "self": { "href": "http://api.football-data.org/v1/teams/66" }, "fixtures": { "href": "http://api.football-data.org/v1/teams/66/fixtures" }, "players": { "href": "http://api.football-data.org/v1/teams/66/players" } }, "name": "Manchester United FC", "code": "MUFC", "shortName": "ManU", "squadMarketValue": null, "crestUrl": "http://upload.wikimedia.org/wikipedia/de/d/da/Manchester_United_FC.svg" }, { "_links": { "self": { "href": "http://api.football-data.org/v1/teams/65" }, "fixtures": { "href": "http://api.football-data.org/v1/teams/65/fixtures" }, "players": { "href": "http://api.football-data.org/v1/teams/65/players" } }, "name": "Manchester City FC", "code": "MCFC", "shortName": "ManCity", "squadMarketValue": null, "crestUrl": "https://upload.wikimedia.org/wikipedia/en/e/eb/Manchester_City_FC_badge.svg" }] }
The attribute ‘path’ statuses object contains a list of objects for which we want to show the table. The table is defined with the action type “table” and a columns object which provides a mapping from the column value names to the descriptive names that will be rendered in the client’s output. In our case, there are 4 columns Name of the team, Team Code, Short Name of the team, and the Team logo’s URL.
The count attribute is used to denote how many rows to populate the table. If count = -1 , then it means as many as possible or displays all the results.It’s easy, isn’t it? We have successfully created table skill for SUSI. Let’s try it out
Go to http://chat.susi.ai/ and type: dream < your dream name>. And type your queries like “tell me the teams in premier league” in our case and see how SUSI presents you the results
Next, want to create some more skills. Let’s teach SUSI to play a game Rock, Paper, Scissors, Lizard, Spock. SUSI can give random answers to your queries for example
What is your favorite dish Potatoes|Vegetables|Fish
SUSI will return any random answer “Potatoes, “Vegetables” or “Fish”. We would use this to create a game.
First form a general query like “I am getting bored let us play something” and the add an answer to it by adding the rules of the game something like
I am getting bored let us play something
Let's play the game Rock, Paper, Scissors, Lizard, Spock. It is an expansion to the game Rock, Paper, Scissors. We both will pick a variable and reveal. The winner will be one who defeats the others. It goes like Scissors cuts Paper,Paper covers Rock, Rock crushes Lizard, Lizard poisons Spock, Spock smashes Scissors, Scissors decapitates Lizard, Lizard eats Paper, Paper disproves Spock, Spock vaporizes Rock, (and as it always has) Rock crushes Scissors. Let's begin, choose something
Next since user would choose between any 5 of the Rock, Scissors, Lizard,Paper and spock add answers to each of them based on the rules.
Rock | I choose Rock Paper, Paper covers Rock I won :) | Sccisors, Rock crushes Scissors , I lost :( | Lizard, Rock crushes Lizard , You won :-) | Spock, Spock vaporises Rock, You lost :) | Rock, Ahh It's a Tie :-D Paper | I choose Paper Rock, Paper covers Rock You won :( | Sccisors, Scissors cuts Paper I won :) | Lizard, Lizard eats Paper I won :) | Spock , Paper disproves Spock You won :( | Paper, Ahh It's a Tie :-D Lizard | I choose Lizard Rock, Rock crushes Lizard , I won :-) | Spock, Lizard poisons Spock You won :( | Sccisors, Scissors decapitates Lizard I won :) | Paper, Lizard eats Paper You won :( | Lizard, Ahh It's a Tie :-D Scissors | I choose Scissors Rock, Rock crushes Scissors , You lost :) | Paper , Scissors cuts Paper You won :( | Spock, Spock smashes Scissors I won :) | Lizard, Scissors decapitates Lizard You won :( | Scissors, Ahh It's a Tie :-D Spock | I choose Spock Rock, Spock vaporizes Rock, I lost :( | Lizard, Lizard poisons Spock You lost :) | Scissors, Spock smashes Scissors I lost :(| Paper, Paper disproves Spock I won :) | Spock, Ahh It's a Tie :-D
SUSI will return any random answer to the variable picked go and try to beat SUSI.
Have fun with SUSI and do create some other awesome skills for SUSI, read this tutorial for more details.
You must be logged in to post a comment.