Neura a QA bot for Neural Inverse website support for the Question regarding Neural Inverse ,With the bot's source code, anyone can create their own bot QA similar to Neura in Neuralinverse.live
Bot Framework v4 Custom question answering bot sample. This sample demonstrates usage of advanced features of Custom question answering like Precise answering, support for unstructured sources along with Multi-turn conversations and Active Learning in a bot.
This bot has been created using Bot Framework, it shows how to create a bot that uses the Custom question answering feature in Language Service.
The Custom question answering feature in Language Service enables you to build, train and publish a simple question and answer bot based on FAQ URLs, structured and unstructured documents or editorial content in minutes. In this sample, we demonstrate:
- How to use the Active Learning to generate suggestions for knowledge base.
- How to use follow up prompts to create multiple turns of a conversation.
- How to configure display of precise answers.
- How to enable/disable querying unstructured sources with the bot.
- This project requires a Language resource with Custom question answering enabled.
- Follow instructions here to create a Custom question answering project. You will need this project's name to be used as ProjectNamein appsettings.json.
- Visit Language Studio and open created project.
- Go to Edit knowledge base-> Click on...-> Click onImport questions and answers-> Click onImport as TSV.
- Import SampleForCQA.tsv file.
- You can test your knowledge base by clicking on Testoption.
- Go to Deploy knowledge baseand click onDeploy.
Follow these steps to update appsettings.json.
- In the Azure Portal, go to your resource.
- Go to Keys and Endpointunder Resource Management.
- Copy one of the keys as value of LanguageEndpointKeyand Endpoint as value ofLanguageEndpointHostNamein appsettings.json.
- ProjectNameis the name of the project created in Language Studio.
- 
Install the Bot Framework Emulator version 4.14.0 or greater from here 
- 
Run the bot from a terminal or from Visual Studio, choose option A or B. A) From a terminal # run the bot dotnet runB) Or from Visual Studio - Launch Visual Studio
- File -> Open -> Project/Solution
- Select QnABotWithMSI.csprojfile
- Press F5to run the project
 
- 
Connect to the bot using Bot Framework Emulator - Launch Bot Framework Emulator
- File -> Open Bot
- Enter a Bot URL of http://localhost:3978/api/messages
 
- Try the following utterances:
- Surface Book
- Power
 
- In Language Studio, click on inspect to see the closeness in the scores of the returned answers.
- In Bot Framework Emulator, a card is generated with the suggestions.
- Clicking an option would send a feedback record which would show as suggestion under Review suggestionsin Language Studio.
- ActiveLearningCardTitle,- ActiveLearningCardNoMatchTextand- ActiveLearningCardNoMatchResponsein the card could be changed from QnAMakerBaseDialog.cs.
 
- Clicking an option would send a feedback record which would show as suggestion under 
- Try the following utterances:
- Accessibility
- Options
 
- You will notice that multi-turn prompts associated with the question are also returned in the responses.
- Try the following utterances:
- Accessibility
- Register
 
- You will notice a short answer returned along with a long answer.
- If testing in Language Studio, you might have to check Include short answer responseat the top.
- You can disable precise answering by setting EnablePreciseAnswerto false in appsettings.json.
- You can set DisplayPreciseAnswerOnlyto true in appsettings.json to display just precise answers in the response.
- Learn more about precise answering.
- Go to your project in Language Studio -> In Manage sourcesclick on+ Add source
- Click on URLsand addhttps://www.microsoft.com/en-us/microsoft-365/blog/2022/01/27/from-empowering-frontline-workers-to-accessibility-improvements-heres-whats-new-in-microsoft-365/and select unstructured in theClassify file structuredropdown.
- Try the following utterances:
- Frontline workers
- Hybrid work solutions
 
- You can observe that, answers are returned with high score.
- You can set _includeUnstructuredSourcesto false in QnAMakerBaseDialog.cs to prevent querying unstructured sources.
- Go to your project in Language Studio -> In Edit knowledge bases-> Under Metadata column click on+ Add
- Select a QnA to edit and add a key value pair, say Language:CSharp, and click onSave changes.
- Click on Testand select metadata that you just added(Language : CSharp) by clicking on Show advanced options.
- This will return answers with specified metadata only.
- You can filter answers using bot as well by passing metadata and/or source filters. Edit line no. 81 in QnAMakerBaseDialog.cs to something like below. Learn more.
var filters = new Filters { MetadataFilter = new MetadataFilter() { LogicalOperation = Bot.Builder.AI.QnA.JoinOperator.AND.ToString() }, LogicalOperation = Bot.Builder.AI.QnA.JoinOperator.AND.ToString() }; filters.MetadataFilter.Metadata.Add(new KeyValuePair<string, string>("Language", "CSharp")); filters.SourceFilter.Add("SampleForCQA.tsv"); filters.SourceFilter.Add("SampleActiveLearningImport.tsv"); // Initialize Filters with filters in line No. 81 
When a bot (named as HelpBot) is added to a Teams channel or Teams group chat, you will have to refer it as @HelpBot How to build a bot? to get answers from the service.
However, bot tries to send <at>HelpBot</at> How to build a bot? as query to Custom question answering service which may not give expected results for question to bot. The following code removes <at>HelpBot</at> mentions of the bot from the message and sends the remaining text as query to the service.
- Goto Bots/QnABotWithMSI.cs
- Add References
using Microsoft.Bot.Connector; using System.Text.RegularExpressions; 
- Modify OnTurnAsyncfunction as:public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default) { // Teams group chat if (turnContext.Activity.ChannelId.Equals(Channels.Msteams)) { turnContext.Activity.Text = turnContext.Activity.RemoveRecipientMention(); } await base.OnTurnAsync(turnContext, cancellationToken); // Save any state changes that might have occurred during the turn. await ConversationState.SaveChangesAsync(turnContext, false, cancellationToken); await UserState.SaveChangesAsync(turnContext, false, cancellationToken); } 
See Deploy your C# bot to Azure for instructions.
The deployment process assumes you have an account on Microsoft Azure and are able to log into the Microsoft Azure Portal.
If you are new to Microsoft Azure, please refer to Getting started with Azure for guidance on how to get started on Azure.