Sangil's blog

https://github.com/ChoiSangIl Admin

챗봇만들기#5 Watson Assistant 연동(JAVA) DEV / CHATBOT

2019-03-31 posted by sang12


Watson Assistant에서 다얄로그를 추가하기 지겨우셨죠? 이번에는 실제 Java에서 Watson Api를 호출해서 응답값을 받아 보겠습니다. 일단 API를 호출하는 방법은 Go, Java, Node, Python, Ruby, Swift별로 공식 홈페이지에 잘 정리가 되어 있습니다.(https://console.bluemix.net/apidocs/assistant) 해당 페이지를 참고하여 진행하도록 하겠습니다. 실제로 채팅하는 화면단은 구현할 예정이 아니며, 단순히 저희가 정의한 String을 Watson Api를 이용하여 java단에서 전송하는데까지 진행 할 예정입니다.

Watson Api를 호출하기 위해, Eclipse 프로젝트를 생성해줍니다. 저는 아래와 같이 추가를 했습니다.

그리고 Watson Api를 호출하기위해선 해당 라이브러리(jar)파일을 받아와야하는데, 저는 maven을 이용하여 받아왔습니다. 프로젝트에서 오른쪽 클릭을하고 configure -> Convert to Maven Project를 눌러줍니다.

그러면 maven을 관리 할 수 있는 pom.xml파일이 생성 되는데 그곳에 maven dependency를 추가해줍시다. 그리고 메이븐에 추가한 java-sdk를 받기위해 프로젝트 우클릭 후 Run As에서 Maven install을 눌러줍니다.

<dependencies>
	<dependency>
  		<groupId>com.ibm.watson.developer_cloud</groupId>
		<artifactId>java-sdk</artifactId>
  		<version>6.14.0</version>
	</dependency>
</dependencies>

정상적으로 위 과정이 진행 됬다면, Maven Dependencies폴더 아래에 Watson Api를 호출하기 위한 jar파일 들이 들어온 것을 확인 할 수 있을 겁니다. 그럼 실제로 저희가 만든 여봇에게 말을 걸어 봅시다. 말을 걸기 위해서는 apiKey와 Endpoint, 그리고 workspaceId가 필요한데요.  Ibm Cloud에서 확인 할 수 있습니다. 신임정보 표시를 누르면 Api Key와 Endpoint를 확인 할 수 있습니다. 저기 저 Endpoint는 서비스의 위치에 따라서 주소가 바뀝니다.

-참고(19.03. 31 기준)

Dallas: https://gateway.watsonplatform.net/assistant/api
Washington, DC: https://gateway-wdc.watsonplatform.net/assistant/api
Frankfurt: https://gateway-fra.watsonplatform.net/assistant/api
Sydney: https://gateway-syd.watsonplatform.net/assistant/api
Tokyo: https://gateway-tok.watsonplatform.net/assistant/api
London: https://gateway-lon.watsonplatform.net/assistant/api

그러면 workspace 아이디는 어디서 확인 할 수 있을 까요? Ibm Cloud에서 저희가 만든 여봇에서 1시방향의 View Api Details를 보면 workspace Id를 확인 할 수 있습니다.

자, 그럼 저희는 Watson Api를 호출하기위한 세가지 변수를 얻었습니다. 그럼 호출해봅시다. 저는 인풋 데이터에 이전에 만들었던 다이하드 보러갈래?를 넣어봤습니다. 그리고 Run해주면 Watson이 어떻게 응답값을 줄까요~?

import com.ibm.watson.developer_cloud.assistant.v1.Assistant;
import com.ibm.watson.developer_cloud.assistant.v1.model.InputData;
import com.ibm.watson.developer_cloud.assistant.v1.model.MessageOptions;
import com.ibm.watson.developer_cloud.assistant.v1.model.MessageResponse;
import com.ibm.watson.developer_cloud.service.security.IamOptions;

public class ChatbotTest {
	public static void main(String[] args) {
		IamOptions iamOptions = new IamOptions.Builder().apiKey("{apikey}").build();
		Assistant service = new Assistant("2018-09-20", iamOptions);
		service.setEndPoint("https://gateway.watsonplatform.net/assistant/api");

		String workspaceId = "{workspaceId}";
		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);
	}
}

Watson 응답값

왓슨 응답값을 보면 Json형태로 왔다는 것을 알 수 있고, inputData가 어떻게 들어 왔는지, 그리고 의도의 정확도가 몇프로이며 어떤 의도로 받았는지, OutputData는 어떻게되는지를 알수있습니다. 웹, 카카오, 안드로이드, 개인어플 등 다양한 플랫폼에서 Watson Api를 호출하는 형태로 구현만 해준다면, 리턴값을 Json형태로 받아와서 실제 Chatbot을 구현 할 수 있습니다. (Context 변수를 포함 한 버전은 http://sang12.co.kr/113 참조)

{
  "input": {
    "text": "다이하드 보러갈래?"
  },
  "intents": [
    {
      "confidence": 0.9608183383941651,
      "intent": "데이트_영화"
    }
  ],
  "entities": [
    {
      "confidence": 1.0,
      "location": [
        0.0,
        4.0
      ],
      "value": "다이하드",
      "entity": "영화"
    }
  ],
  "context": {
    "system": {
      "initialized": true,
      "dialog_stack": [
        {
          "dialog_node": "root"
        }
      ],
      "dialog_turn_counter": 1.0,
      "dialog_request_counter": 1.0,
      "_node_output_map": {
        "node_1_1553514883205": {
          "0": [
            0.0,
            1.0,
            0.0
          ]
        }
      },
      "branch_exited": true,
      "branch_exited_reason": "completed"
    },
    "conversation_id": "adb8416f-4812-4529-bcb4-9cd486d7ea6d"
  },
  "output": {
    "log_messages": [],
    "text": [
      "그거 재미있데 보러가자~"
    ],
    "generic": [
      {
        "response_type": "text",
        "text": "그거 재미있데 보러가자~"
      }
    ],
    "nodes_visited": [
      "node_1_1553514883205"
    ]
  }

그럼 여기까지, Watson Api를 연동하는 방법에 관해 알아봤습니다. 해당 방법을 이용하여, 다양한 환경에서 연동하여 사용 할 수 있을 것이라고 생각 됩니다. 그럼 다음시간에는 단순하기만 한  Watson Dialog를 조금 더 고도화 시켜 보도록 하겠습니다.

#Watson Api연동 #Watson Assistant 연동 #Chatbot #Chatbot 만들기 #Chatbot 개발 #Watson Assistant