QnA Maker service is used to create a knowledge base to add question-and-answer support to your Azure Bot. When you create your knowledge base, you seed it with questions and answers.
Previous Article : Learn azure bot service using Bot Framework SDK V4
In this tutorial, you will learn the following.
- Create a QnA Maker service and knowledge base.
- Train and Publish knowledge base information.
- Add QnA Maker Knowledge Bas information to your Bot
- Update your bot to query the knowledge base
- Test you bot locally
- Publish your bot to Azure Bot Service
- Test your bot using Web Chat Client
Below are the prerequisites,
- The bot created in the previous article. We will add a question-and-answer feature to the bot.
- QnA Maker portal is used to create, train, and publish the knowledge base to use with the bot.
Step 1 - Create a QnA Maker service and knowledge base
- Sign into to the QnA Maker portal with your Azure credentials.
- Click "Create a knowledge base".
- Click “Create a QnA Services".
- It will navigate to Azure Portal. Once there, fill all the below details to proceed
- Name
- Subscription
- Pricing Tier
- Resource Group
- Search Location
- App Name
- Website Location
- Once it is created, connect your QnA Services with your knowledge base.
- Select Microsoft Azure Directory ID.
- Select Azure Subscription Name.
- Select available Azure QnA Service.
- Name your knowledge base.
- Provide the URL from where the data needs to be extracted.
- Click “Create your KB” to build a knowledge base.
Step 2 - Train and Publish knowledge base information
- Once the knowledge base is created, click “Save and Train” followed by Publish button to publish the knowledge base.
- You can click "Create Bot" using this screen or integrate the QnA Maker Services with an existing solution.
Step 3 - Add QnA Maker Knowledge information to your Bot
To continue with the below steps, kindly visit my previous article and download the source code.
Browse the solution and navigate to the app.settings file.
- {
- "MicrosoftAppId": "",
- "MicrosoftAppPassword": "",
- "ScmType": "None",
- "QnAKnowledgebaseId": "knowledge-base-id",
- "QnAAuthKey": "qna-maker-resource-key",
- "QnAEndpointHostName": "your-hostname"
- }
Field
|
Value
|
QnAKnowledgebaseId
|
The knowledge base ID that the QnA Maker portal generated for you.
|
QnAAuthKey
|
The endpoint key that the QnA Maker portal generated for you.
|
QnAEndpointHostName
|
The host URL that the QnA Maker portal generated. Use the complete URL, starting with https:// and ending with /qnamaker. The full URL string will look like "look like "https://< >.azure.net/qnamaker".
|
Step 4 - Update your bot to query the knowledge base
- Add NuGet Package to your project Microsoft.Bot.Builder.AI.QnA
- Right-click dependencies and select Manage Nuget Package
- Select Browse Option
- Type NuGet package “Microsoft.Bot.Builder.AI.QnA”
- Select the Nuget Package
- Check the version and click install and accept the prompt.
Similarly, add Nuget Package Microsoft.Extensions.Configuration
Navigate to Startup.cs file, add these namespace references.
- using Microsoft.Bot.Builder.AI.QnA;
- using Microsoft.Extensions.Configuration;
And, modify the ConfigureServices method create a QnAMakerEndpoint that connects to the knowledge base defined in the appsettings.json file in Startup.cs.
- services.AddSingleton(new QnAMakerEndpoint
- {
- KnowledgeBaseId = Configuration.GetValue<string>($"QnAKnowledgebaseId"),
- EndpointKey = Configuration.GetValue<string>($"QnAAuthKey"),
- Host = Configuration.GetValue<string>($"QnAEndpointHostName")
- });
In your EchoBot.cs file, add these namespace references.
- using System.Linq;
- using Microsoft.Bot.Builder.AI.QnA;
Add a EchoBotQnA connector and initialize it in the bot's constructor to EchoBot.cs.
- public QnAMaker EchoBotQnA { get; private set; }
- public EchoBot(QnAMakerEndpoint endpoint)
- {
- EchoBotQnA = new QnAMaker(endpoint);
- }
Below the OnMembersAddedAsync( ) method, create the method AccessQnAMaker( ) by adding the following code.
- private async Task AccessQnAMaker(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
- {
- var results = await EchoBotQnA.GetAnswersAsync(turnContext);
- if (results.Any())
- {
- await turnContext.SendActivityAsync(MessageFactory.Text(" results.First().Answer), cancellationToken);
- }
- else
- {
- await turnContext.SendActivityAsync(MessageFactory.Text("Sorry, could not find an answer in the Q and A system."), cancellationToken);
- }
- }
Now, within OnMessageActivityAsync( ), call your new method AccessQnAMaker( ) by adding the following code.
- protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
- {
- // First send the user input to your QnA Maker knowledge base
- await AccessQnAMaker(turnContext, cancellationToken);
- ...
- }
Step 5 - Test your bot locally
- Press F5, Browse the bot emulator and connect with localhost and port number
- At this point, your bot should be able to answer some questions. Run the bot locally and open it in the Emulator.
Step 6 - Publish your bot to Azure Bot Service
- Right-click the solution.
- Select the Publish option.
- Select the publish profile and click Publish to proceed.
Step 7 - Test your bot using Web Chat Client
- Browse the WebApp Bot using Azure Portal
- Select the Test in WebChat under Bot Management
I hope you have enjoyed and learned something new in this article. Thanks for reading and stay tuned for the next article.