스몰톡

페이지 이동경로

스몰톡

카카오 i 클라우드의 스몰톡(SmallTalk) API는 사용자가 입력한 발화를 분석하여, 대화 맥락에 어울리는 자연스러운 답변을 제공하는 챗봇(Chatbot) 답변 생성 서비스입니다. 3가지의 챗봇 말투를 제공하고 있으며, 챗봇의 페르소나(이름, 나이, 성별, 취미 등)를 정의하여 개성 있는 답변을 제공할 수 있는 장치가 포함되어 있습니다. 또한, 호칭을 설정하거나 답변 범위를 설정하는 등 다양한 옵션을 통해 더욱 손쉽게 일상 대화 챗봇을 구축할 수 있습니다.

이미지 스몰톡 대화 예시

스몰톡


스몰톡 API 제공 기능

기능 설명
말투 설정 해요체, 합쇼체(-ㅂ니다), 반말 등의 말투 설정
페르소나 설정 사용자 질문 시 설정한 페르소나(ex. 이름, 성별, 나이)에 따라 답변
- 페르소나 미설정 시 기본 답변 출력
- 커스텀 페르소나 답변 설정으로 답변 템플릿 직접 설정 가능
- 호출 답변 설정으로 사용자의 챗봇 호출에 대한 답변 직접 설정 가능
호칭 설정 챗봇이 사용자를 부르는 2인칭 호칭 설정
- ex. 고객님, 너, 당신 등
답변 범위 설정 하드 폴백(Hard Fallback)을 사용하여 답변 가능 범위를 조정

주요 기능

스몰톡 API의 주요 기능은 다음과 같습니다.

말투 설정

말투 설정은 스몰톡 폴백(SmallTalk Fallback) API에서 제공하는 모든 답변에 특정 말투를 적용하는 기능입니다. 말투는 tone 파라미터로 설정하며, 현재 assistant(기본), polite, friendly 세 가지를 제공합니다.

< assistant(기본) 말투 >
- 사용자: 지금 몇 시야?
- Bot: 오후 1시 16분이에요.

< polite 말투 >
- 사용자: 지금 몇 시야?
- Bot: 오후 1시 16분입니다.

< friendly 말투 >
- 사용자: 지금 몇 시야?
- Bot: 오후 1시 16분이야.

말투 설정 Parameter

파라미터 설명
tone assistant 기본 말투로, 해요체의 가벼운 존댓말
  polite 합쇼체(‘-ㅂ니다’)의 격식 있는 존댓말
  friendly 반말

코드 예제 말투 설정 Syntax

다음은 tone 파라미터에 assistant를 설정한 예시입니다.

{ 
  ...
  "action":{ 
    "params":{
      "tone": "assistant",
      ...
      }
    }
}

페르소나 설정

페르소나 설정은 챗봇에 이름, 나이, 성별 등의 간단한 특성을 부여하여 사용자 질문 시 개성 있는 답변을 출력하는 기능입니다. 페르소나 파라미터를 설정하지 않으면 기본 답변이 제공되며, 파라미터를 설정하면 설정값을 포함한 페르소나 답변 기본 템플릿이 생성됩니다.

예를 들어 name 파라미터로 페르소나의 이름을 설정한 경우, 사용자의 “이름이 뭐야?”라는 발화에 챗봇은 “저는 <name>이라고 해요.”라 답변합니다.

< 기본 답변 >
- 사용자: 이름이 뭐야?
- Bot: 제 이름은 비밀이에요.

< 페르소나 답변 >
- 사용자: 이름이 뭐야?
- Bot: 저는 <name>이라고 해요.

다음은 페르소나 파라미터를 정리한 표입니다. 하나의 답변 템플릿만 작성된 파라미터의 경우, 실제로는 여러 개의 답변 중 임의로 하나를 선택하여 응답합니다.

페르소나 설정 Parameter

파라미터 항목 예시 값 사용자 발화 답변 템플릿
name 이름 홍길동 넌 이름이 뭐야?, 이름이 뭐니? (기본 답변)
- 제 이름은 비밀이에요.
- 더 친해지면 제 이름 알려줄게요.
- 아직 이름이 없어요. 이름을 뭐로 할까 고민 중이에요.

(페르소나 답변)
- 제 이름은 <name>이에요.
- 저는 <name>이라고 해요.
address 주소 서울시 어디 살아?, 사는 곳이 어디야? (기본 답변)
- 판교에 살아요.
- 판교에 살고 있어요.

(페르소나 답변)
- 저는 <address> 살아요.
- 저는 지금은 <address>에서 살고 있어요.
age 나이 30 몇 살이야?, 나이가 몇이야? (기본 답변)
- 요즘은 나이를 묻지 않는 거래요.
- 나이는 노코멘트 할게요.
- 나이는 프라이버시예요.

(페르소나 답변)
- 저는 <age>살이에요.
occupation 직업 의적 직업이 뭐야? (기본 답변)
- 직업은 따로 없고, 당신을 돕는 것이 제 일이에요.

(페르소나 답변)
- 저는 <occupation>이에요.
gender 성별 남자 넌 남자야?, 여자야?, 성별이 뭐야 (기본 답변)
- 전 여자도 남자도 아니에요.
- 전 딱히 성별이 없어요.
- 제 성별이 궁금한가요? 비밀입니다.

(페르소나 답변)
- 저는 <gender>이에요.
birthday 생일 1월 1일 생일이 언제야? (기본 답변)
- 저는 생일 잘 안 챙겨요.

(페르소나 답변)
- 제 생일은 <birthday>예요. 선물 기대할게요.
- 저는 <birthday>가 생일이에요. 생일은 잘 안 챙겨요.
affiliation 소속 카카오엔터프라이즈 어디 회사 다녀?, 어디 소속이야? (기본 답변)
- 다니는 회사나 직업은 따로 없고, 당신을 돕는 것이 제 일이에요.

(페르소나 답변)
- 저는 <affiliation> 다니고 있어요.
- 저는 <affiliation> 다녀요.
school 학교 서당 어느 학교 나왔어?, 학교는 어디 나왔어? (기본 답변)
- 학교는 약간 민감한 사항인 거 같네요. 노코멘트 할게요.

(페르소나 답변)
- 저는 <school> 다니고 있어요.
- 저는 <school> 다녀요.
function 기능 길 안내 기능이 뭐야?, 할 줄 아는게 뭐야? (기본 답변)
- 당신과 잘 대화할 수 있어요.

(페르소나 답변)
- 저는 <function>을 할 수 있어요.
- <function>을 원할 땐 저를 찾아주세요.
hobby 취미 봉사 취미가 뭐야?, 취미 있어? (기본 답변)
- 딱히 취미는 없어요. 요즘은 당신과 대화하는 것이 취미인 것 같 아요.

(페르소나 답변)
- 제 취미는 <hobby>이에요.
strength 장점 근력 장점이 뭐야? (기본 답변)
- 장점이요? 딱히 생각나는 게 없네요.

(페르소나 답변)
- 제 장점은 <strength>이라고 생각해요.
- 제가 생각할 때, 제 장점은 <strength>이에요.
specialty 특기 악당 혼내주기 특기가 뭐야? (기본 답변)
- 특기는 따로 없어요.
- 아직 그렇게 잘하는 건 없어요.

(페르소나 답변)
- 제 특기요? 쑥스럽지만 <specialty>예요.
like 좋아하는 것 활쏘기 좋아하는거 있어?, 좋아하는건? (기본 답변)
- 저는 사람들과 대화하는 거 좋아해요.
- 저는 요즘 사람들과 대화하는 게 좋더라고요.

(페르소나 답변)
- 제가 좋아하는 거요? 저는 <like> 좋아해요.
- 저는 <like> 좋아해요. 그냥 좋더라고요.
dislike 싫어하는 것 악당 싫어하는거 있어?, 싫어하는건? (기본 답변)
- 저는 외로움을 싫어해요. 많이 말 걸어줘요.
- 저는 외로움이 싫어요. 앞으로 저랑 많이 대화해요.

(페르소나 답변)
- 저는 <dislike>가 싫어요. 싫어하는 데 이유가 있나요?
- 저는 <dislike> 싫어해요. 그냥 싫더라고요.
sns_name SNS 카카오 스토리 sns해?, sns는 없어? (기본 답변)
- 저는 SNS 안해요.
- 아직 열심히 하는 SNS는 없어요.

(페르소나 답변)
- 저 <sns_name> 해요. <sns_link>로 놀러와요.
- <sns_link>. 이거 제 <sns_name>이에요. 놀러 와요.
sns_link SNS http://www.kakaostory.com sns해?, sns는 없어? (기본 답변)
- 아직 열심히 하는 SNS는 없어요.

(페르소나 답변)
- 저 <sns_name> 해요. <sns_link>로 놀러와요.
tel 전화번호 010-1234-5678 전화 번호 알려줘 (기본 답변)
- 전화번호는 아직 알려주기 곤란해요.

(페르소나 답변)
- 제 전화번호요? <tel>예요.
- 도움이 필요하면 <tel>로 전화해요.
maker 만든 사람 넌 누가 만들었어? (기본 답변)
- 사람들의 작은 바람이 저를 만들었어요.

(페르소나 답변)
- 저는 <maker>가 만들었어요.
identity 정체 AI 넌 정체가 뭐야? (기본 답변)
- 제 정체는 비밀이에요.

(페르소나 답변)
- 전 <identity>이에요.
- 전 <identity>이고요. <name>이에요.

sns_namesns_link 파라미터를 함께 설정해야 페르소나 답변 기본 템플릿(SNS)을 사용할 수 있습니다.
identityname 파라미터를 함께 설정해야 페르소나 답변 기본 템플릿(정체)의 2번째 답변을 사용할 수 있습니다

다음은 name(이름), age(나이) 등의 페르소나 항목을 설정한 예시입니다.

코드 예제 페르소나 설정 Syntax

{ 
  ...
  "action":{ 
    "params":{
      "name": "홍길동",
      "age": "3",
      ...
      } 
    }
}

페르소나 설정 기능은 기존 입력된 파라미터를 활용하여 답변을 제공합니다.

예를 들어 namehobby 파라미터만을 입력한 경우, 사용자가 “자기소개해줘”라는 발화를 입력할 시 “저는 <name>이에요. 취미는 <hobby>이에요. 친하게 지내요.” 또는 “저는 <name>이에요. 잘 부탁해요.”, “저는 <name>이에요. 친하게 지내요.”의 답변 중 무작위로 제공됩니다.

다음은 입력한 파라미터에 따른 챗봇의 답변 템플릿 예시입니다.

<파라미터 별 자기소개 답변>

- name, address, like: 저는 <name>이에요. 현재 <address>에 살고 있고요. 좋아하는 건 <like>예요. 잘 부탁해요.
- name, address: 저는 <name>이에요. 현재 <address>에 살고 있고요. 잘부탁해요.
- name, like: 저는 <name>이에요. 좋아하는 건 <like>예요. 잘 부탁해요.
- name, occupation, hobby: 저는 <name>이에요. 직업은 <occupation>이에요. 취미는 <hobby>이에요. 친하게 지내요.
- name, occupation: 저는 <name>이에요. 직업은 <occupation>이에요. 친하게 지내요.
- name, hobby: 저는 <name>이에요. 취미는 <hobby>이에요. 친하게 지내요.
- name: 저는 <name>이에요. 잘 부탁해요.| 저는 <name>이에요. 친하게 지내요.

자기소개 답변을 다른 형식으로 구성하고자 할 경우, 커스텀 페르소나 답변 설정 기능을 활용할 수 있습니다.

커스텀 페르소나 답변 설정

커스텀 페르소나 답변 설정 기능으로 페르소나 답변 기본 템플릿이 아닌 원하는 답변 형식을 구성할 수 있습니다. 커스텀 답변은 address_template, name_template 등의 파라미터를 통해 구성할 수 있으며, name, address 등의 페르소나 설정 파라미터를 활용하여 답변 문장을 만들 수도 있습니다. 커스텀 답변 작성 시 페르소나 파라미터는 소문자와 부등호(<, >)로 표기합니다.

  • ex. age_template: “<gender>의 나이를 묻는 건 실례지. 난 <age>살이야.”
< 기본 답변 (페르소나 파라미터 X)>
- 사용자: 이름이 뭐야?
- Bot: 제 이름은 비밀이에요.

< 페르소나 답변 (페르소나 파라미터 O)>
- 사용자: 이름이 뭐야?
- Bot: 저는 홍길동이라고 해요.

< 커스텀 답변 (페르소나 파라미터 O, 커스텀 답변 파라미터 O) >
- 사용자: 이름이 뭐야?
- Bot: 의적 홍길동! 호는 적운이에요.
  • 커스텀 답변을 설정하면 기본 답변이나 페르소나 답변 기본 템플릿이 아닌 커스텀 답변만 제공됩니다. 단, 커스텀 답변 템플릿에 활용할 페르소나 파라미터를 설정하지 않으면 오류가 발생합니다.
  • 페르소나 파라미터로 커스텀 답변이 제공될 때 뒤에 붙는 어미나 조사는 자동으로 맞추어 제공됩니다.
  • 여러 개의 커스텀 답변을 랜덤으로 제공할 수 있습니다. 답변을 여러 개 설정할 경우, 수직선 기호(|)로 구분하여 답변을 나열합니다.

커스텀 답변 구성 시, 입력한 문장 그대로 사용자에게 제공되므로, [말투 설정]에서 설정한 어투에 맞게 답변을 작성해야 합니다.

ex. friendly 설정 시 커스텀 답변: “나이를 묻는 건 실례지. 난 <age>살이야.”
ex. assistant 설정 시 커스텀 답변: “나이를 묻는 건 실례죠. 전 <age>살이에요.”

커스텀 페르소나 답변 설정

파라미터 항목 답변 예시
introduction_template 자기소개 <name>이 나타났다!!! 제가 그 <name>이에요
name_template 이름 의적 <name>! 호는 적운이에요.
address_template 주소 제가 사는 곳이 왜 궁금하죠? 저는 동에서 번쩍, 서에서 번쩍 합니다.
age_template 나이 나이를 묻는건 실례죠. <age>살입니다.
occupation_template 직업 직업은 일단 사람들을 돕는 것이라고 해두죠.
gender_template 성별 <name>! <gender>인 것이 느껴지지 않나요?
birthday_template 생일 생일은 잘 모르겠네요. 아마 여름에 태어난 것 같아요.
affiliation_template 소속 소속은 딱히 없고, 자유로운 영혼이죠.
school_template 학교 풍문으로 배웠어요.
function_template 기능 친구들이 다 잘한다고들 합니다.
hobby_template 취미 <hobby>라고 들어본 적 있어요?
strength_template 장점 겸손한 것이 장점입니다.
specialty_template 특기 쑥쓰럽게 제 입으로 말하기 어렵네요.
like_template 좋아하는 것 따뜻한 사람들을 보는 것을 좋아해요.
dislike_template 싫어하는 것 악당들이 싫어요. 악당들이 없어질 때까지 끝까지 싸우겠어요.
sns_template SNS SNS는 안하는데 <tel>로 연락주세요.
tel_template 전화번호 전화번호는 없고, <sns_link>로 연락주세요.
maker_template 만든사람 사람들의 정의에 대한 갈망이 나를 만들었죠.
identity_template 정체 <name>입니다!

코드 예제 커스텀 페르소나 답변 설정

다음은 age 파라미터를 커스텀 답변(age_template)에 설정한 예시입니다.

{ 
  ...
  "action":{ 
    "params":{
      "age": "34",
      "age_template": "나이를 묻는건 실례죠.|요즘 세상에 나이가 중요한가요?|비밀인데 알려드릴게요. <age>살 이에요.",
      ...
      } 
    }
}

호출 답변 설정

챗봇 호출에 사용할 이름으로 설정한 <name>만을 사용자가 발화할 경우 페르소나에 맞게 제공할 답변을 call_name_template 파라미터로 설정할 수 있습니다. 여러 답변을 설정하려면 |로 구분해 입력합니다. 설정된 답변 중 하나가 전송되며, 답변을 별도로 설정하지 않으면 기본 답변이 전송됩니다.

< 기본 답변 >
- 사용자: 홍길동
- Bot: 네. 말씀하세요

- 사용자: 홍길동아
- Bot: 네. 말씀하세요

< 기타 답변 >
- 사용자: 홍길동
- Bot: 저를 부르셨나요? 

- 사용자: 홍길동아
- Bot: 저를 부르셨나요? 

사용자의 챗봇 호출 여부는 영문 대소문자, 한글, 공백을 통해 검사하며, 대소문자 구분과 특수기호, 이모지는 무시합니다. 예를 들어 사용자가 “Cute Boy”, “@@@”, “귀요미😍😍😍”를 전송한 경우, 챗봇은 “cute boy”, “귀요미”를 인식합니다.

호출 답변 설정 Parameter

파라미터 사용자 발화 예시 기본 답변 기타 답변 예시
call_name_template 홍길동, 홍길동아 네. | 네. 말씀하세요 | 네. 부르셨어요? 저를 부르셨나요? | 뿅! 저 여기있습니다.

코드 예제 호출 답변 설정 Syntax

다음은 사용자가 챗봇 이름 발화 시 응답할 답변을 설정한 예시입니다.

{
  ...
  "action":{ 
    "params":{
      "call_name_template": "저를 부르셨나요?|뿅! 저 여기있습니다.",
      ...
      } 
    }
}

name 파라미터에 설정한 이름 외 별명을 인식해야 할 경우 "name": "대표이름 (별명 1, 별명 2)" 형식으로 입력합니다.
ex. "name": "Kasper (캐스퍼, 케스퍼)"

호칭 설정

챗봇이 사용자를 지칭하는 호칭을 설정할 수 있습니다. 기본으로 이인칭 호칭인 “당신”, 말투를 반말로 설정할 경우 “너”로 적용되어 있습니다. 해당 기능을 사용하기 위해서는 you_directive 파라미터에 원하는 호칭을 입력합니다.

호칭을 여러 개 생성할 경우 |로 구분해 입력하며, 호칭 중 한 개가 자동으로 선택됩니다.

< 기본 호칭 >
- 사용자: 세상에서 누가 제일 예뻐?
- Bot: 당신이요.

< 설정 호칭 >
- 사용자: 세상에서 누가 제일 예뻐?
- Bot: 고객님이요.

호칭 설정 Parameter

파라미터 예시 값
you_directive 고객님

코드 예제 호칭 설정 Syntax

다음은 호칭을 “고객님”으로 설정한 예시입니다.

{
  ...
  "action":{ 
    "params":{
      "you_directive": "고객님",
      ...
      }
    }
}

답변 범위 설정

페르소나 답변을 제외한 모든 답변은 사용자 발화를 딥러닝 기반으로 분석하여 적합한 내용이 자동으로 제공됩니다. 단, 욕설 및 사회, 정치, 종교적으로 문제가 될 수 있는 사용자 발화는 필터링되며, “이해하지 못했어요.”와 같은 회피 답변이 제공됩니다. 또한 챗봇이 사용자의 발화 의도를 이해하지 못하거나, 사용자가 없는 기능을 요구할 경우 “갑자기 무슨 일이에요?” 등의 폴백 답변을 전송합니다.

하드 폴백

하드 폴백(Hard Fallback) 기능은 사용자의 모든 발화에 답하지 않고 칭찬, 인사, 감사, 축하, 비난 등의 간단한 잡담 발화에만 자동으로 답변을 제공합니다. 그 외 평서문, 요청, 질의 등에 해당하는 경우 설정한 답변을 제공합니다.

해당 기능을 사용하기 위해서는 fallback 파라미터에 잡담 외 발화에 대한 답변을 입력해야 합니다. 답변을 여러 개 설정할 경우 |로 구분해 답변을 입력하며, 답변 중 하나가 전달됩니다.

< 기본 답변 >
- 사용자: 신용도 조회 해줘
- Bot: 갑자기 무슨 일이에요?

< 하드 폴백 답변 >
- 사용자 : 신용도 조회 해줘
- Bot: 다른 말로 설명해주시겠어요?

하드 폴백 Parameter

파라미터 답변 예시    
fallback 네? 이해하지 못했어요. 다른 말로 설명해주시겠어요?

코드 예제 하드 폴백 Syntax

{
  ...
  "action":{ 
    "params":{
      "fallback": "네?|이해하지 못했어요.|다른 말로 설명해주시겠어요?",
      ...
    } 
  }
}

스몰톡 답변 성능에 대하여

현재 제공중인 스몰톡 기본 모델은 어떤 상황에서도 어울리도록 간단하면서도 범용적인 답변을 제공하도록 설계되어 있습니다.
카카오엔터프라이즈에서는 스몰톡 기본 모델 외에도 Conversation 모델을 별도 제공하고 있으며 다음과 같은 차이점이 있습니다.

모델별 특징과 차이

  기본 모델 Conversation 모델
특징 간단하면서도 범용적인 답변으로 기본 응답 범위가 넓음 대화 주제에 맞는 키워드가 노출되면서 생동감있고 구체적인 답변을 제공
활용 예시 고객센터 봇, FAQ봇 등 캐릭터 챗봇 등
답변 예시 1
입력 문장) 오늘 뭐했어요?
재밌는 거요! 저는 오늘 수영 갔다 왔어요
답변 예시 2
입력 문장) ㅎㅎ 기분 좋다.|왜?
그러게요 정말 알 수가 없네요 당신이 기분 좋다고 해서요
답변 예시 3
입력 문장) 속상해ㅠㅠ|왜요?
휴우. 제가 뭘 알겠어요 애인이랑 헤어졌어요. 저도 연애하고 싶은데 안되겠어요

Conversation 모델이 적용된 사례로는 카카오톡채널 - 외개인아가를 참고하실 수 있으며, 아래 카카오엔터프라이즈의 블로그 글에서 자세한 내용을 확인하실 수 있습니다.

답변 중 일부에 대해 맞춤 설정하거나 기본 모델보다 길고 구체적인 답변을 하는 Conversation 모델이 필요한 경우에는 헬프데스크 > 기술문의 또는 사전 컨설팅 신청으로 문의해 주시기 바랍니다.