Sangil's blog

https://github.com/ChoiSangIl Admin

챗봇만들기#7 Watson Assistant Context 변수 활용하기 (최종) DEV / CHATBOT

2019-04-29 posted by sang12


챗봇만들기#1~#6 까지는, Intent, Dialog, Entity 그리고 Java연동까지.. Watson Assistant에서 중요하게 다뤄지는 것들을 간략하게 훑어보았는데요. 이번에는 마지막 시간입니다. Context 변수를 활용하여 조금더 Chatbot을 사람답게 만들어 보겠습니다. 또한 챗봇만들기#5에서는 간단하게 Watson Assistant에 연동만 했었는데요. 이번에는 Context 변수를 계속적으로 가져 갈 수 있게끔 약간 수정해 보겠습니다 ^^.

여봇의 기분이 항상 일정하면 재미가 없잖아요. 슬플수도 있고, 화날수도 있고... Random 함수를 사용해서 여봇의 변하는 기분을 표현해 보겠습니다

위와 같이 Context에 randomValue를 추가해줍니다. randomValue = "<? new Random().nextInt(2) + 1 ?>" 


그리고 오른쪽 테스트창에서 Manage Context를 눌러주면 $rendomValue에 값이 들어가는 것을 확인 할 수 있습니다. clear를 누를때마다 값이 바뀌는 것을 확인 할 수 있습니다.


그리고 여봇의 기분을 담당하는 노드를 Multiple Responses로 바꿔주고, 변수값에 따라 기분을 표시해 주도록 합니다. 자, 그럼 여봇이 계속해서 기분이 바뀌는 것을 볼 수 있겠네요~^^. 이 포스팅에서는 간단하게 Context Value에 대해서 알아 봤는데요. 실제로 이 변수를 잘 활용하면 더욱 더 챗봇다운 챗봇을 만들 수 있습니다. 가령 어떤 영화에 대한 질문을 했을때, 일반적으로 "해리포터 재미있어?, 주인공이 누군데?, 평점은 몇이야?" 등과 같이 처음엔 해리포터란 주어가 등장하지만 그 후부터는 주어가 생략 된체 대화를 이어나가는 경우가 많습니다. 이럴경우, Context변수에 해리포터라는 주어를 저장해두고 $변수 + Intent로 Dialog를 만들 경우, 자연스럽게 대화를 이어 나갈 수 있게 되죠. 

자.. 만약 저의 포스팅을 계속 보시면서 따라오시는 분들은... 뭔가 잘못된 것을 느끼 셨을 겁니다. 뭐가 잘못됐을까요? 챗봇만들기#5에서 Watson Assistant에서 간단하게 Java를 연동하는 것을 포스팅 했는데요. 이부분에서는 단순하게 api를 콜해서 입력값에 따른 Watson의 응답값을 받는 작업을 했습니다. 그런데 해당 방법으로 위와 같이 환영인사를 받고 기분을 물어본다면, 개발자님 무엇인가 잘 못된거같아요를 외치는 여봇을 볼 수 있을겁니다.

이유는 Context변수를 계속해서 가져가게끔 변경을 해야 되는데요. 간단하게 코드로 만들어 보겠습니다(변수명이나..그냥 대충..^^; 참고만..하세요 ㅎㅎ ). 왓슨과 연동하는 부분은 챗봇만들기#5를 참고해주세요 ^^

1. input="" output="환영인사"
2. input="기분어때?" output="여봇기분"

Java Code(연동하는 부분 제외, 코드 일부)

	InputData input = new InputData.Builder("").build();
	MessageOptions options = new MessageOptions.Builder(workspaceId)
	 .input(input)
         .build();
	MessageResponse response = service.message(options).execute();
	System.out.println("response:::" + response);
		
	InputData input2 = new InputData.Builder("기분어때?").build();
	Context context = response.getContext();
	MessageOptions options2 = new MessageOptions.Builder(workspaceId)
	 .context(context)
         .input(input2)
         .build();
	MessageResponse response2 = service.message(options2).execute();
	System.out.println("response:::" + response2);

위 소스코드를 보시면 처음엔 환영인사를 받기위해 input값을 ""으로 했고, 두번째는 기분을 물어보기위해 input값을 "기분어때?"라고 전송했습니다. 이때, 첫번째 응답값에서 받아온 Context를 추가로 날려주는걸 볼 수 있는데요. 이 Context에 저희가 설정했던 랜덤변수가 들어가 있고, 이를 두번째 보낼 때 추가해서 기분어때라는 대화를 보내야, Watson에서 해당 변수를 인식해서 응답 할 수 있게 됩니다. 결국 대화를 계속해서 이어나갈려면 저 Context변수를 계속 가져가게끔 해줘야 겠죠. 

그리고 Watson에서 말고 Java단에서 Context변수를 상황에 따라 추가하고 수정해줌으로 써, 좀더 멋진 챗봇을 만들어 볼 수도 있겠죠.

여기까지 Watson Assistant를 이용해서 간단하게 여자친구 챗봇을 만들어 봤습니다.  기본적인 것들을 설명하려고 노력했는데 도움이 되실지는 모르겠네요. 

꼭.... 챗봇말고 현실에서 여자친구를 만드시길......^^;;; 개발자분들 화이팅!


#Watson Assistant Context 변수 #챗봇만들기 #챗봇개발 #여자친구챗봇