Chatbot - QnA Maker를 사용하여 질문에 답변
in CHATBOT on Microsoft Azure, 공부, Qna maker, Azure
QnA Maker는 사용자의 데이터에 대한 대화형 질문 및 답변 레이어를 제공한다.
이 서비스를 사용하면 자연어 처리를 이용해서 해당 질문의 의도를 해석할 필요 없이 봇에서 QnA Maker에 질문을 보내고 답변을 받을 수 있다.
예시 소개
Microsoft 공식 문서에 나와있는 예제는 다음과 같다.
OnMessageActivityAsync는 수신된 각 사용자 입력에 대해 호출된다.
호출되면 샘플 코드의 appsetting.json 파일 내에 저장된 _configuration 정보에 액세스해서 미리 만들어논 QnA Maker KB에 연결할 값을 찾는다.
사용자 입력은 기술 자료(KB)에 보내지며 반환된 최선의 답변이 사용자에게 다시 표시된다
봇을 기술 자료에 연결하는 데 필요한 값 가져오기
- QnA Maker 사이트에서 KB를 선택한다.
- 기술 자료를 연 후 설정을 선택한다.
- 배포 세부 정보에서 Postman HTTP 형식의 코드를 본다.
필요한 것은 다음과 같다.
- POST /knowledgebases/
/generateAnswer - 호스트:
- 권한 부여: EndpointKey
호스트 URL 은 https://
봇이 QnA Maker KB에 연결하려면 기술 자료 ID, 호스트 URL, 엔드포인트 키가 필요하다.
설정 파일 업데이트
방금 필요하다고 언급한 것들을 설정 파일에 추가한다.
appsettings.json
{
"MicrosoftAppId": "",
"MicrosoftAppPassword": "",
"QnAKnowledgebaseId": "",
"QnAEndpointKey": "",
"QnAEndpointHostName": ""
}
QnA Maker 인스턴스 설정
먼저 QnA Maker KB에 액세스하기 위한 개체를 만든다.
그 전에 프로젝트에 Microsoft.Bot.Builder.AI.QnA NuGet 패키지가 설치되어 있는지 확인해야 한다.
QnABot.cs의 OnMessageActivityAsync method에서 QnAMaker 인스턴스를 만든다.
또한 위에서 appsettings.json에 저장한 연결 정보의 이름을 QnABot 클래스에서 끌어올 수도 있다.
Bots/QnABot.cs
var qnaMaker = new QnAMaker(new QnAMakerEndpoint
{
KnowledgeBaseId = _configuration["QnAKnowledgebaseId"],
EndpointKey = _configuration["QnAEndpointKey"],
Host = _configuration["QnAEndpointHostName"]
},
null,
httpClient);
봇에서 QnA Maker 호출
봇에서 QnAMaker의 응답을 요구하는 경우 봇 코드에서 GetAnswersAsync()를 호출하여 현재 컨텍스트에 맞는 응답을 가져온다.
Bots/QnABot.cs
var options = new QnAMakerOptions { Top = 1 };
// The actual call to the QnA Maker service.
var response = await qnaMaker.GetAnswersAsync(turnContext, options);
if (response != null && response.Length > 0)
{
await turnContext.SendActivityAsync(MessageFactory.Text(response[0].Answer), cancellationToken);
}
else
{