LUIS Tutorial


Video

These 2 videos give an end-to-end example of creating a LUIS application, adding intents, entities, and pre-built entities, labeling utterances, publishing the application and accessing its HTTP endpoint, adding features, and using search and active learning:


Overview

One of the key problems in human-computer interactions is the ability of the computer to understand what a person wants, and to find the pieces of information that are relevant to their intent. For example, in a news-browsing app, you might say "Get news about virtual reality companies," in which case there is the intention to FindNews, and "virtual reality companies" is the topic. LUIS is designed to enable you to very quickly deploy an http endpoint that will take the sentences you send it, and interpret them in terms of the intention they convey, and the key entities like "virtual reality companies" that are present. LUIS lets you custom design the set of intentions and entities that are relevant to the application, and then guides you through the process of building a language understanding system.

Once your application is deployed and traffic starts to flow into the system, LUIS uses active learning to improve itself. In the active learning process, LUIS identifies the interactions that it is relatively unsure of, and asks you to label them according to intent and entities. This has tremendous advantages: LUIS knows what it is unsure of, and asks you to help where you will provide the maximum improvement in system performance. Secondly, by focusing on the important cases, LUIS learns as quickly as possible, and takes the minimum amount of your time.


Logging In

To use LUIS, first make sure that you have an up-to-date version of Microsoft Internet Explorer or Google Chrome. Go to the home page, www.luis.ai, and log in. You will see a screen like the one below.


Creating an Application

The first step to using LUIS is to create an application. In the application, you will bundle together the intents and entities that are important to your task. Let's take the example of a news-browsing application. Two intents relevant to this domain are "FindNews" and "SendTo," to share stories with friends. Two entities that are important are "Topic" and "Recipient." When a user interacts with the system, once we have identified the intent and entity, we can take an appropriate action. Let's go through the steps of creating the application.

Click on "My Applications" and then the "New Application" button to create a new application. In the dialog box, name it "NewsChat". Check that the application culture is set to English. Then click "Add App". This will create the application and take you to the LUIS Application Editor:


Adding entities, intents, and labels

Defining Entities

On the left-hand panel, you will see an option to add entities. We'd like to be able to say what kind of news we are interested in, and also, for sharing, to say who we'd like to share a story with. In order to capture the notion of a news topic, and a recipient for sharing, let's create two entity types: "Topic" and "Recipient". To do this, click the "+" button on the Entity bar, and fill in the resulting entry box once for "Topic" and once for "Recipient".

Hierarchical Entities

Taking the custom entities, a step further, you now have the ability to define relationships between entities based on hereditary hierarchical patterns. The generic entity acts as the parent and the children are the specific types, or sub-groups, under the parent, yet both share the same characteristics. For example, a generic entity may be called “Date” and the specific children of this parent may be called “StartDate” and “EndDate”. “Date”, including its children, has now been transformed from being a generic entity to being a specific entity. The LUIS service can recognize these types when labeling utterances and generalizes this, at train at time, building models for this entity and its children.

Defining Hierarchical Entities

Using the “Date” example mentioned above, follow these steps.

  1. In the Application Editor workspace, find Entities in the left-hand menu panel, then click the plus sign .
  2. In the Add a new Entity dialog box, type "Date" as the entity name.
  3. Click the next to the Entity Children.
  4. In the text box that appears, type the name of the first child, "StartDate".
  5. Click again to add the second child, “EndDate”, and so on.
  6. To delete a child if you made a mistake, click next to the entity child.
  7. When finished, click "Save".

Labeling Children

  1. Type any utterance like “Find news about Obama publish from 12 July 2014 till 12 August 2014”
  2. Mark the entity “12 July 2014”, click on the arrow beside the Parent, Date, Entity to display its children.
  3. Select the child entity.
  4. Submit the utterance.

Composite Entities

You can also define relationships between entities based on associative patterns known as “composite entities”. A composite entity is an entity that is form of a set of existing entities. You can think of it as hasA relationship, the components forming a composite entity are its children, but not in a parent-child relationship like in a hierarchical entity. The components are independent of the composite, and not deleted when deleting the composite. Also, a composite entity and its children do not share common characteristics. The composite pattern helps LUIS identify entities, not only individually, but also in groups, and a group of entities are treated as a single entity.

Defining Composite Entities

Before creating a composite entity, you must first create the component entities, if not already existing. For example, in a food ordering app, a user may place an order such as “I want 3 medium mushroom pizzas”. In this example, you may have these entities in your application: “number”, “item” and “size”. Assuming that such entities are already defined and labeled in utterances, you can then create a composite entity called “order”, and add them as children, because they are the components of the order.

In a flight booking app, a user may say “Book 2 adult tickets to Paris next Monday”. In this example, we may create a composite entity called “Tickets”, including the component entities “number” and “category” to capture the number and category of tickets to be booked. If not already existing, you need to define both entities before defining the composite.

  1. For the “number” entity, use the pre-built entity “number”. For instructions, see the section of defining pre-built entities.
  2. For the “category” entity, define a hierarchical entity including the subtypes “adult”, “child” and “infant”, see the section of defining hierarchical entities.

Assuming that the component entities “number” and “category” are already created, follow these steps to define the composite entity “Tickets”:

Labeling Composite Entities

As previously mentioned, a composite entity involves more than one entity combined together. To label a composite entity, select the composite entity and then start selecting the children. However, if one or more of the children is a pre-built entity then you can label the children first and then followed by the parent. In this example utterance, select “2 adults” together and click “Tickets” in the entities list box. Note that the names of composite entities are colorless (see the screenshot below).

The words labeled as composite entity will be surrounded by square brackets and tagged with a minus sign on its top right side. If you want to remove the label of a composite entity, click its minus sign. Note that removing a composite entity label removes only the composite relationship, not the entities forming it.

When you finish labeling, click Submit to submit the label. The system needs to be seeded with several examples of each intent and several examples of each entity defined in the application.

Important Notes

JSON Response

Below you find an example of the Hierarchical Entities and their children as JSON output. Click "Publish" on the left-hand panel, then click "Update published application".

  1. Set the URL parameter "q" to be your question/utterance, for example, " find news about Paris from 12 July 2014 till 12 August 2015".
  2. Hit the "Enter" key or click on the generated URL in the dialog.

Using Bing Entities

Once our app shows a set of news stories, we might want to say something like "Read the second one." This will require understanding ordinal words like "first," "second," and so on. Rather than specifying these by hand, we can use a pre-built entity model called "Ordinals". Click the button for "Prebuilt Entities" and select "Ordinals" from the dropdown menu.

Entity Limits

Up to ten entities of each type can be used in a single LUIS application.

Defining Intents and labeling utterances

Next, we will add two intents to the application. At the top left of the screen, you will see an area for intents. All applications come with one pre-defined intent, "none". This will recognize user statements that have nothing to do with the application, for example if someone says "How far is it to the moon" to our NewsChat system.

Go ahead and click "+" next to "Intents". You'll see a dialog box appear to add a new intent. Enter the intent name of "FindNews", and the example command that triggers the intent as "find news about mars". This will look like the screen below.

Then click "Save", and the utterance will be presented for labeling. The intent "FindNews" will already be selected from the intent drop-down. We now need to label the entities present in the utterance. Select the word "mars" (or just click on it) -- it will be highlighted, and you will see a drop-down with the two entities you've defined:

Click on "Topic", and you'll see the word "mars" highlighted in red, indicating that you've labeled the word "mars" as a "Topic". Now click on "Submit" to submit this label.

Next, add a second intent called "ShareNews", with the example "send it to wally". Label "wally" as a "Recipient" entity , and click on submit.

Finally, it might be useful to have the app read stories out loud, so let's add a third intent called "Read", with the example "read me the second one". Note how "second" is automatically highlighted as an ordinal pre-built entity:

Action Binding

Once a developer creates one or more entities, and starts creating intents. He/she can link this intent to an action and specifies requirements for these actions to be triggered. These requirements are known as parameters. LUIS supports only one action per intent. Each action can include a group of parameters derived from entities. The parameter can be optional or required, LUIS assumes that an action is triggered only when all the required parameters are filled.

Defining an Action

  1. On the Application Editor page, on the left-hand panel, click an existing intent or create a new one, for example "FindNews".
  2. In the "Add a new intent" dialog box, click "Add Action".
  3. Let us say this action requires three parameters, "Publication Date", “Subject” & “Publisher”.
  4. Click "Add Parameter". Type the name of the parameter, for example "Publication Date", and specify its type from the entities in the "Type" drop-down. In this case "Datetime" is the entity.
  5. Click "Add Parameter" again to add the next parameter. Let it be "Subject" with "Topic" being the entity.
  6. Add a third parameter "Publisher" with "Name" being the entity.
  7. Check the "Required" check box next to the name of the parameter that is required for the action to trigger.

Notes:

  1. To delete a parameter, click on the next to its field.
  2. To delete an action with its parameters, click "Delete Action" from inside the "Add a new intent" dialog box.

Schematized JSON response

This is a sample extract of the JSON response that is returned when an action is fulfilled:

"actions": [
        {
          "triggered": true,
          "name": "FindNews",
          "parameters": [
            {
              "name": "Subject",
              "required": true,
              "value": [
                {
                  "entity": "financial crisis",
                  "type": "Topic",
                  "score": 0.8636191
                }
              ]
            },
            {
              "name": "PublicationDate",
              "required": true,
              "value": [
                {
                  "entity": "october 2008",
                  "type": "Date",
                  "score": 0.8523133
                }
              ]
            },
            {
              "name": "Publisher",
              "required": false,
              "value": null
            }
          ]
        }
      ]
    }

Notice that the "Publication Date" and "Subject" required parameters are set to TRUE, which means they are filled in. Thus the action will be triggered as all its required parameters are available. Notice also that the action triggering is set to TRUE. Finally, notice that the "Publisher" parameter is set to FALSE, which means that it is not required for the action to be triggered.

Action Fulfillment

This feature enables you to fulfill the actions that trigged through a set of channels (Full channel list below). For example, if you have the GetWeather intent and the action triggered (all the required parameters were filled), you can actually use the GetCurrentWeather channel to retrieve the weather.

Follow these steps (see previous screenshot):

  1. In the Application Editor workspace, find Intents in the left-hand menu panel, then click the intent for which you want to bind an action, in this case “Get temperature”.
  2. In the Add a new Intent dialog box, click Add Action. This will open the dialog box as shown in Figure 1.
  3. Check Fulfillment in the Action Info sub-section to enable action types.
  4. From the Action Type dropdown list select GetCurrentWeather.
  5. In the Action Parameters sub-section, click Add Parameter to add a new line.
  6. Check the box if the parameter is required, add parameter name, type, value and a text prompt, which is displayed if the parameter is not identified with the intent. (In above screenshot: “required”, “location”, “location”, “locations”, “Which place?”)
  7. In the Action Settings sub-section, map the action to a parameter from the dropdown list, in this case “location”.
  8. Click Save to complete and exit.

LUIS is providing a first set of channels and actions, expect more soon.

Channels

A channel is a collection of related fulfillments. The following lists show the possible fulfillments available.

If you want to try the channels, click this button to add our Action Binding bot to your Slack team.
Add to Slack

Definition Channel

Description

The definition channel returns definitions for given words.

Actions
Action Name Action Settings Values Examples
GetDefinition Entity* What is the definition for apple?
What does emotion mean?
Prebuilt app

You can download a prebuilt app supporting our sample utterances for this action here.

HTTP Channel

Description

The HTTP channel is a generic channel to enable bindings to arbitrary REST endpoints. It is the most flexible channel that can be adapted to the needs of your service. It supports both anonymous requests and basic authorization headers.

Actions
Action Name Action Settings Values Examples
JsonRequest Verb*
Url*
Body
Username
Password
ResponseTemplate
{GET|PUT|POST|DELETE}
Additional Details

This action sends a request to the URL given as an action setting. Depending on the Verb setting the request can be a GET, POST, PUT, or DELETE request. If a basic authorization header should be added, the Username or Password setting (or both) cannot be empty.

For POST and PUT, a body for the request can be given in the Body setting. If a value for that setting is given, it has to be in JSON format (the request is sent with content type “application/json”). Also, a response is expected to be in JSON format. Note, that values within single curly brackets will be treated as references to action settings like in any other action setting. Therefore, all brackets in the body have to be escaped by doubling them. For example, imagine a service expects the following JSON body:

{
  "Animals":
  [
    {
      "Animal":"fox",
      "Attribute":"quick brown"
    },
    {
      "Animal":"dog",
      "Attribute":"lazy"
    }
  ]
}

Note you should escape the brackets (with an additional “{“) to list the values in the Body setting (see below)

{{
  "Animals":
  [
    {{
      "Animal":"fox",
      "Attribute":"quick brown"
    }},
    {{
      "Animal":"dog",
      "Attribute":"{builtin.attribute}"
    }}
  ]
}}

This way you can still use placeholders for action within the setting, for example, to set the value of a field (see attribute value in example).

If the ResponseTemplate action setting is empty, the response will be the JSON returned from the service. However, using the ResponseTemplate you can construct a natural language response from the fields of the JSON structure using a JPath expression within double curly brackets. Again, anything within single curly brackets will be treated as a reference to an action parameter. For example, imagine your service returns a JSON structure like the one displayed above. Then you can construct a natural language response using the response template like this:

The {{Animals[0].Attribute}} {{Animals[0].Animal}} jumps over the {{Animals[1].Attribute}} {{Animals[1].Animal}}.

The expected response would then be:

The quick brown fox jumps over the lazy dog.

If not all placeholders can be filled from the JSON, they will be left empty. If the service returns an error status code, this error code will be shown to the user instead.

News Channel

Description

The news channel allows for sending a search query and get back a list of relevant news articles.

Actions
Action Name Action Settings Values Examples
GetNews Topic What are the top news?
What are the news in sports?
Any news about Microsoft?
Prebuilt app

You can download a prebuilt app supporting our sample utterances for this action here.

Additional Details

The parameter topic is optional. If no parameter is given, the top news stories are returned. To request news articles by category, specify the category name as parameter. Currently, the following categories are supported: Business, Entertainment, Health, Politics, ScienceAndTechnology, Sports, US, World. If the parameter is given but not one of the support categories, news articles that are relevant to the specified topic are returned. The top 3 related news articles are returned. Each news article contains a title, a short description, and a URL link for the complete news article. At this point in time, the news channel only supports the en-US market.

Utility Channel

Description

The pass-through channel returns text, similar to an echo service.

Actions
Action Name Action Settings Values Examples
WriteLine Text What can I say?
What can I do?
Prebuilt app

You can download a prebuilt app supporting our sample utterances for this action here.

Stocks Channel

Description

The stock channel provides stock information. It returns news covering the major financial markets and lists stock tickers for DOW and Nasdaq stock indexes and local stock exchanges.

Actions
Action Name Action Settings Values Examples
GetPrice Symbol* What is the stock price of MSFT?
Prebuilt app

You can download a prebuilt app supporting our sample utterances for this action here.

TimeZone Channel

Description

The time zone channel provides time information.

Actions
Action Name Action Settings Values Examples
GetTime Location* What time is it in New York?
What time is it in California?
Prebuilt app

You can download a prebuilt app supporting our sample utterances for this action here.

Additional Details

The time zone channel returns the local time of the given location. A location can be a city, a state, or a country. The answer provides the name of the location, the current date and time at the specified location, and the current UTC offset (daylight saving time is considered). If the boundary of the location is within multiple time zones, the answer will return the time of the primary city within the location’s geographical boundary.

Weather Channel

Description

The weather channel provides weather information, e.g. temperature for given location or forecast for location.

Actions
Action Name Action Settings Values Examples
GetCurrentWeather Location* What is the weather in Seattle?
GetCurrentTemperature Location* How cold is it in Munch?
GetWeatherForecast Location*, Date {today|tomorrow|In2Days|In3Days|luis.buildin.date} Will it rain in Munich this evening?
What is the weather forecast in Munich tomorrow?
GetSunriseTime Location*, Date {Today|Tomorrow|luis.buildin.date } When is sunrise in Paris today?
GetSunsetTime Location*, Date {Today|Tomorrow|luis.buildin.date } When is sunset in Paris today?
Prebuilt app

You can download a prebuilt app supporting our sample utterances for this action here.

Additional Details

The weather zone channel returns the climate conditions of the given location. A location can be a city, a state, or a country. If a location is not known to the system, an error message will be returned by the action. There is a distinction between the current weather and forecasts for a given location. The current weather and temperature actions return data that represents the actual conditions, like current temperature, condition, wind directions and strength. You cannot specify a date or time for these values. The other intents use the forecast data and thus provide predicted data instead of actual values. Overview data (forecast summary) is available for the day and upcoming night of a specific date. The forecast range is limited to “today” and 6 days into the future. Any try to go beyond these boundaries will result in an error response.

Dialog Support

Now, LUIS allows you to add conversational interfaces to your applications through a new powerful dialog engine. You can author and execute your dialog in just few steps. For example, if the user is searching for news about “The Financial crisis”, and typed an utterance without specifying one of the require parameter, "Publication Date", the system consequently will surface a prompt question saying "Could you please specify the required publication date?”. Let’s see below how you can build and consume this.

So building on the action binding and schematization (click here to go to action binding) After defining all the parameters needed for actions triggering, you now have the ability to add a prompt question to be surfaced, if any of the required parameters is missing and this where the dialog comes in.

Dialog Authoring

  1. Click "FindNews" intent in the upper left-hand panel. In the "Add a new intent" dialog box, all parameters previously listed in the "Production" mode will be displayed. Note: To return to the "Production" mode, click "Back to Production" at the top.
  2. Select the "Required" check box next to the name of the parameter that must be available for the action to be triggered. In this way, questions will be prompted when users issue queries that do not include the required parameter.
  3. Specify the parameter value from the phrase lists in the "Value" drop-down list.
    Notes:
    • Phrase lists are not used with pre-built entities
    • Phrase lists work with parameters the same way they work with utterances; they are considered features to improve the detection accuracy of parameters in the utterances.
  4. In the "Prompt" text box, type the question to be surfaced when the required parameter is missing.
  5. Use to define the order in which your application will ask these questions.
  6. Click "Save".

Dialog Execution

Testing with query like "Find News". Here is the JSON response extract for the dialog response:

                "dialog": {
    "prompt": "About What?",
    "parameterName": "FindNews::Subject",
    "contextId": "09629512-7310-4a9d-9411-57e1d7f8022b",
    "status": "Question"
  }

Notes:

To continue the dialog, append the answer to the question along with the contextID as request parameters.
Example: &q=financial crisis &contextId= a144a208-2f1f-4faf-877b-8898ec523022

Here is the JSON repsonse for the following Dialog question:

                "dialog": {
    "prompt": "Can you please specify a publication date?",
    "parameterName": "FindNews::PublicationDate",
    "contextId": "2e48c7e0-d343-465f-ab0d-03a7598b655f",
    "status": "Question"
  }

Multi-person Projects

Applications cannot be shared from one user's account to another. If you anticipate that multiple people will be working on the same application, consider setting up a new account, like "mike_and_susans_project@outlook.com"


Seeding the System

Now that we have a set of intents and entities defined, the next step is to provide some more examples of utterances that illustrate these concepts. Click on the "New Utterances" tab at the top of the screen. Type "Search for news about africa" into the entry box and hit enter. You will see a dropdown box showing the possible intents. Select "FindNews". Note that "africa" is the topic of the news stories we want. Click on "africa" and then select "Topic" from the dropdown box.

The system needs to be seeded with several examples of each intent, and several examples of each entity. Enter "Share that with Katie", select "ShareNews" as the intent, and label "Katie" as the recipient. Enter "read it" and label that as an example of "Read". As an example of a "None" intent, enter "I like chocolate cake". Now think of several more examples of each intent, and enter them.

The system has now been seeded with enough data to deploy an initial application. That is done by training and publishing a model.


Training

When you "train" a model, LUIS generalizes from the examples you have labeled, and develops code to recognize the relevant intents and entities in the future. Internally, LUIS uses logistic regression classifiers to determine intents, and conditional random fields (CRFs) to determine the entities. The training process results in optimized classifiers and CRFs, referred to as models, that LUIS can use in the future. To do training, just click the "Train" button at the bottom of the page. Training also automatically occurs periodically.


Publishing a Model

The next step is to deploy the models in an HTTP endpoint that will interpret the sentences we send it. Click the "Publish" button in the upper left-hand corner, and then "Publish web service" in the resulting window. After a couple of moments, you will see a url that makes your models available as a web service. LUIS will look like this:

You can test your endpoint by opening a browser, and copying it into the address bar. Set the URL parameter "q" to your sentence. For example, "&q=show me news about the white house".

Note that sentences longer than 500 characters will result in an error message. The sentences that LUIS receives are automatically logged for future use. The most recent 100K utterances are retained and available for future use.

LUIS returns a JSON object, with fields and scores for each of the entities and models you have created, described next.

JSON Interpretation

Here is an example of the JSON returned for the utterance "Show me news about Greenland":

    {
      "query": "show me news about greenland",
      "intents": [
        {
          "intent": "FindNews",
          "score": 0.99669075
        },
        {
          "intent": "None",
          "score": 0.1676137
        },
        {
          "intent": "Read",
          "score": 8.29925648E-06
        },
        {
          "intent": "ShareNews",
          "score": 2.39546625E-06
        }
      ],
      "entities": [
        {
          "entity": "greenland",
          "type": "Topic"
        }
      ]
    }

The JSON object that LUIS returns contains two lists: one list for the (zero or more) entities that have been detected, and a second list for the intents. Each possible intent is always returned, along with its score, ordered from highest score to lowest score. Note that the score for each intent is computed independently, so intent scores don't necessarily sum to 1. In the "entities" list, we see that LUIS has identified Greenland as an entity, and labeled it as the topic.

Usage Limits

Plan Description Price
Free 10,000 transactions per month, effective 8/4/2016 Free
Standard 10 transactions per second $0.75 per 1000 transactions

If either of these are exceeded in a month (or second), subsequent HTTP responses for the remainder of the month (or second) receive an HTTP error with code 439, "TOO MANY CALLS". If your application requires more capacity that, contact us for options at luservice@microsoft.com.

Slack / Microsoft Bot Framework Integration

There are new options available for publishing LUIS models. These options allow the user to access the language model via various communication channel. The user is able to articulate an intent in slack, via SMS or email (just to name a view) and use this to trigger a bound action, e.g. get temperature or get top news. The result of the called action will show up in the communication channel. Currently, we are offering an integration with:

The Slack integration is a direct integration with a slack bot while the Microsoft Bot Framework wraps around several other communication channel including Slack.

Using the Microsoft Bot Framework

The Microsoft Bot Framework enables users to build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office365 mail to other popular services. In combination with LUIS the user can use the Bot Framework to enable triggering actions via any popular communication channel in an easy way. The user simply has to create a new bot in the MS Bot Framework and then configure LUIS the right way to enable calling one side to the other.

Here is how you can set up a bot in the MS Bot Framework in a few steps (see previous screenshot):

  1. When you click on publish you will get to a dialog
  2. On this dialog you can select “Enabling Action binding using Microsoft Bot Framework”
  3. The link in the field brings you to the webpage where you can create your bot. You can register a new bot there.
  4. When this is done please copy over the App ID
  5. Copy also the App secret into the correct field in the publish dialog of LUIS.
  6. Finally, copy over the redirect URL provided by LUIS to your app. Unfortunately, you need this URL already during the registration step.
When this configuration is done and the application is correctly created within the Bot Framework. In the framework there are additional steps required to enable various channels. Please follow the instructions there if you want to enable SMS or Slack.

Using the direct Slack connection

Slack is a communication platform for teams and it is getting more and more traction. For LUIS action binding we are providing a slack bot connector which you can configure with a few clicks to make it available for your teams. You just have to configure it in a way that LUIS can talk to your bot. The configuration is handling all handshaking for you. To create a bot in Slack please follow the instructions on

Here is how you can set up a Slack bot in a few steps (see screenshot):

  1. When you click on publish you will get to a dialog.
  2. On this dialog you can select “Enabling Action binding using Slack”.
  3. The link in the field brings you to Slack where you can create your Slack app and bot. Please go there and create your app there.
  4. When this is done please copy over the client ID from your new Slack app.
  5. Copy also the client secret into the correct field in the publish dialog of LUIS. This enables Slack to call LUIS and make use of the language understanding.
  6. Finally, copy over the redirect URL provided by LUIS to your Slack app. This enables your app to call the bound action in LUIS.

When this configuration is done and the application is correctly created in Slack you can use a bot within your team conversation. Just try a few utterances and see if the bot replies to you.

Creating Subscription Keys Via Azure

For unlimited traffic to your HTTP endpoint, you must create a metered key for your account on LUIS. Metered keys provide unlimited traffic to your endpoint following a payment plan. To create your key, follow these steps:

  1. Sign in to the Microsoft Azure Portal
  2. Click (+New) and search for “Cognitive Services” in the marketplace, then click on Cognitive Services APIs and follow the create experience to create an API account you are interested in.
  3. Choose the API you are interested to create a subscription for by clicking on the API Type. In our case, choose the Language Understanding Intelligent Service (LUIS) option. Configure the subscription with settings including account name, pricing tiers, etc.
  4. Once you have created the API account successfully; you can view the keys generated in the (Settings->Keys) blade. These can be tested in your existing application or by following our Documentation.
  5. You can also explore other API account information in the resource view. Today the portal has an events graph showing API calls, but will add additional information in the future.
Once you have created your key, you can add it to your account via the application settings dialog, found in any application.

Speech Integration

Your LUIS endpoints work seamlessly with Microsoft Cognitive Service's speech recognition service. In the C# SDK for the Microsoft Cognitive Services Speech API, you can simply add the LUIS application ID and LUIS subscription key, and the speech recognition result will be sent for interpretation. See the Microsoft Cognitive Services Speech API Overview


Measuring and improving performance

LUIS provides a host of detailed visualizations to measure the performance of your application, and provides several options for making improvements. First we'll cover how to measure performance and identify issues.

Visualization overview

As utterances are labeled, visualizations in the right-hand panel show performance. The drop-down includes visualizations for each intent, each entity, and overviews for all intents and all entities. All of the visualizations show performance of the most recently trained model on all labeled utterances.

Visualizing performance for intents

By choosing "Intents" in the Performance analysis drop-down, an overview for all intents is shown. Each intent is shown as a horizontal bar, where correct predictions are shown in green and incorrect predictions in red. Clicking on a green or red bar displays the corresponding utterances.

Choosing a specific intent in the performance analysis drop-down visualizes performance in two ways. First, the "Summary" tab shows how utterances labeled as "FindNews" are currently classified. In the example below, for the "FindNews" Intent, four utterances are being classified correctly as "FindNews", and one is being classified incorrectly as "None". Clicking on the red bar under "none" shows the corresponding utterance.

Second, the "Details" tab shows a scatter plot that visualizes the distribution of scores. Each box is one labeled utterance, and clicking on a box displays the corresponding utterance. Boxes in pink have been labeled as the target intent -- here, the "FindNews" intent -- and boxes in black have been labeled as another intent. The vertical position of the box is the difference between the score of the target intent and the highest scoring non-target intent, and the grey horizontal line is the decision boundary. In other words, if a box (utterance) is above the line, the model predicts it is the target intent, and if it is below the line, the model predicts it is some other intent. Thus, if an intent is performing perfectly, all of the pink boxes should be above the line, and all of the black boxes should be below the line. Boxes on the wrong side of the line correspond to errors, which should be investigated. Finally, when a box is close to the line, this means the model is uncertain about its prediction; when boxes are close to the top or bottom, the model is certain of its prediction.

In the example below, the one pink box below the line is an error -- the user has clicked on this box to display this utterance:

Visualizing performance for entities

A similar set of visualizations are provided for entities. By choosing "Entities" in the Performance analysis drop-down, an overview for all entities is shown. Each entity is shown with a horizontal bar with one or more colors. Dark green, black, and dark red apply to utterances which have been labeled as containing the entity. Dark green indicates the entity has been correctly found. Black indicates the entity was not found -- i.e., it was missed. Dark red indicates that the model identified the wrong sub-string as the entity. Light red and light green apply to utterances which have been labeled as not containing the entity. Dark red means that the model incorrectly predicted the entity was present, and light green means the model correctly predicted the entity was not present. Clicking on a bar segment shows the corresponding utterance. In the example below, the developer has clicked on the black bar segment for the "Topic" entity.

Finally, the Performance analysis drop-down also includes an entry for the details of each entity. Similar to the details view for an intent, this shows a scatter plot where each box is one labeled utterance. Pink boxes are utterances whose label contains the entity, and black boxes are utterances whose label does not contain the entity. The vertical position corresponds to a function of the CRF scores. If a pink box is above the line, the model correctly predicts the entity; and if a pink box is below the line, the model does not correctly predict the entity. If a black box is below the line, the model correctly predicts the entity is not present; and if a black box is above the line, the model incorrectly predicts it contains the target entity.

As with the intent visualization, if an entity is performing perfectly, all of the pink boxes should be above the line, and all of the black boxes should be below the line. Boxes on the wrong side of the line correspond to errors, which should be investigated. Finally, when a box is close to the line, this means the model is uncertain about its prediction; when boxes are close to the top or bottom, the model is certain of its prediction.

In the example below, two pink boxes are below the line is an error -- the user has clicked on one of these boxes to display an utterance with an error in the "Topic" entity:

After an error is identified, there are several options for resolving it, covered next.

Options for resolving performance problems

There are several options for resolving errors, listed below.

Option 1: Adding model features

Behind the scenes, LUIS uses machine learning based methods to analyze sentences. This process is based on the presence or absence of clues, termed features, which are present in a sentence. For example, in the NewsChat app, if the name of someone on your contacts list is in an utterance, it is a good clue that the intent is to share a story. You can give LUIS explicit knowledge about your contacts by creating a feature that lists them. To do this, click on the "+" button next to "Phrase List Features". Name the feature "Recipients", add the names of your contacts, and save it. LUIS will then be able to more easily recognize the sharing intent. As a second example, in the NewsChat application, suppose people generally express the intent to share an article by saying "Send it ..." or "Share it ..." Now suppose the system has received a request, "shoot that to ..." and labeled it as the "None" intent. The best thing to do would be to tell LUIS to treat the phrase "shoot that" the same way it treats "send it" or "share it". This can be done by creating a phrase list feature called "SharingPhrases" and adding these three phrases. This will tell LUIS to treat these phrases as interchangeable. What it learns about one phrase will be automatically applied to the others as well.

Phrase list features work for both words and phrases. For example, if the phrase "tell me about" is important in an application, you could add it to a feature called SearchPhrases. A sequence of words separated by commas is treated as a phrase.

Sometimes, it is easier to specify a regular expression (regex) than a list of phrases. For example, product codes might follow a regular pattern, like two letters followed by 3 digits. Regular expressions can be added by clicking on the "+" next to the "Regex Features" box on the left. The dialog that appears lists the regex instructions.

Adding model features is likely to help when...

Option 2: Add labeled utterances

Ultimately, the quality of the machine learning models depends on the quality and quantity of the labels. Adding more labeled utterances is a reliable way to improve performance.

Adding labeled utterances is likely to help when...

Option 3: Look for an incorrect utterance label

One common cause of an error is that a label has been mis-assigned.

It's worthwhile to look for an incorrect utterance label when...

Option 4: Change the schema

Sometimes, the schema -- the definition of the intents and entities -- is too hard for a machine learning algorithm to learn. One indication is when it is difficult for the person doing the labeling to decide how to label utterances: if it's hard for a human, it's very hard for a machine! Changing the schema might mean combining, re-grouping, or dropping intents or entities.

As a last resort, consider changing the definition of the intents and entities when...


Using Active Learning

The breakthrough feature of LUIS is active learning. After your endpoint has processed a few dozen interactions, you can start benefiting. In the active learning loop, LUIS examines all the sentences that it has seen, and calls to your attention the ones that it would like you to label. LUIS is able to critique its own work, and these samples are the ones that will give LUIS the biggest boost in performance.

To use the active learning function, open your application for editing, and click on "Suggest". Next, from the drop-down menu, select a specific entity or intent, say "FindNews", and click the search icon. You will see currently unlabeled sentences, along with LUIS' interpretation of them. You should process these in order, starting with the first. Here is an example of what your screen will look like, depending on the queries that you have entered into the endpoint.

The intent scores are shown in the drop-down box next to a sentence. The most likely intent is shown first, so you don't have to do anything if it is correct. Otherwise, scroll down and select the correct intent. The entities that have been detected are shown with color-coded highlighting. If an entity has been mis-labeled, click on it to correct or remove the labeling. You can also highlight and label words that LUIS neglected to label as entities. When you are done correcting a sentence, hit "submit". When a sentence is correct as-is, you should simply hit submit without making any changes.


Exploring the Data

In addition to active learning, LUIS offers two more ways of exploring the data and improving the system. Searching allows you to find sentences that contain particular words, and reviewing shows you sentences you've already labeled.

Searching

Sometimes you will notice an error that involves a particular word, and may wish to find examples with it for labeling. To do this, you go to the "Search" tab and enter the word. LUIS will display all the unlabeled examples it has which contain a word. You can label them, and correct any labels that might already be present. You can search for phrases by entering the words surrounded by quotation marks. After interacting with LUIS via the endpoint for some time, when you search for the word "fire" you might see:

In this case, the system is not identifying the utterances with the correct "ShareNews" intent and the "Recipient" entity of "xiao"; the labels should be corrected, and the sentences submitted to LUIS.

Note that searching applies to the unlabeled data that has been received by the system. To examine data that has already been labeled, LUIS offers the Review tab.

Reviewing

When you click on the Review tab, LUIS will show you utterances you've labeled. A drop-down lets you choose to see all labeled utterances, or only utterances where LUIS's prediction differs from the label.


Importing Utterances

If you have example utterances in your domain, you can load them into LUIS using the "Import Utterances" feature. Utterances should be stored in a text file, with one utterance per line. On the "My Applications" page, click on the "Import Utterances" button for the LUIS application that you want to import utterances into. This is shown in the example below:

In the dialog box, click on "Browse", select the text file containing the utterances you want to import, and click on "OK". The dialog box will show how many utterances have been queued to be imported, and how many were discarded, for example because they are empty lines or duplicates.

After importing, utterances will be available in the "Search" and "Suggest" tabs. If a large set of utterances is uploaded, it may take several minutes for all to be available.

Note that the "Import" function is for unlabeled data. If you have labeled utterances you want to load into LUIS, see the next section on importing and exporting an application.


Importing and Exporting Applications

Exporting an application

LUIS lets you export all of the labels and features you've entered for an application. To do this, click on the "Export App" icon in the list of applications. This is shown in the example below:

This will download a JSON object that contains all of the information you've entered. Note that it does not contain unlabeled utterances; these can be downloaded by clicking on Edit -> Publish -> Download Logs.

Importing an application

This JSON file can now be uploaded to create a new application using New App -> Import Existing App. This dialog box contains an optional application name. This is useful if you already have an application with the same name as the exported application.

Using import to upload labeled utterances

The JSON file can be edited outside of LUIS before being re-imported, for example to add labeled utterances. For entity labels, note that the start and end positions refer to tokens, not characters. Tokenization depends on the culture (locale) of the application -- see the section on Localization for more information.

Copying/sharing applications

The JSON file for an exported application contains all of the "source" required to re-create the application. Thus exported application can be re-imported to perform copy an application. In addition, a JSON file can be shared with other LUIS developers.

Version control and team support

The JSON file for an exported application is human-readable. This makes the JSON file suitable for managing in version control, outside of LUIS -- the human-readability makes it possible to perform manual merges where necessary.

A typical development process therefore is to create a LUIS model, publish it to an HTTP endpoint, export the source JSON, and check the JSON into version control alongside the application that calls the LUIS endpoint. As data arrives on the endpoint, model improvements can be made in LUIS, and periodically the application can be re-exported and merged into the repository. To add new application functionality that requires a change in LUIS behavior -- for example, adding a new intent -- a branch can be created, and the existing LUIS application can be imported into a new LUIS application. Changes can be made in this new LUIS application, then published to a second HTTP endpoint. The new LUIS application can be exported and checked back into the repository. In other words, different versions of the client application can refer to different LUIS applications, so that the LUIS schema and the application are in sync.

Notes about importing and exporting applications

Note that when an application is exported, this includes the cleartext of all labeled utterances. If these labeled utterances contain personally identifying information, then the terms of service of LUIS or your application may restrict or prohibit sharing the application source.

Also, when a JSON file is imported, it does not have access to the unlabeled utterances associated with application from which the JSON file was exported. If you want to copy the unlabeled utterances from one application to another, first download the unlabeled utterances from the source application with Edit -> Publish -> Download Logs, then upload them to the target application with Import Utterances.


Localization Support

LUIS allows you to build applications in:

The culture is chosen when the application is created, and cannot be modified once the application is created.

Chinese support notes

In the zh-cn culture, LUIS expects the simplified Chinese character set (not the traditional character set).

The names of intents, entities, features, and regular expressions may be in Chinese or Roman characters.

When writing regular expressions in Chinese, do not insert whitespace between Chinese characters.

Rare or foreign words in an application

In the en-us culture, LUIS can learn to distinguish most English words, including slang. In the zh-cn culture, LUIS can learn to distinguish most Chinese characters. If you use a rare word (en-us) or character (zh-cn), and you see that LUIS seems unable to distinguish that words or character, you can add that word or character to a phrase-list feature. Words outside of the culture of the application -- i.e., foreign words -- should be added to a phrase-list feature.

Tokenization

In normal LUIS use, you won't need to worry about tokenization, but one place where tokenization is important is when manually adding labels to an exported application's JSON file. See the section on importing and exporting an application for details.

To perform machine learning, LUIS breaks an utterance into "tokens". A "token" is the smallest unit that can be labeled in an entity.

How tokenization is done depends on the application's culture:


Pre-built entities

LUIS includes a set of pre-built entities. When a pre-built entity is included in your application, its predictions will be included in your published application, as well as in the LUIS web UI while labeling. The behavior of pre-built entities cannot be modified.

Unless otherwise noted, each pre-built entity is available in all LUIS application locales (cultures).

Below is a table of pre-built entities with example utterances and their return values

Pre-built entity Example utterance JSON
builtin.number
ten
{
    "type": "builtin.number",
    "entity": "ten"
}
3.1415
{
    "type": "builtin.number",
    "entity": "3 . 1415"
}
builtin.ordinal
first
{
    "type": "builtin.ordinal",
    "entity": "first"
}
10th
{
    "type": "builtin.ordinal",
    "entity": "10th"
}
builtin.temperature
10 degrees celcius
{
    "type": "builtin.temperature",
    "entity": "10 degrees celcius"
}
78 F
{
    "type": "builtin.temperature",
    "entity": "78 f"
}
builtin.dimension
2 miles
{
    "type": "builtin.dimension",
    "entity": "2 miles"
}
650 square kilometers
{
    "type": "builtin.dimension",
    "entity": "650 square kilometers"
}
builtin.money
1000.00 US dollars
{
    "type": "builtin.money",
    "entity": "1000.00 us dollars"
}
$ 67.5 B
{
    "type": "builtin.money",
    "entity": "$ 67.5"
}
builtin.age
100 year old
{
    "type": "builtin.age",
    "entity": "100 year old"
}
19 years old
{
    "type": "builtin.age",
    "entity": "19 years old"
}
builtin.geography See below See below
builtin.encyclopedia See below See below
builtin.datetime See below See below

The last 3 built-in entity types encompass multiple subtypes. These are covered next.

builtin.datetime

The builtin.datetime pre-built entity has awareness of the current date and time -- in the examples below, the current date is 2015-08-14. Also, builtin.datetimeprovides a resolution field that produces a machine-readable dictionary.

This pre-built entity has 3 subtypes:

Pre-built entity Example utterance JSON
builtin.datetime.date
tomorrow
{
    "type": "builtin.datetime.date",
    "entity": "tomorrow",
	"resolution": {
        "date": "2015-08-15"
    }
}
january 10 2009
{
    "type": "builtin.datetime.date",
    "entity": "january 10 2009",
	"resolution": {
        "date": "2009-01-10"
    }
}
monday
{
    "entity": "monday",
    "type": "builtin.datetime.date",
    "resolution": {
        "date": "XXXX-WXX-1"
    }
}
next week
{
    "entity": "next week",
    "type": "builtin.datetime.date",
    "resolution": {
        "date": "2015-W34"
    }
}
next monday
{
    "entity": "next monday",
    "type": "builtin.datetime.date",
    "resolution": {
        "date": "2015-08-17"
	}
}
week of september 30th
{
    "entity": "week of september 30th",
    "type": "builtin.datetime.date",
    "resolution": {
        "comment": "weekof",
        "date": "XXXX-09-30"
	}
}
builtin.datetime.time
3 : 00
{
    "type": "builtin.datetime.time",
    "entity": "3 : 00",
    "resolution": {
        "comment": "ampm",
        "time": "T03:00"
    }	
}
4 pm
{
    "type": "builtin.datetime.time",
    "entity": "4 pm",
    "resolution": {
        "time": "T16"
    }	
}
tomorrow morning
{
    "entity": "tomorrow morning",
    "type": "builtin.datetime.time",
    "resolution": {
        "time": "2015-08-15TMO"
    }
}
tonight
{
    "entity": "tonight",
    "type": "builtin.datetime.time",
    "resolution": {
        "time": "2015-08-14TNI"
    }
}
builtin.datetime.duration
for 3 hours
{
    "type": "builtin.datetime.duration",
    "entity": "3 hours",
    "resolution": {
        "duration": "PT3H"
    }	
}
30 minutes long
{
    "type": "builtin.datetime.duration",
    "entity": "30 minutes",
    "resolution": {
        "duration": "PT30M"
    }	
}
all day
{
    "type": "builtin.datetime.duration",
    "entity": "all day",
    "resolution": {
        "duration": "P1D"
    }	
}
builtin.datetime.set
daily
{
    "type": "builtin.datetime.set",
    "entity": "daily",
    "resolution": {
        "time": "XXXX-XX-XX"
    }	
}
every morning
{
    "type": "builtin.datetime.set",
    "entity": "every morning",
    "resolution": {
        "time": "XXXX-XX-XXTMO"
    }	
}
every tuesday
{
    "entity": "every tuesday",
    "type": "builtin.datetime.set",
    "resolution": {
        "time": "XXXX-WXX-2"
    }
}
every week
{
    "entity": "every week",
    "type": "builtin.datetime.set",
    "resolution": {
        "time": "XXXX-WXX"
    }
}

builtin.geography

Note: builtin.geography is available only in en-us.

The builtin.geography built-in entity type has 3 sub-types:

Pre-built entity Example utterance JSON
builtin.geography.city
seattle
{
    "type": "builtin.geography.city",
    "entity": "seattle"
}
paris
{
    "type": "builtin.geography.city",
    "entity": "paris"
}
builtin.geography.country
australia
{
    "type": "builtin.geography.country",
    "entity": "australia"
}
japan
{
    "type": "builtin.geography.country",
    "entity": "japan"
}
builtin.geography.pointOfInterest
amazon river
{
    "type": "builtin.geography.pointOfInterest",
    "entity": "amazon river"
}
sahara desert
{
    "type": "builtin.geography.pointOfInterest",
    "entity": "sahara desert"
}

builtin.encyclopedia

Note: builtin.encyclopedia is available only in en-us.

The builtin.encyclopedia built-in entity includes over 100 sub-types, listed below. In addition, encyclopedia entities often map to multiple types. For example, the query Ronald Reagan yields:

    {
      "entity": "ronald reagan",
      "type": "builtin.encyclopedia.people.person"
    },
    {
      "entity": "ronald reagan",
      "type": "builtin.encyclopedia.film.actor"
    },
    {
      "entity": "ronald reagan",
      "type": "builtin.encyclopedia.government.us_president"
    },
    {
      "entity": "ronald reagan",
      "type": "builtin.encyclopedia.book.author"
    }
Pre-built entity Pre-built entity (sub-types) Example utterance
builtin.encyclopedia.people.person
builtin.encyclopedia.people.person
bryan adams
builtin.encyclopedia.film.producer
walt disney
builtin.encyclopedia.film.cinematographer
adam greenberg
builtin.encyclopedia.royalty.monarch
elizabeth ii
builtin.encyclopedia.film.director
steven spielberg
builtin.encyclopedia.film.writer
alfred hitchcock
builtin.encyclopedia.film.actor
robert de niro
builtin.encyclopedia.martial_arts.martial_artist
bruce lee
builtin.encyclopedia.architecture.architect
james gallier
builtin.encyclopedia.geography.mountaineer
jean couzy
builtin.encyclopedia.celebrities.celebrity
angelina jolie
builtin.encyclopedia.music.musician
bob dylan
builtin.encyclopedia.soccer.player
diego maradona
builtin.encyclopedia.baseball.player
babe ruth
builtin.encyclopedia.basketball.player
heiko schaffartzik
builtin.encyclopedia.olympics.athlete
andre agassi
builtin.encyclopedia.basketball.coach
bob huggins
builtin.encyclopedia.american_football.coach
james franklin
builtin.encyclopedia.cricket.coach
andy flower
builtin.encyclopedia.ice_hockey.coach
david quinn
builtin.encyclopedia.ice_hockey.player
vincent lecavalier
builtin.encyclopedia.government.politician
harold nicolson
builtin.encyclopedia.government.us_president
barack obama
builtin.encyclopedia.government.us_vice_president
dick cheney
builtin.encyclopedia.organization.organization
builtin.encyclopedia.organization.organization
united nations
builtin.encyclopedia.sports.league
american league
builtin.encyclopedia.ice_hockey.conference
western hockey league
builtin.encyclopedia.baseball.division
american league east
builtin.encyclopedia.baseball.league
major league baseball
builtin.encyclopedia.basketball.conference
national basketball league
builtin.encyclopedia.basketball.division
pacific division
builtin.encyclopedia.soccer.league
premier league
builtin.encyclopedia.american_football.division
afc north
builtin.encyclopedia.broadcast.broadcast
nebraska educational telecommunications
builtin.encyclopedia.broadcast.tv_station
abc
builtin.encyclopedia.broadcast.tv_channel
cnbc world
builtin.encyclopedia.broadcast.radio_station
bbc radio 1
builtin.encyclopedia.business.operation
bank of china
builtin.encyclopedia.music.record_label
pixar
builtin.encyclopedia.aviation.airline
air france
builtin.encyclopedia.automotive.company
general motors
builtin.encyclopedia.music.musical_instrument_company
gibson guitar corporation
builtin.encyclopedia.tv.network
cartoon network
builtin.encyclopedia.education.educational_institution
cornwall hill college
builtin.encyclopedia.education.school
boston arts academy
builtin.encyclopedia.education.university
johns hopkins university
builtin.encyclopedia.sports.team
united states national handball team
builtin.encyclopedia.basketball.team
chicago bulls
builtin.encyclopedia.sports.professional_sports_team
boston celtics
builtin.encyclopedia.cricket.team
mumbai indians
builtin.encyclopedia.baseball.team
houston astros
builtin.encyclopedia.american_football.team
green bay packers
builtin.encyclopedia.ice_hockey.team
hamilton bulldogs
builtin.encyclopedia.soccer.team
fc bayern munich
builtin.encyclopedia.government.political_party
pertubuhan kebangsaan melayu singapura
builtin.encyclopedia.time.event
builtin.encyclopedia.time.event
1740 batavia massacre
builtin.encyclopedia.sports.championship_event
super bowl xxxix
builtin.encyclopedia.award.competition
eurovision song contest 2003
builtin.encyclopedia.tv.series_episode
builtin.encyclopedia.tv.series_episode
the magnificent seven
builtin.encyclopedia.tv.multipart_tv_episode
the deadly assassin
builtin.encyclopedia.commerce.consumer_product
builtin.encyclopedia.commerce.consumer_product
nokia lumia 620
builtin.encyclopedia.music.album
dance pool
builtin.encyclopedia.automotive.model
pontiac fiero
builtin.encyclopedia.computer.computer
toshiba satellite
builtin.encyclopedia.computer.web_browser
internet explorer
builtin.encyclopedia.commerce.brand
builtin.encyclopedia.commerce.brand
diet coke
builtin.encyclopedia.automotive.make
chrysler
builtin.encyclopedia.music.artist
builtin.encyclopedia.music.artist
michael jackson
builtin.encyclopedia.music.group
the yardbirds
builtin.encyclopedia.music.music_video
builtin.encyclopedia.music.music_video
the beatles anthology
builtin.encyclopedia.theater.play
builtin.encyclopedia.theater.play
camelot
builtin.encyclopedia.sports.fight_song
builtin.encyclopedia.sports.fight_song
the cougar song
builtin.encyclopedia.film.series
builtin.encyclopedia.film.series
the twilight saga
builtin.encyclopedia.tv.program
builtin.encyclopedia.tv.program
late night with david letterman
builtin.encyclopedia.radio.radio_program
builtin.encyclopedia.radio.radio_program
grand ole opry
builtin.encyclopedia.film.film
builtin.encyclopedia.film.film
alice in wonderland
builtin.encyclopedia.cricket.tournament
builtin.encyclopedia.cricket.tournament
cricket world cup
builtin.encyclopedia.government.government
builtin.encyclopedia.government.government
european commission
builtin.encyclopedia.sports.team_owner
builtin.encyclopedia.sports.team_owner
bob castellini
builtin.encyclopedia.music.genre
builtin.encyclopedia.music.genre
eastern europe
builtin.encyclopedia.ice_hockey.division
builtin.encyclopedia.ice_hockey.division
hockeyallsvenskan
builtin.encyclopedia.architecture.style
builtin.encyclopedia.architecture.style
spanish colonial revival architecture
builtin.encyclopedia.broadcast.producer
builtin.encyclopedia.broadcast.producer
columbia tristar television
builtin.encyclopedia.book.author
builtin.encyclopedia.book.author
adam maxwell
builtin.encyclopedia.religion.founding_figur
builtin.encyclopedia.religion.founding_figur
gautama buddha
builtin.encyclopedia.martial_arts.martial_art
builtin.encyclopedia.martial_arts.martial_art
american kenpo
builtin.encyclopedia.sports.school
builtin.encyclopedia.sports.school
yale university
builtin.encyclopedia.business.product_line
builtin.encyclopedia.business.product_line
canon powershot
builtin.encyclopedia.internet.website
builtin.encyclopedia.internet.website
bing
builtin.encyclopedia.time.holiday
builtin.encyclopedia.time.holiday
easter
builtin.encyclopedia.food.candy_bar
builtin.encyclopedia.food.candy_bar
cadbury dairy milk
builtin.encyclopedia.finance.stock_exchange
builtin.encyclopedia.finance.stock_exchange
tokyo stock exchange
builtin.encyclopedia.film.festival
builtin.encyclopedia.film.festival
berlin international film festival

Pre-built application v2

In addition to allowing you to build your own applications, LUIS also provides selected models from the Microsoft Cortana personal assistant, in a pre-built application. To use it, click on the "Cortana pre-built app" at the top of your list of applications.

For example, the utterance "set up an appointment at 2:00 pm tomorrow for 90 minutes called discuss budget" returns:

    {
	  "q": "set up an appointment at 2:00 pm tomorrow for 90 minutes called discuss budget",
	  "entities": [
		{
		  "resolution": {
			"resolution_type": "builtin.datetime.time",
			"time": "T14:00"
		  },
		  "type": "builtin.calendar.start_time",
		  "entity": "2:00 pm"
		},
		{
		  "resolution": {
			"date": "2015-10-19",
			"resolution_type": "builtin.datetime.date"
		  },
		  "type": "builtin.calendar.start_date",
		  "entity": "tomorrow"
		},
		{
		  "resolution": {
			"duration": "PT90M",
			"resolution_type": "builtin.datetime.duration"
		  },
		  "type": "builtin.calendar.duration",
		  "entity": "90 minutes"
		},
		{
		  "type": "builtin.calendar.title",
		  "entity": "discuss budget"
		}
	  ],
	  "intents": [
		{
		  "intent": "builtin.intent.calendar.create_calendar_entry"
		}
	  ]
	}
    

This is an "as-is" application: the intents and entities in this application cannot be edited or integrated into other LUIS applications. If you’d like your client to have access to both this pre-built LUIS application and your own LUIS application, your client can make 2 separate HTTP calls.

The pre-built personal assistant application is available in all LUIS application cultures (locales).

Earlier versions

Version 1 of the pre-built application continues to be available, but has been deprecated. For developers continuing to use version 1, the documentation is available here.

Intents

The pre-built personal assistant application can identify the following intents:

Intent Example utterance
builtin.intent.alarm.alarm_other
update my 7:30 alarm to be eight o'clock
change my alarm from 8am to 9am
builtin.intent.alarm.delete_alarm
delete an alarm
delete my alarm "wake up"
builtin.intent.alarm.find_alarm
what time is my wake-up alarm set for?
is my wake-up alarm on?
builtin.intent.alarm.set_alarm
turn on my wake up alarm
can you set an alarm for 12 called take antibiotics?
builtin.intent.alarm.snooze
snooze alarm for 5 minutes
snooze alarm
builtin.intent.alarm.time_remaining
how much longer do i have until "wake-up"?
how much time until my next alarm?
builtin.intent.alarm.turn_off_alarm
turn off my 7am alarm
turn off my wake up alarm
builtin.intent.calendar.change_calendar_entry
change an appointment
move my meeting from today to tomorrow
builtin.intent.calendar.check_availability
is tim busy on friday?
is brian free on saturday
builtin.intent.calendar.connect_to_meeting
connect to a meeting
join the meeting online
builtin.intent.calendar.create_calendar_entry
i need to schedule an appointment with tony for friday
make an appointment with lisa at 2pm on sunday
builtin.intent.calendar.delete_calendar_entry
delete my appointment
remove the meeting at 3 pm tomorrow from my calendar
builtin.intent.calendar.find_calendar_entry
show my calendar
display my weekly calendar
builtin.intent.calendar.find_calendar_when
when is my next meeting with jon?
what time is my appointment with larry on monday?
builtin.intent.calendar.find_calendar_where
show me the location of my 6 o'clock meeting
where is that meeting with jon?
builtin.intent.calendar.find_calendar_who
who is this meeting with?
who else is invited?
builtin.intent.calendar.find_calendar_why
what are the details of my 11 o'clock meeting?
what is that meeting with jon about?
builtin.intent.calendar.find_duration
how long is my next meeting
how many minutes long is my meeting this afternoon
builtin.intent.calendar.time_remaining
how much time until my next appointment?
how much more time do i have before the meeting?
builtin.intent.communication.add_contact
save this number and put the name as jose
put jason in my contacts list
builtin.intent.communication.answer_phone
answer
answer the call
builtin.intent.communication.assign_nickname
edit nickname for nickolas
add a nickname for john doe
builtin.intent.communication.call_voice_mail
voice mail
call voicemail
builtin.intent.communication.find_contact
show me my contacts
find contacts
builtin.intent.communication.forwarding_off
stop forwarding my calls
switch off call forwarding
builtin.intent.communication.forwarding_on
set call forwarding to send calls to home phone
forward calls to home phone
builtin.intent.communication.ignore_incoming
do not answer that call
not now, i'm busy
builtin.intent.communication.ignore_with_message
don't answer that call but send a message instead
ignore and send a text back
builtin.intent.communication.make_call
call bob and john
call mom and dad
builtin.intent.communication.press_key
dial star
press the 1 2 3
builtin.intent.communication.read_aloud
read text
what did she say in the message
builtin.intent.communication.redial
redial my last call
redial
builtin.intent.communication.send_email
email to mike waters mike that dinner last week was splendid
send an email to bob
builtin.intent.communication.send_text
send text to bob and john
message
builtin.intent.communication.speakerphone_off
take me off speaker
turn off speakerphone
builtin.intent.communication.speakerphone_on
speakerphone mode
put speakerphone on
builtin.intent.mystuff.find_attachment
find the document john emailed me yesterday
find the doc from john
builtin.intent.mystuff.find_my_stuff
i want to edit my shopping list from yesterday
find my chemistry notes from september
builtin.intent.mystuff.search_messages
open message
messages
builtin.intent.mystuff.transform_my_stuff
share my shopping list with my husband
delete my shopping list
builtin.intent.ondevice.open_setting
open cortana settings
jump to notifications
builtin.intent.ondevice.pause
turn off music
music off
builtin.intent.ondevice.play_music
i want to hear owner of a lonely heart
play some gospel music
builtin.intent.ondevice.recognize_song
tell me what this song is
analyze and retrieve title of song
builtin.intent.ondevice.repeat
repeat this track
play this song again
builtin.intent.ondevice.resume
restart music
start music again
builtin.intent.ondevice.skip_back
back up a track
previous song
builtin.intent.ondevice.skip_forward
next song
skip ahead a track
builtin.intent.ondevice.turn_off_setting
wifi off
disable airplane mode
builtin.intent.ondevice.turn_on_setting
wifi on
turn on bluetooth
builtin.intent.places.add_favorite_place
add this address to my favorites
save this location to my favorites
builtin.intent.places.book_public_transportation
buy a train ticket
book a tram pass
builtin.intent.places.book_taxi
can you find me a ride at this hour?
find a taxi
builtin.intent.places.check_area_traffic
what's the traffic like on 520
how is the traffic on i-5
builtin.intent.places.check_into_place
check into joya
check in here
builtin.intent.places.check_route_traffic
show me the traffic on the way to kirkland
how is the traffic to seattle?
builtin.intent.places.find_place
where do i live
give me the top 3 japanese restaurants
builtin.intent.places.get_address
show me the address of guu on robson street
what is the address of the nearest starbucks?
builtin.intent.places.get_coupon
find deals on tvs in my area
discounts in mountain view
builtin.intent.places.get_distance
how far away is holiday inn?
what's the distance to tahoe
builtin.intent.places.get_hours
what are bar del corso's hours on mondays?
when is the library open?
builtin.intent.places.get_menu
show me applebee's menu
what's on the menu at sizzler
builtin.intent.places.get_phone_number
give the number for home depot
what is the phone number of the nearest starbucks?
builtin.intent.places.get_price_range
how much does dinner at red lobster cost
how expensive is purple cafe
builtin.intent.places.get_reviews
show me reviews for local hardware stores
i want to see restaurant reviews
builtin.intent.places.get_route
give me directions to
it is possible to get to pizza hut on foot
builtin.intent.places.get_star_rating
how many stars does the french laundry have?
is the aquarium in monterrey good?
builtin.intent.places.get_transportation_schedule
what time does the san francisco ferry leave?
when is the latest train to seattle?
builtin.intent.places.get_travel_time
what's the driving time to denver from sf
how long will it take to get to san francisco from here
builtin.intent.places.make_call
call dr smith in bellevue
call the home depot on 1st street
builtin.intent.places.rate_place
give a rating for this restaurant
rate il fornaio 5 stars on yelp
builtin.intent.places.show_map
what's my current location
what's my location
builtin.intent.places.takes_reservations
is it possible to make a reservation at the olive garden
does the art gallery accept reservations
builtin.intent.reminder.change_reminder
change a reminder
move my picture day reminder up 30 minutes
builtin.intent.reminder.create_single_reminder
remind me to wake up at 7 am
remind me to go trick or treating with luca at 4:40pm
builtin.intent.reminder.delete_reminder
delete this reminder
delete my picture reminder
builtin.intent.reminder.find_reminder
do i have any reminders set up for today
do i have a reminder set for luca's party
builtin.intent.reminder.read_aloud
read reminder out loud
read that reminder
builtin.intent.reminder.snooze
snooze that reminder until tomorrow
snooze this reminder
builtin.intent.reminder.turn_off_reminder
turn off reminder
dismiss airport pick up reminder
builtin.intent.weather.change_temperature_unit
change from fahrenheit to kelvin
change from fahrenheit to celsius
builtin.intent.weather.check_weather
show me the forecast for my upcoming trip to seattle
how will the weather be this weekend
builtin.intent.weather.check_weather_facts
what is the weather like in hawaii in december?
what was the temperature this time last year?
builtin.intent.weather.compare_weather
give me a comparison between the temperature high and lows of dallas and houston, tx
how does the weather compare to slc and nyc
builtin.intent.weather.get_frequent_locations
give me my most frequent location
show most often stops
builtin.intent.weather.get_weather_advisory
weather warnings
show weather advisory for sacramento
builtin.intent.weather.get_weather_maps
display a weather map
show me weather maps for africa
builtin.intent.weather.question_weather
will it be foggy tomorrow morning?
will i need to shovel snow this weekend?
builtin.intent.weather.show_weather_progression
show local weather radar
begin radar
builtin.intent.none
how old are you
open camera

Entities

The pre-built personal assistant application can identify the following entities:

Entity Example utterance JSON
builtin.alarm.alarm_state
turn off my wake up alarm
{
    "type": "builtin.alarm.alarm_state",
    "entity": "off"
}
is my wake up alarm on
{
    "type": "builtin.alarm.alarm_state",
    "entity": "on"
}
builtin.alarm.duration
snooze for 10 minutes
{
    "type": "builtin.alarm.duration",
    "entity": "10 minutes",
    "resolution": {
        "resolution_type": "builtin.datetime.duration",
        "duration": "PT10M"
    }
}
snooze alarm for 5 minutes
{
    "type": "builtin.alarm.duration",
    "entity": "5 minutes",
    "resolution": {
        "resolution_type": "builtin.datetime.duration",
        "duration": "PT5M"
    }
}
builtin.alarm.start_date
set an alarm for monday at 7 am
{
    "type": "builtin.alarm.start_date",
    "entity": "monday",
    "resolution": {
        "resolution_type": "builtin.datetime.time",
        "time": "XXXX-WXX-1T07"
    }
}
set an alarm for tomorrow at noon
{
    "type": "builtin.alarm.start_date",
    "entity": "tomorrow",
    "resolution": {
        "resolution_type": "builtin.datetime.date",
        "date": "2015-10-18"
    }
}
builtin.alarm.start_time
create an alarm for 30 minutes
{
    "type": "builtin.alarm.start_time",
    "entity": "30 minutes",
    "resolution": {
        "resolution_type": "builtin.datetime.duration",
        "duration": "PT30M"
    }
}
set the alarm to go off in 20 minutes
{
    "type": "builtin.alarm.start_time",
    "entity": "in 20 minutes",
    "resolution": {
        "resolution_type": "builtin.datetime.time",
        "time": "2015-10-17T04:17"
    }
}
builtin.alarm.title
is my wake up alarm on
{
    "type": "builtin.alarm.title",
    "entity": "wake up"
}
can you set an alarm for quarter to 12 monday to friday called take antibiotics
{
    "type": "builtin.alarm.title",
    "entity": "take antibiotics"
}
builtin.calendar.absolute_location
create an appointment for tomorrow at 123 main street
{
    "type": "builtin.calendar.absolute_location",
    "entity": "123 main street"
}
the meeting will take place in cincinnati on the 5th of june
{
    "type": "builtin.calendar.absolute_location",
    "entity": "cincinnati"
}
builtin.calendar.contact_name
put a marketing meeting on my calendar and be sure that joe is there
{
    "type": "builtin.calendar.contact_name",
    "entity": "joe"
}
i want to set up a lunch at il fornaio and invite paul
{
    "type": "builtin.calendar.contact_name",
    "entity": "paul"
}
builtin.calendar.destination_calendar
add this to my work schedule
{
    "type": "builtin.calendar.destination_calendar",
    "entity": "work"
}
put this on my personal calendar
{
    "type": "builtin.calendar.destination_calendar",
    "entity": "personal"
}
builtin.calendar.duration
set up an appointment for an hour at 6 tonight
{
    "type": "builtin.calendar.duration",
    "entity": "an hour",
    "resolution": {
        "resolution_type": "builtin.datetime.duration",
        "duration": "PT1H"
    }
}
book a 2 hour meeting with joe
{
    "type": "builtin.calendar.duration",
    "entity": "2 hour",
    "resolution": {
        "resolution_type": "builtin.datetime.duration",
        "duration": "PT2H"
    }
}
builtin.calendar.end_date
create a calendar entry called vacation from tomorrow until next monday
{
    "type": "builtin.calendar.end_date",
    "entity": "next monday",
    "resolution": {
        "resolution_type": "builtin.datetime.date",
        "date": "2015-10-19"
    }
}
block my time as busy until monday, october 5th
{
    "type": "builtin.calendar.end_date",
    "entity": "monday, october 5th",
    "resolution": {
        "resolution_type": "builtin.datetime.date",
        "date": "XXXX-10-05"
    }
}
builtin.calendar.end_time
the meeting ends at 5:30 PM
{
    "type": "builtin.calendar.end_time",
    "entity": "5:30 PM",
    "resolution": {
        "resolution_type": "builtin.datetime.time",
        "time": "T17:30"
    }
}
schedule it from 11 to noon
{
    "type": "builtin.calendar.end_time",
    "entity": "noon",
    "resolution": {
        "resolution_type": "builtin.datetime.time",
        "time": "T12:00:00"
    }
}
builtin.calendar.implicit_location
cancel the appointment at the dmv
{
    "type": "builtin.calendar.implicit_location",
    "entity": "dmv"
}
change the location of miles' birthday to poppy restaurant
{
    "type": "builtin.calendar.implicit_location",
    "entity": "poppy restaurant"
}
builtin.calendar.move_earlier_time
push the meeting forward an hour
{
    "type": "builtin.calendar.move_earlier_time",
    "entity": "an hour",
    "resolution": {
        "resolution_type": "builtin.datetime.duration",
        "duration": "PT1H"
    }
}
move the dentist's appointment up 30 minutes
{
    "type": "builtin.calendar.move_earlier_time",
    "entity": "30 minutes",
    "resolution": {
        "resolution_type": "builtin.datetime.duration",
        "duration": "PT30M"
    }
}
builtin.calendar.move_later_time
move my dentist appointment 30 minutes
{
    "type": "builtin.calendar.move_later_time",
    "entity": "30 minutes",
    "resolution": {
        "resolution_type": "builtin.datetime.duration",
        "duration": "PT30M"
    }
}
push the meeting out an hour
{
    "type": "builtin.calendar.move_later_time",
    "entity": "an hour",
    "resolution": {
        "resolution_type": "builtin.datetime.duration",
        "duration": "PT1H"
    }
}
builtin.calendar.original_start_date
reschedule my appointment at the barber from tuesday to wednesday
{
    "type": "builtin.calendar.original_start_date",
    "entity": "tuesday",
    "resolution": {
        "resolution_type": "builtin.datetime.date",
        "date": "XXXX-WXX-2"
    }
}
move my meeting with ken from monday to tuesday
{
    "type": "builtin.calendar.original_start_date",
    "entity": "monday",
    "resolution": {
        "resolution_type": "builtin.datetime.date",
        "date": "XXXX-WXX-1"
    }
}
builtin.calendar.original_start_time
reschedule my meeting from 2:00 to 3
{
    "type": "builtin.calendar.original_start_time",
    "entity": "2:00",
    "resolution": {
        "resolution_type": "builtin.datetime.time",
        "comment": "ampm",
        "time": "T02:00"
    }
}
change my dentist appointment from 3:30 to 4
{
    "type": "builtin.calendar.original_start_time",
    "entity": "3:30",
    "resolution": {
        "resolution_type": "builtin.datetime.time",
        "comment": "ampm",
        "time": "T03:30"
    }
}
builtin.calendar.start_date
what time does my party start on flag day?
{
    "type": "builtin.calendar.start_date",
    "entity": "flag day",
    "resolution": {
        "resolution_type": "builtin.datetime.date",
        "date": "2015-10-17"
    }
}
schedule lunch for the friday after next at noon
{
    "type": "builtin.calendar.start_date",
    "entity": "friday after next",
    "resolution": {
        "resolution_type": "builtin.datetime.date",
        "date": "XXXX-WXX-5"
    }
}
builtin.calendar.start_time
i want to schedule it for this morning
{
    "type": "builtin.calendar.start_time",
    "entity": "this morning",
    "resolution": {
        "resolution_type": "builtin.datetime.time",
        "time": "2015-10-17TMO"
    }
}
i want to schedule it in the morning
{
    "type": "builtin.calendar.start_time",
    "entity": "morning",
    "resolution": {
        "resolution_type": "builtin.datetime.time",
        "time": "TMO"
    }
}
builtin.calendar.title
vet appointment
{
    "type": "builtin.calendar.title",
    "entity": "vet appointment"
}
dentist tuesday
{
    "type": "builtin.calendar.title",
    "entity": "dentist"
}
builtin.communication.audio_device_type
make the call using bluetooth
{
    "type": "builtin.communication.audio_device_type",
    "entity": "bluetooth"
}
call using my headset
{
    "type": "builtin.communication.audio_device_type",
    "entity": "headset"
}
builtin.communication.contact_name
text bob jones
{
    "type": "builtin.communication.contact_name",
    "entity": "bob jones"
}
call sarah
{
    "type": "builtin.communication.contact_name",
    "entity": "sarah"
}
builtin.communication.destination_platform
call dave in london
{
    "type": "builtin.communication.destination_platform",
    "entity": "london"
}
call his work line
{
    "type": "builtin.communication.destination_platform",
    "entity": "work line",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "work"
    }
}
builtin.communication.from_relationship_name
show calls from my daughter
{
    "type": "builtin.communication.from_relationship_name",
    "entity": "daughter"
}
read the email from mom
{
    "type": "builtin.communication.from_relationship_name",
    "entity": "mom"
}
builtin.communication.key
dial star
{
    "type": "builtin.communication.key",
    "entity": "star"
}
press the hash key
{
    "type": "builtin.communication.key",
    "entity": "hash"
}
builtin.communication.message
email carly to say i'm running late
{
    "type": "builtin.communication.message",
    "entity": "i'm running late"
}
please text angus smith good luck on your exam
{
    "type": "builtin.communication.message",
    "entity": "good luck on your exam"
}
builtin.communication.message_category
new email marked for follow up
{
    "type": "builtin.communication.message_category",
    "entity": "follow up"
}
new email marked high priority
{
    "type": "builtin.communication.message_category",
    "entity": "high priority",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "High"
    }
}
builtin.communication.message_type
send an email
{
    "type": "builtin.communication.message_type",
    "entity": "email",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "email"
    }
}
read my text messages aloud
{
    "type": "builtin.communication.message_type",
    "entity": "text",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "sms"
    }
}
builtin.communication.phone_number
i want to dial 1-800-328-9459
{
    "type": "builtin.communication.phone_number",
    "entity": "1-800-328-9459"
}
call 555-555-5555
{
    "type": "builtin.communication.phone_number",
    "entity": "555-555-5555"
}
builtin.communication.relationship_name
text my husband
{
    "type": "builtin.communication.relationship_name",
    "entity": "husband",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "husband"
    }
}
email family
{
    "type": "builtin.communication.relationship_name",
    "entity": "family"
}
builtin.communication.slot_attribute
change the recipient
{
    "type": "builtin.communication.slot_attribute",
    "entity": "recipient",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "recipient"
    }
}
change the text
{
    "type": "builtin.communication.slot_attribute",
    "entity": "text"
}
builtin.communication.source_platform
call him from skype
{
    "type": "builtin.communication.source_platform",
    "entity": "skype"
}
call him from my personal line
{
    "type": "builtin.communication.source_platform",
    "entity": "personal line"
}
builtin.mystuff.attachment
with documents attached
{
    "type": "builtin.mystuff.attachment",
    "entity": "attached"
}
find the email attachment bob sent
{
    "type": "builtin.mystuff.attachment",
    "entity": "attachment"
}
builtin.mystuff.contact_name
find the spreadsheet lisa sent to me
{
    "type": "builtin.mystuff.contact_name",
    "entity": "me",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "me"
    }
}
where's the document i sent to susan last night
{
    "type": "builtin.mystuff.contact_name",
    "entity": "susan"
}
builtin.mystuff.data_source
c:\dev\
{
    "type": "builtin.mystuff.data_source",
    "entity": "c:\dev\"
}
my desktop
{
    "type": "builtin.mystuff.data_source",
    "entity": "desktop",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "desktop"
    }
}
builtin.mystuff.data_type
locate the document i worked on last night
{
    "type": "builtin.mystuff.data_type",
    "entity": "document",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "Document"
    }
}
bring up mike's visio diagram
{
    "type": "builtin.mystuff.data_type",
    "entity": "visio diagram"
}
builtin.mystuff.end_date
show me the docs i worked on between yesterday and today
{
    "type": "builtin.mystuff.end_date",
    "entity": "today",
    "resolution": {
        "resolution_type": "builtin.datetime.date",
        "date": "2015-10-17"
    }
}
find what doc i was working on before thursday the 31st
{
    "type": "builtin.mystuff.end_date",
    "entity": "before thursday the 31st",
    "resolution": {
        "resolution_type": "builtin.datetime.date",
        "date": "2015-08-31",
        "mod": "Before"
    }
}
builtin.mystuff.end_time
find files i saved before noon
{
    "type": "builtin.mystuff.end_time",
    "entity": "before noon",
    "resolution": {
        "resolution_type": "builtin.datetime.time",
        "time": "2015-10-16T12:00:00"
    }
}
find what doc i was working on before 4pm
{
    "type": "builtin.mystuff.end_time",
    "entity": "before 4pm",
    "resolution": {
        "resolution_type": "builtin.datetime.time",
        "mod": "Before",
        "time": "2015-10-16T16"
    }
}
builtin.mystuff.file_action
open the spreadsheet i saved yesterday
{
    "type": "builtin.mystuff.file_action",
    "entity": "saved"
}
find the spreadsheet kevin created
{
    "type": "builtin.mystuff.file_action",
    "entity": "created"
}
builtin.mystuff.from_contact_name
find the proposal jason sent me
{
    "type": "builtin.mystuff.from_contact_name",
    "entity": "jason"
}
open isaac 's last email
{
    "type": "builtin.mystuff.from_contact_name",
    "entity": "isaac"
}
builtin.mystuff.keyword
show me the french conjugation files
{
    "type": "builtin.mystuff.keyword",
    "entity": "french conjugation"
}
find the marketing plan i drafted yesterday
{
    "type": "builtin.mystuff.keyword",
    "entity": "marketing plan"
}
builtin.mystuff.location
the document i edited at work
{
    "type": "builtin.mystuff.location",
    "entity": "work",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "work"
    }
}
photos i took in paris
{
    "type": "builtin.mystuff.location",
    "entity": "paris"
}
builtin.mystuff.message_category
look for my new emails
{
    "type": "builtin.mystuff.message_category",
    "entity": "new"
}
search for my high priority email
{
    "type": "builtin.mystuff.message_category",
    "entity": "high priority"
}
builtin.mystuff.message_type
check my email
{
    "type": "builtin.mystuff.message_type",
    "entity": "email",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "email"
    }
}
show me my text messages
{
    "type": "builtin.mystuff.message_type",
    "entity": "text",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "sms"
    }
}
builtin.mystuff.source_platform
search my hotmail email for email from john
{
    "type": "builtin.mystuff.source_platform",
    "entity": "hotmail"
}
find the document i sent from work
{
    "type": "builtin.mystuff.source_platform",
    "entity": "work"
}
builtin.mystuff.start_date
find notes from january
{
    "type": "builtin.mystuff.start_date",
    "entity": "january",
    "resolution": {
        "resolution_type": "builtin.datetime.date",
        "date": "2015-01"
    }
}
find the email i send rob after january 1st
{
    "type": "builtin.mystuff.start_date",
    "entity": "after january 1st",
    "resolution": {
        "resolution_type": "builtin.datetime.date",
        "date": "2015-01-01",
        "mod": "After"
    }
}
builtin.mystuff.start_time
find that email i sent rob sometime before 2pm but after noon?
{
    "type": "builtin.mystuff.start_time",
    "entity": "after noon",
    "resolution": {
        "resolution_type": "builtin.datetime.time",
        "time": "2015-10-16T12:00:00"
    }
}
find the worksheet kristin sent to me that i edited last night
{
    "type": "builtin.mystuff.start_time",
    "entity": "last night",
    "resolution": {
        "resolution_type": "builtin.datetime.time",
        "time": "2015-10-16TNI"
    }
}
builtin.mystuff.title
c:\dev\mystuff.txt
{
    "type": "builtin.mystuff.title",
    "entity": "c:\dev\mystuff.txt"
}
*.txt
{
    "type": "builtin.mystuff.title",
    "entity": "*.txt"
}
builtin.mystuff.transform_action
download the file john sent me
{
    "type": "builtin.mystuff.transform_action",
    "entity": "download"
}
open my annotation guidelines doc
{
    "type": "builtin.mystuff.transform_action",
    "entity": "open"
}
builtin.note.note_text
create a grocery list including pork chops, applesauce and milk
{
    "type": "builtin.note.note_text",
    "entity": "pork chops, applesauce and milk"
}
make a note to buy milk
{
    "type": "builtin.note.note_text",
    "entity": "buy milk"
}
builtin.note.title
make a note called grocery list
{
    "type": "builtin.note.title",
    "entity": "grocery list"
}
make a note called people to call
{
    "type": "builtin.note.title",
    "entity": "people to call"
}
builtin.ondevice.music_artist_name
play everything by rufus wainwright
{
    "type": "builtin.ondevice.music_artist_name",
    "entity": "rufus wainwright"
}
play garth brooks music
{
    "type": "builtin.ondevice.music_artist_name",
    "entity": "garth brooks"
}
builtin.ondevice.music_genre
show classic rock songs
{
    "type": "builtin.ondevice.music_genre",
    "entity": "classic rock"
}
play my classical music from the baroque period
{
    "type": "builtin.ondevice.music_genre",
    "entity": "classical"
}
builtin.ondevice.music_playlist
shuffle all britney spears from workout playlist
{
    "type": "builtin.ondevice.music_playlist",
    "entity": "workout"
}
play breakup playlist
{
    "type": "builtin.ondevice.music_playlist",
    "entity": "breakup"
}
builtin.ondevice.music_song_name
play summertime
{
    "type": "builtin.ondevice.music_song_name",
    "entity": "summertime"
}
play me and bobby mcgee
{
    "type": "builtin.ondevice.music_song_name",
    "entity": "me and bobby mcgee"
}
builtin.ondevice.setting_type
quiet hours
{
    "type": "builtin.ondevice.setting_type",
    "entity": "quiet hours",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "Do not disturb"
    }
}
airplane mode
{
    "type": "builtin.ondevice.setting_type",
    "entity": "airplane mode",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "Airplane mode"
    }
}
builtin.places.absolute_location
take me to the intersection of 5th and pike
{
    "type": "builtin.places.absolute_location",
    "entity": "5th and pike"
}
no , i want directions to 1 microsoft way redmond wa 98052
{
    "type": "builtin.places.absolute_location",
    "entity": "1 microsoft way redmond wa 98052"
}
builtin.places.atmosphere
look for interesting places to go out
{
    "type": "builtin.places.atmosphere",
    "entity": "interesting"
}
where can i find a casual restaurant
{
    "type": "builtin.places.atmosphere",
    "entity": "casual"
}
builtin.places.audio_device_type
call the post office on hands free
{
    "type": "builtin.places.audio_device_type",
    "entity": "hands free"
}
call papa john's with speakerphone
{
    "type": "builtin.places.audio_device_type",
    "entity": "speakerphone"
}
builtin.places.avoid_route
avoid the toll road
{
    "type": "builtin.places.avoid_route",
    "entity": "toll road"
}
get me to san francisco avoiding the construction on 101
{
    "type": "builtin.places.avoid_route",
    "entity": "construction on 101"
}
builtin.places.cuisine
halal deli near mountain view
{
    "type": "builtin.places.cuisine",
    "entity": "halal"
}
kosher fine dining on the peninsula
{
    "type": "builtin.places.cuisine",
    "entity": "kosher"
}
builtin.places.date
make a reservation for next friday the 12th
{
    "type": "builtin.places.date",
    "entity": "next friday the 12th",
    "resolution": {
        "resolution_type": "builtin.datetime.date",
        "date": "2015-10-23"
    }
}
is mashiko open on mondays ?
{
    "type": "builtin.places.date",
    "entity": "mondays",
    "resolution": {
        "resolution_type": "builtin.datetime.set",
        "set": "XXXX-WXX-1"
    }
}
builtin.places.discount_type
find a coupon for macy's
{
    "type": "builtin.places.discount_type",
    "entity": "coupon"
}
find me a coupon
{
    "type": "builtin.places.discount_type",
    "entity": "coupon"
}
builtin.places.distance
is there a good diner within 5 miles of here
{
    "type": "builtin.places.distance",
    "entity": "within 5 miles"
}
find ones within 15 miles
{
    "type": "builtin.places.distance",
    "entity": "within 15 miles"
}
builtin.places.from_absolute_location
directions from 45 elm street to home
{
    "type": "builtin.places.from_absolute_location",
    "entity": "45 elm street"
}
get me directions from san francisco to palo alto
{
    "type": "builtin.places.from_absolute_location",
    "entity": "san francisco"
}
builtin.places.from_place_name
driving from the post office to 56 center street
{
    "type": "builtin.places.from_place_name",
    "entity": "post office"
}
get me directions from home depot to lowes
{
    "type": "builtin.places.from_place_name",
    "entity": "home depot"
}
builtin.places.from_place_type
directions to downtown from work
{
    "type": "builtin.places.from_place_type",
    "entity": "work"
}
get me directions from the drug store to home
{
    "type": "builtin.places.from_place_type",
    "entity": "drug store"
}
builtin.places.meal_type
nearby places for dinner
{
    "type": "builtin.places.meal_type",
    "entity": "dinner",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "restaurants"
    }
}
find a good place for a business lunch
{
    "type": "builtin.places.meal_type",
    "entity": "lunch",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "restaurants"
    }
}
builtin.places.nearby
show me some cool shops near me
{
    "type": "builtin.places.nearby",
    "entity": "near"
}
are there any good lebanese restaurants around here?
{
    "type": "builtin.places.nearby",
    "entity": "around"
}
builtin.places.open_status
when is the mall closed
{
    "type": "builtin.places.open_status",
    "entity": "closed"
}
get me the opening hours of the store
{
    "type": "builtin.places.open_status",
    "entity": "opening"
}
builtin.places.place_name
take me to central park
{
    "type": "builtin.places.place_name",
    "entity": "central park"
}
look up the eiffel tower
{
    "type": "builtin.places.place_name",
    "entity": "eiffel tower"
}
builtin.places.place_type
atms
{
    "type": "builtin.places.place_type",
    "entity": "atms",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "atms"
    }
}
post office
{
    "type": "builtin.places.place_type",
    "entity": "post office",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "postal services"
    }
}
builtin.places.prefer_route
show directions by the shortest route
{
    "type": "builtin.places.prefer_route",
    "entity": "shortest"
}
take the fastest route
{
    "type": "builtin.places.prefer_route",
    "entity": "fastest"
}
builtin.places.price_range
give me places that are moderately affordable
{
    "type": "builtin.places.price_range",
    "entity": "moderately affordable",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "average"
    }
}
i want an expensive one
{
    "type": "builtin.places.price_range",
    "entity": "expensive",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "expensive"
    }
}
builtin.places.product
where can i get fresh fish around here
{
    "type": "builtin.places.product",
    "entity": "fresh fish"
}
where around here sells bare minerals
{
    "type": "builtin.places.product",
    "entity": "bare minerals"
}
builtin.places.public_transportation_route
bus schedule for the m2 bus
{
    "type": "builtin.places.public_transportation_route",
    "entity": "m2"
}
bus route 3x
{
    "type": "builtin.places.public_transportation_route",
    "entity": "3x"
}
builtin.places.rating
show 3 star restaurants
{
    "type": "builtin.places.rating",
    "entity": "3 star"
}
show results that are 3 stars or higher
{
    "type": "builtin.places.rating",
    "entity": "3 stars or higher",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": ">=3"
    }
}
builtin.places.reservation_number
book a table for seven people
{
    "type": "builtin.places.reservation_number",
    "entity": "seven"
}
make a reservation for two at il fornaio
{
    "type": "builtin.places.reservation_number",
    "entity": "two"
}
builtin.places.results_number
show me the 10 coffee shops closest to here
{
    "type": "builtin.places.results_number",
    "entity": "10"
}
show me top 3 aquariums
{
    "type": "builtin.places.results_number",
    "entity": "3",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "3"
    }
}
builtin.places.service_provided
where can i go to whale watch by bus ?
{
    "type": "builtin.places.service_provided",
    "entity": "whale watch"
}
i need a mechanic to fix my brakes
{
    "type": "builtin.places.service_provided",
    "entity": "fix my brakes"
}
builtin.places.time
i want places that are open on saturday at 8 am
{
    "type": "builtin.places.time",
    "entity": "8 am",
    "resolution": {
        "resolution_type": "builtin.datetime.time",
        "time": "XXXX-WXX-6T08"
    }
}
is mashiko open now ?
{
    "type": "builtin.places.time",
    "entity": "now",
    "resolution": {
        "resolution_type": "builtin.datetime.time",
        "time": "PRESENT_REF"
    }
}
builtin.places.transportation_company
train schedules for new jersey transit
{
    "type": "builtin.places.transportation_company",
    "entity": "new jersey transit"
}
can i get there on bart
{
    "type": "builtin.places.transportation_company",
    "entity": "bart"
}
builtin.places.transportation_type
where is a music store i can get to on foot ?
{
    "type": "builtin.places.transportation_type",
    "entity": "on foot",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "walking"
    }
}
give me biking directions to mashiko
{
    "type": "builtin.places.transportation_type",
    "entity": "biking",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "bicycle"
    }
}
builtin.places.travel_time
i want to be able to drive less than 15 minutes
{
    "type": "builtin.places.travel_time",
    "entity": "less than 15 minutes",
    "resolution": {
        "resolution_type": "builtin.datetime.duration",
        "duration": "PT15M"
    }
}
i want somewhere i can get to in under 15 minutes
{
    "type": "builtin.places.travel_time",
    "entity": "under 15 minutes",
    "resolution": {
        "resolution_type": "builtin.datetime.duration",
        "duration": "PT15M"
    }
}
builtin.reminder.absolute_location
remind me to call my dad when i land in chicago
{
    "type": "builtin.reminder.absolute_location",
    "entity": "chicago"
}
when i get back to seattle remind me to get gas
{
    "type": "builtin.reminder.absolute_location",
    "entity": "seattle"
}
builtin.reminder.contact_name
when bob calls, remind me to tell him the joke
{
    "type": "builtin.reminder.contact_name",
    "entity": "bob"
}
create a reminder to mention the school bus when i talk to arthur
{
    "type": "builtin.reminder.contact_name",
    "entity": "arthur"
}
builtin.reminder.leaving_absolute_location
reminder pick up craig when leaving 1200 main
{
    "type": "builtin.reminder.leaving_absolute_location",
    "entity": "1200 main"
}
builtin.reminder.leaving_implicit_location
remind me to get gas when i leave work
{
    "type": "builtin.reminder.leaving_implicit_location",
    "entity": "work",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "work"
    }
}
builtin.reminder.original_start_date
change the reminder about the lawn from saturday to sunday
{
    "type": "builtin.reminder.original_start_date",
    "entity": "saturday"
}
move my reminder about school from monday to tuesday
{
    "type": "builtin.reminder.original_start_date",
    "entity": "monday"
}
builtin.reminder.relationship_name
when my husband calls, remind me to tell him about the pta meeting
{
    "type": "builtin.reminder.relationship_name",
    "entity": "husband",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "husband"
    }
}
remind me again when mom calls
{
    "type": "builtin.reminder.relationship_name",
    "entity": "mom",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "mother"
    }
}
builtin.reminder.reminder_text
can you remind me to bring up my small spot of patchy skin when dr smith'calls
{
    "type": "builtin.reminder.reminder_text",
    "entity": "bring up my small spot of patchy skin"
}
remind me to pick up dry cleaning at 4:40
{
    "type": "builtin.reminder.reminder_text",
    "entity": "pick up dry cleaning"
}
builtin.reminder.start_date
remind me the thursday after next at 8 pm
{
    "type": "builtin.reminder.start_date",
    "entity": "thursday after next"
}
remind me next thursday the 18th at 8 pm
{
    "type": "builtin.reminder.start_date",
    "entity": "next thursday the 18th"
}
builtin.reminder.start_time
create a reminder in 30 minutes
{
    "type": "builtin.reminder.start_time",
    "entity": "in 30 minutes"
}
create a reminder to water the plants this evening at 7
{
    "type": "builtin.reminder.start_time",
    "entity": "this evening at 7"
}
builtin.weather.absolute_location
will it rain in boston
{
    "type": "builtin.weather.absolute_location",
    "entity": "boston"
}
what's the forecast for seattle?
{
    "type": "builtin.weather.absolute_location",
    "entity": "seattle"
}
builtin.weather.date_range
weather in nyc this weekend
{
    "type": "builtin.weather.date_range",
    "entity": "this weekend",
    "resolution": {
        "resolution_type": "builtin.datetime.date",
        "date": "2015-W42-WE"
    }
}
look up the five day forecast in hollywood florida
{
    "type": "builtin.weather.date_range",
    "entity": "five day",
    "resolution": {
        "resolution_type": "builtin.datetime.duration",
        "duration": "P5D"
    }
}
builtin.weather.suitable_for
can i go hiking in shorts this weekend?
{
    "type": "builtin.weather.suitable_for",
    "entity": "hiking"
}
will it be nice enough to walk to the game today?
{
    "type": "builtin.weather.suitable_for",
    "entity": "walk"
}
builtin.weather.temperature_unit
what is the temperature today in kelvin
{
    "type": "builtin.weather.temperature_unit",
    "entity": "kelvin",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "kelvin"
    }
}
show me the temps in celsius
{
    "type": "builtin.weather.temperature_unit",
    "entity": "celsius",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "celsius"
    }
}
builtin.weather.time_range
does it look like it will snow tonight?
{
    "type": "builtin.weather.time_range",
    "entity": "tonight",
    "resolution": {
        "resolution_type": "builtin.datetime.time",
        "time": "2015-10-17TNI"
    }
}
is it windy right now?
{
    "type": "builtin.weather.time_range",
    "entity": "now",
    "resolution": {
        "resolution_type": "builtin.datetime.time",
        "time": "PRESENT_REF"
    }
}
builtin.weather.weather_condition
show precipitation
{
    "type": "builtin.weather.weather_condition",
    "entity": "precipitation",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "rain"
    }
}
how thick is the snow at lake tahoe now?
{
    "type": "builtin.weather.weather_condition",
    "entity": "snow",
    "resolution": {
        "resolution_type": "metadataItems",
        "metadataType": "CanonicalEntity",
        "value": "snow"
    }
}

Programmatic Apis

LUIS offers a set of programmatic apis that can be used by developers to automated their application creation process. These apis allow you to author and publish your app and hit it's endpoint.
Click here for a complete reference.


Online Services Agreement

The LUIS online services agreement is available here.

Need Help?


A valid email is required!
Question field is required!
All fields with (*) are required.