Dialogflow - 1. Intent
Dialogflow 웹앱 시리즈입니다.
- Dialogflow - 1. Intent
- Dialogflow - 2. Context
- Dialogflow - 3. Fulfillment
- Dialogflow - 4. 외부 사이트 연동
- Dialogflow - 5. Webhook
- Dialogflow - 6. 클라이언트
- Dialogflow - 7. 챗봇 클라이언트
- Dialogflow - 8. Node.js 클라이언트
- Dialogflow - 9. React 클라이언트
구글의 Dialogflow는 머신과 인간의 대화를 가능하게 해주는 플랫폼입니다.
모바일이나 웹, 챗봇 등 다양한 형태로 사용할 수 있고 텍스트 기반뿐만 아니라 음성 기반으로도 가능합니다.
구글 계정만 있으면 사용할 수 있습니다. 사용해 볼까요? 아래 링크를 접속합니다. dialogflow.cloud.google.com/
Agent 생성
최초 접속 시 사용자 동의하고 첫 화면에서 CREATE AGENT
한국어로 할 테니 default language를 바꿔줍니다.
생성을 하면, 아래와 같이 Agent 메인화면이 나옵니다.
화면 구성은 좌측에 메뉴들이 있는데 Intents, Entities, Fulfillment 등에 대해서는 차근차근 배워볼 테니 지금은 넘어갑시다. 화면 중앙에는 설정 옵션들인데 뭐 특별히 건드릴 것은 없습니다. 화면 우측에는 테스트해 볼 수 있는 Try it now 화면이 있어서 텍스트나 음성(마이크)으로 테스트가 가능합니다. Dialogflow를 전혀 모르는 분을 위해 좌측 메뉴들 중 Docs를 열어 빠르게 살펴봅시다.
Create Intents
Docs를 열어 내용을 빠르게 훑어보겠습니다.
CX와 ES 버전 설명이 나오는데, 처음 배우는 단계에서는 중소규모 ES만 써도 충분하니 CX는 일단 잊고 넘어갑시다. Dialogflow ES를 누르면 상세 가이드를 보면 됩니다. 우리는 직접 실행해 보면서 이해해보도록 하겠습니다. 우선 에이전트(Agent)란, 콜센터 상담원과 유사한 개념의 가상 에이전트인데요, Intent, Fulfillment, Integrations 등 대화에 필요한 여러 요소들로 구성됩니다.
인텐트(Intent)
인텐트는 사용자의 의도 분류. 즉, 무슨 말을 했을 때 이게 어떤 의도인지 판단합니다. 예를 들면, "오늘 날씨가 어때?" 하면 weather_intent, "햄버거 주문할게요." 하면 order_intent가 선택됩니다.
일단 인텐트를 만들어 봅시다.
인텐트는 여러 요소로 구성되는데, 첫째, 여러 학습 문구(training phrases)를 훈련시켜서 "오늘 날씨가 어때?", "햄버거 주문할게요."를 분석해서 인텐트를 선택할 수 있도록 합니다. 즉, Dialogflow 개발자(혹은 설계자)가 인텐트를 만들 때, 모호한 학습 문구를 입력하거나 서로 엇비슷한 인텐트들을 만들면 의도와는 다른 인텐트가 불릴 수 있겠죠.
날씨 학습 구문을 입력해 봅시다.
둘째, 액션(Action)과 파라미터(Parameters) 설정합니다. 질문 안에 들어있는 주요 어휘 즉, 개체(entity)를 검출해 내는 과정인데요, 예를 들어 위 문장 중에서 지금, 내일, 오늘 같은 어휘들은 언제(when) 날씨를 원하는 지를 담고 있죠. 그 내용이 아래와 같이 data-time이라는 개체로 표현되는 것이죠. 이 개체와 개체에 저장된 값을 사용해서 날씨를 검색하거나 응답에 사용하는 등 여러 액션을 취할 수 있습니다.
셋째, 응답(Response)에서는 이 인텐트에 대해 사용자에게 응답하는 부분이 담겨집니다. 응답을 작성해 봅시다.
위와 같이 개체를 활용해서 질문한 날의 날씨를 대답할 수 있는데요,
- e.g.1. "오늘 날씨 어때?"로 물어보면 $date-time에 '오늘'이 들어가면서 응답이 "오늘 날씨는 모르겠어요."
- e.g.2. "내일 날씨 어때?"로 물어보면 $date-time에 '내일'이 들어가면서 응답이 "내일 날씨는 모르겠어요."
Text Response에 여러 응답이 있으면 응답이 랜덤하게 선택되는데요, 매번 앵무새처럼 같은 말만 반복하기 보다는 다양한 응답을 할 수 있어야 보다 인간다운 에이전트처럼 느껴지겠죠. 특이한 것은 DEFAULT 옆에 + 버튼을 누르면 Google Assistant Facebook 등 다양한 옵션들이 나오는데요, 이건 Agent 메뉴 중 Integrations와 관련 있습니다.
미리 설명하자면, Integrations는 Facebook이나 Slack 등에서 제공하는 챗봇에 Dialogflow Agent를 연동해주는 기능입니다.
Dialogflow를 플랫폼으로 정의하는데, 이처럼 외부 앱과 연동할 수 있기 때문에 플랫폼이라고 할 수 있는 것이죠. 챗봇을 연결하는 부분은 다음에 다루겠습니다.
넷째, fulfillment는 외부 서버와 연동하거나 프로그래밍으로 처리하는 기능입니다. 이 부분도 마찬가지로 다음에 실습을 통해 이해하도록 하겠습니다.
그 외 Contexts과 Events가 있는데 이는 대화라는 것이 스무고개처럼 질문과 대답의 연속으로 이어지거나 할 때 사용되는 기능입니다. 역시 다음에 실습과 함께 이해해 보겠습니다. 이제 인텐트를 저장하고 검증해 볼게요. Try it now에 '오늘 날씨 어때?'를 입력해 봅시다.
우리가 만든 인텐트가 선택되어 우리의 응답이 나왔네요. DIAGNOSTIC INFO는 프로그래밍 코드로 호출할 때 받는 json 응답을 의미하는데요, 이 정보를 활용해서 다양한 프로그래밍을 할 수 있지요.
{
"responseId": "a2348e75-ef37-489b-af2b-760cd0c84f12-d74139ee",
"queryResult": {
"queryText": "오늘 날씨 어때",
"parameters": {
"date-time": "2021-04-14T12:00:00+09:00"
},
"allRequiredParamsPresent": true,
"fulfillmentText": "2021-04-14 날씨는 모르겠어요. Fulfillment를 이용해야 하는데 아직 안 배웠거든요.",
"fulfillmentMessages": [
{
"text": {
"text": [
"2021-04-14 날씨는 모르겠어요. Fulfillment를 이용해야 하는데 아직 안 배웠거든요."
]
}
}
],
"intent": {
"name": "projects/newagent-tdyh/agent/intents/5166dbb2-58dd-4432-ada4-fb18ca1064d1",
"displayName": "weather"
},
"intentDetectionConfidence": 1,
"languageCode": "ko",
"sentimentAnalysisResult": {
"queryTextSentiment": {
"score": 0.1,
"magnitude": 0.1
}
}
}
}
다음 편에서는 Context와 Event, Fulfillment 등에 대해서 살펴보겠습니다.