Image
Image

GAB-Chatbot1 : Microsoft BotFramework 챗봇(SDK Ver4.x) 개발환경 구축하기

안녕하세요. 
Global Azure BootCamp 2019-Seoul
<Chatbot Development based on Bot Framework ver4.0 and Chatbot Service using Azure Bot Service>
TRACK1 Session2 발표자  강창훈입니다.

금번 발표는  2018년 11월 릴리즈된 Bot Framework SDK Ver4.x를 기반으로 한 챗봇 개발 및 Azure Bot Service를 통한 서비스 방법을 아주 퀵하게 안내해드리고
Microsoft Azure 기반 인공지능 활용서비스인 Azure Cognitive Service중 언어 카테고리 핵심 서비스이자 머신러닝 기반 자연어처리 서비스 "LUIS" 를 활용하는 방법에 대해 안내해드리려합니다.

세부적인 진행 주제는 아래와 같습니다.

1. Bot Framework 소개 및 개발환경구축하기
2. Development & Deploy of Simple Chatbot 
3. Azure Bot Service로 서비스하기
4. Azure Cognitive Service 간략소개
5. Language Understanding Intelligent Service 활용하기

발표 관련 학습 링크 URL
발표자료 다운로드 : https://timetodev.co.kr/download/Azure_Boot_Camp_Korea_2019_Chatbot_강창훈.pptx
https://timetodev.co.kr/blog/123   - 개발환경구축하기
https://timetodev.co.kr/blog/124   - Azure Bot Service로 배포하고 서비스하기
https://timetodev.co.kr/blog/125   - LUIS 활용하기


이번 시간에서는 Microsoft Bot Framework SDK Ver4.x 기반에서 챗봇개발환경구성 및 챗봇 프로젝트 템플릿설치,에뮬레이터  설치 사용방법 등 챗봇개발에 관한 기초적인  방법등을 안내해드립니다.

0.챗봇 개발환경 준비 및 구성하기

Step1.Visual Studio 2017 Community(무료) 설치하기
-다운로드링크: https://www.visualstudio.com/ko/ 링크이동합니다. 
-다운로드 사이트에서 Windows용다운로드 버튼 클릭>Community(5인하 무료) 클릭 다운로드후 설치진행합니다.
-Visual Studio 2017 Community(무료)버전 다운로드하여 설치합니다.



-설치시 반드시 워크로드 부분에서 상기 설치항목들중  웹 및 클라우드 하위 항목중 ASP.NET 및 웹 개발 과 Azure 개발  두가지 항목의 우측에 있는 체크박스를
반드시 체크후 설치를 진행해주세요.
-상기 항목 체크없이 설치하시면 Azure Bot 서비스를 Visual Studio로 개발이 불가합니다.
-물론 추가설치도 가능합니다.


ㅁVisual Studio 설치 후 개발환경 확인 가이드  
-윈도우 작업표시줄  검색> Visual Studio Installer 검색 > 요구 시 Installer 업데이트 실시
-기존에 설치된 Visual Studio Community 2017은 반드시  업데이트 버튼을 클릭해 최신상태로 업데이트 해 줌.
-Visual Studio Community 2017 > 자세히 > 수정 클릭하면 개발환경 재구성 WorkLoad 하면이 표시되며 추가 항목을 선택 설치 가능함   




Step2.ChatBot Project 템플릿 다운로드 및 설치
-애저봇서비스 메인페이지 : https://dev.botframework.com/
-봇빌더를 이용한 봇만들기 소개 : https://docs.microsoft.com/en-us/azure/bot-service/?view=azure-bot-service-4.0

- Bot Builder V4 SDK Template for Visual Studio Downloadhttps://marketplace.visualstudio.com/items?itemName=BotBuilder.botbuilderv4
-애저봇서비스 기반에서 챗봇을 개발할수 있는방법은 크게 Azure Portal 사이트에서 심플하고 자동화된 방식으로 개발하는방법과
Visual Studio 2017 기반에서 제공되는 개발언어별 BotBuilder 환경을 통해 강력하고 편리하게 개발하는 두가지 방법을 제공합니다.

설치방법 : 상기 설치파일을 다운받아 설치하거나 또는 Visual Studio를 가동 후 상단 메뉴> 도구>확장 및 업데이트 클릭> 팝업 좌측 온라인 노드 클릭 >  “Bot Builder V4 SDK Template for Visual Studio” 검색 후 다운로드 받고 Visual Studio를 닫으면 잠시 후  설치가 진행됩니다.





Step3.ChatBot Emulator 설치하기
BotFramework-Emulator-4.2.1-windows-setup.exe 다운로드  후 설치 
-개발자 컴퓨터에서 챗봇을 개발하고 테스트하기 위한 에뮬레이터 프로그램입니다.








1.개발준비가 모두 완료되었으면 Visual Studio 2017를 시작합니다.
-상단메뉴 파일> 새로만들기> 프로젝트 를 클릭합니다.
-개발 템플릿 이 설치된 좌측 노드를 확인합니다. 개발툴 버전에 따라 Visual C#>BotFramework 또는 Visual C#> Cloud>AzureBot Service 를 클릭하면 가운데 챗봇 어플리케이션  개발 시작을
쉽게 도와주는 프로젝트 템플릿 3종 제공됩니다.
-CoreBot(BaseBot) : LUIS 환경 지원 챗봇
-EchoBot : 심플챗봇 개발 
-EmptyBot : 빈프로젝트
ㄴEchoBot 템플릿을 선택합니다.

-챗봇 프로젝트명 입력:  ex) LangCon2019EddyEchoBot
-경로 : C:\
-솔루션 명: LangCon2019EddyEchoBotSolution

여러분 상황에 맞게 프로젝트 명/솔루션 폴더 생성경로,솔루션명을 입력후  확인버튼을 클릭합니다.





2.화면 우측 솔루션 탐색기에 여러분이 만드신 솔루션명이 보입니다.





3. 프로젝트 기본 환경 정보확인 
-챗봇 프로젝트에 오른쪽마우스 클릭 > 프로젝트 속성 ASP.NET CORE 버전확인
ㄴ.NET Core 2.1

-프로젝트 > 종속성> SDK버전 확인,Nuget확인
ㄴMicrosoft.AspNetCore.All 2.1.1 
ㄴMicrosoft.Bot.Builder 4.2.2 


4.프로젝트 디버깅 
-F5 또는 상단메뉴 디버그>디버깅 시작을 클릭하여 챗봇 어플리케이션 디버깅을 실시해봅니다.
-정상적인 경우 아래와같이 웹사이트가 자동으로 브라우저에 표시되는것을 확인할수 있습니다.
*챗봇 어플리케이션(SDK4.x)은 ASP.NET Core WEBAPI 웹 기반 프로젝트로 개발되며 OPEN API기반 RESTful서비스 방식으로 개발 및 서비스 제공됩니다.





5.에뮬레이터를 기동합니다.
-챗봇 프로젝트를 디버깅 모드로 둔 상태에서  설치한 애물레이터를 실행합니다.
-OpenBot 버튼을 클릭하여 여러분이 만드신 챗봇프로젝트의 물리적 경로를 찾습니다.(솔루션 생성시 지정한 솔루션폴더내 챗봇프로젝트폴더 경로 확인)
-챗봇프로젝트의 물리적 경로내에 존재하는 ~.bot파일을 선택합니다
-애물레이터와 현재 디버깅중인 챗봇 웹 어플리케이션과 연동되어 디버깅이 가능해집니다.
-에뮬레이터(채널,클라이언트)와 챗봇과 통신 테스트를 진행해보세요.





7.디버깅 브라우저를 닫고 Visual Studio 2017로 돌아와 상단중간 빨간색네모 단추를 클릭하여 디버깅을 종료합니다.


8. Bot Builder Ver4.x Applicaiton Process
-채널(에뮬레이터) 와 챗봇과의 간단한 통신 프로세스를 아래 그램을 통해 확인해봅니다.



ㅁ Program.cs  --> Startup.cs --><ProjectNameBot>.cs  

ㅁ Program.cs 
- 챗봇 어플리케이션 진입점 

ㅁ Startup.cs
-IoC 의존성 주입기법 기반 각종 서비스 IoC컨테이너에 등록처리

ㅁ <ProjectName>Bot.cs  기본 챗봇 서비스 클래스
-<ProjectName>BotAccessors.cs  :  챗봇 서비스에서 사용할 데이터 구조를 싱글톤으로 접근할수 있게 해주는 연결고리 
-<ProjectName>Bot.cs  : 디폴트 챗봇 서비스 클래스
-CounterState.cs : 채널과 챗봇간 대화주고 받은 횟수 카운팅 관리용 클래스 TurnCount 속성제공 


9.친절한 챗봇 개발하기
- ~Bot.cs 파일을 열고 아래 굵게 표시된 else if  구문을 추가합니다.

        public async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken))
        {
            // Handle Message activity type, which is the main activity type for shown within a conversational interface
            // Message activities may contain text, speech, interactive cards, and binary or unknown attachments.
            // see https://aka.ms/about-bot-activity-message to learn more about the message and other activity types
            if (turnContext.Activity.Type == ActivityTypes.Message)
            {
                // 전달 대화 컨텍스트로부터 대화상태 조회
                var state = await _accessors.CounterState.GetAsync(turnContext, () => new CounterState());

                // Bump the turn count for this conversation.
                state.TurnCount++;

                // Set the property using the accessor.
                await _accessors.CounterState.SetAsync(turnContext, state);

                // Save the new turn count into the conversation state.
                await _accessors.ConversationState.SaveChangesAsync(turnContext);

                // Echo back to the user whatever they typed.
                var responseMessage = $"테스트1 {state.TurnCount}: You sent '{turnContext.Activity.Text}'\n";
                await turnContext.SendActivityAsync(responseMessage);


            }
            else if (turnContext.Activity.Type == ActivityTypes.ConversationUpdate)
            {
                if (turnContext.Activity.MembersAdded != null)
                {
                    foreach (var member in turnContext.Activity.MembersAdded)
                    {
                        if (member.Id != turnContext.Activity.Recipient.Id)
                        {
                            await turnContext.SendActivityAsync("안녕하세요??? \n LangCon2019 챗봇입니다.");
                        }
                    }
                }
            }
            else
            {
                await turnContext.SendActivityAsync($"{turnContext.Activity.Type} event detected");
            }
        }

감사합니다.

Image

댓글목록

Image