๋กœ๋ด‡๊ณผ์˜ ๋Œ€ํ™”๋Š” ๋ฌผ๋ก  ์‚ฌ๋žŒ๊ฐ„ ๋Œ€ํ™”์—์„œ๋„ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ ! Context(๋ฌธ๋งฅ) ์ž…๋‹ˆ๋‹ค. ๋Œ€ํ™”ํ•˜๋˜ ๋‚ด์šฉ์„ ๊ธฐ์–ตํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด(?) ๊ทธ ๋Œ€ํ™”๊ฐ€ ์ž์—ฐ์Šค๋Ÿฌ์šธ ์ˆ˜๋„, ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ด๋Œ์–ด๋‚ผ ์ˆ˜๋„ ์—†๊ฒ ์ฃ . Watson Conversation์—์„œ๋Š” Context ๊ด€๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ํ• ๊นŒ์š”? ๊ทธ ๊ธฐ๋ณธ ์ ์ธ ๋‚ด์šฉ์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

1. Watson Conversation์—์„œ Context ๊ด€๋ฆฌํ•˜๊ธฐ

Watson Conversation๊ณผ์˜ ๋Œ€ํ™”๋Š” RESTful API๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง€๋ฉฐ ๋ฐ์ดํ„ฐ ํฌ๋งท์€ json์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” Watson Conversation์ด ์ „๋‹ฌํ•˜๋Š” ๋ฉ”์„ธ์ง€์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

  {
   โ€œcontextโ€: {
     โ€œuserโ€ : {
       โ€œnameโ€ : โ€œJamesโ€
     },
     โ€œdatesโ€: โ€œ$datesโ€,
     โ€œtimesโ€: โ€œ$timesโ€
   },
   โ€œoutputโ€: {
     โ€œtextโ€: {
       โ€œvaluesโ€: [
         โ€œOutput message here
       ],
       โ€œselection_policyโ€: โ€œsequentialโ€
     }
   }
  }

์œ„์˜ Json ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋ณด๋ฉด, ํฌ๊ฒŒ context ๊ฐ์ฒด์™€ output ๊ฐ์ฒด๊ฐ€ ์žˆ๋Š”๋ฐ์š”, ์—ฌ๊ธฐ์„œ context ๊ฐ์ฒด๊ฐ€ ๋ฐ”๋กœ ๋Œ€ํ™”์˜ ๋ฌธ๋งฅ์„ ๊ธฐ์–ตํ•˜๊ธฐ ์œ„ํ•œ ์žฅ์น˜์ž…๋‹ˆ๋‹ค. Watson Conversation์€ ์‚ฌ์šฉ์ž์™€ ์„œ๋น„์Šค ๊ฐ„์˜ ๋Œ€ํ™”์—์„œ ์ด context ๊ฐ์ฒด๋ฅผ ๋Š˜ ๊ฐ€์ง€๊ณ  ๋‹ค๋‹ˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

2. ๋Œ€ํ™”์—์„œ ์›ํ•˜๋Š” ์ •๋ณด ๋ชจ๋‘ ์–ป์–ด๋‚ด๊ธฐ

์˜ˆ๋ฅผ ๋“ค์–ด, ๊ธฐ์ฐจ๋ฅผ ์˜ˆ์•ฝํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋– ํ•œ ์ •๋ณด๋“ค์ด ๊ผญ ํ•„์š”ํ• ๊นŒ์š”?

์ถœ๋ฐœ์ง€, ๋ชฉ์ ์ง€, ๋‚ ์งœ, ์‹œ๊ฐ„, ๊ธฐ์ฐจ ํƒ€์ž… ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์–ป์–ด์•ผ์ง€๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ๊ธฐ์ฐจ๋ฅผ ์˜ˆ์•ฝํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ผ๋ จ์˜ ์ •๋ณด๋ฅผ ๋ชจ๋‘ ์–ป์–ด๋‚ด์„œ โ€˜๊ธฐ์ฐจ ์˜ˆ์•ฝโ€™์ด๋ผ๋Š” ๋ชฉ์ ์„ ๋‹ฌ์„ฑํ•  ๋•Œ๊นŒ์ง€(๋Œ€ํ™”๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€) ์šฐ๋ฆฌ๋Š” Context(๋ฌธ๋งฅ)๋ฅผ ๊ธฐ์–ตํ•˜๊ณ  ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์ฐจ๋ฅผ ์˜ˆ์•ฝํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž๋Š” ์–ด๋– ํ•œ ์งˆ๋ฌธ์„ ํ• ๊นŒ์š”?

๋‹จ์ˆœํžˆ โ€œ๊ธฐ์ฐจ ์˜ˆ์•ฝ ํ•˜๊ณ  ์‹ถ์–ด์š”โ€๋กœ ๋Œ€ํ™”๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ์‚ฌ์šฉ์ž๋ถ€ํ„ฐ โ€œ10์›” 10์ผ ๋ถ€์‚ฐํ–‰ ๊ธฐ์ฐจ ์˜ˆ์•ฝํ•ด์ค˜!โ€ ๋ผ๊ณ  ํ•˜๋Š” ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ „์ž์˜ ๊ฒฝ์šฐ Watson์ด ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋ชจ๋‘ ์–ป์–ด๋‚ด๊ธฐ ์œ„ํ•ด ํ•˜๋‚˜์”ฉ ์งˆ๋ฌธ์„ ํ•ด์•ผํ•˜์ง€๋งŒ, ํ›„์ž์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฏธ 10์›” 10์ผ์ด๋ผ๋Š” ๋‚ ์งœ์™€ ๋ถ€์‚ฐํ–‰์ด๋ผ๋Š” ํ–‰์„ ์ง€๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ์ •๋ณด๋ฅผ ๋จผ์ € Context์— ์ €์žฅํ•˜๊ณ  ๋‚˜๋จธ์ง€ ์ •๋ณด๋ฅผ ์–ป๊ธฐ ์œ„ํ•œ ๋Œ€ํ™”๋ฅผ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ Watson Conversation์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋ ๊นŒ์š”?

์•„๋ž˜์˜ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์ƒ๊ฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ์˜ˆ์‹œ์—์„œ๋Š” ๋Œ€ํ™”์˜ ๋ชฉ์ ์„ ์ด๋ฃจ๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ •๋ณด๊ฐ€ date์™€ time์ž…๋‹ˆ๋‹ค.

conversation sample

์ขŒ์ธก์— ๋ถ€๋ชจ๋…ธ๋“œ๊ฐ€ ์žˆ๊ณ  ์šฐ์ธก์— 3๊ฐœ์˜ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ์ ˆํ•œ Intent(๋Œ€ํ™”์˜ ๋ชฉ์ )๊ฐ€ ๊ฐ์ง€๋˜๋ฉด, ์ขŒ์ธก์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

1) ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋กœ, ์ขŒ์ธก ๋ถ€๋ชจ ๋…ธ๋“œ์˜ Input์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”ํ•œ Entity๋ฅผ ์ œ๊ณตํ–ˆ๋‹ค๋ฉด ์ด๋ฅผ ์ €์žฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ๋…ธ๋“œ์˜ Response์˜ Context์— Entity๋กœ ์ถ”์ถœํ•œ ๋‚ด์šฉ์„ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

{
  "context": {
    "dates": "< ? @sys-date?:$dates ?>",
    "times": "< ? @sys-time?:$times ?>"
  },
  "output": {}
}

2) ๋‘ ๋ฒˆ์งธ ๋‹จ๊ณ„๋กœ, ์šฐ์ธก ์ž์‹ ๋…ธ๋“œ๋ฅผ ์ฐจ๋ก€๋กœ ๋Œ๋ฉด์„œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•ด ๋ƒ…๋‹ˆ๋‹ค. ์ •๋ณด๋ฅผ ์ถ”์ถœํ•œ ๋’ค์—๋Š” Context์— ์ €์žฅํ•˜๊ณ  ๋‹ค์Œ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์ •๋ณด๊ฐ€ ์ถ”์ถœ ๋˜์—ˆ๋‹ค๋ฉด ๋งˆ์ง€๋ง‰ ์ž์‹ ๋…ธ๋“œ์ธ true ๋…ธ๋“œ๊ฐ€ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” ๋งˆ์ง€๋ง‰์— ์ˆ˜ํ–‰๋  ๋…ธ๋“œ์ธ true ๋…ธ๋“œ์˜ Response ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์—๊ฒŒ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋ชจ๋‘ ์ˆ˜์ง‘ํ•˜์˜€์Œ์„ ์•Œ๋ฆฌ๊ณ  ํ•„์š”ํ•œ ์•ก์…˜์„ ์ทจํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด๋ฅผ Context์— ๋‹ด์Šต๋‹ˆ๋‹ค.


{
  "context": {
    "action": {
      "dates": "$dates",
      "times": "$times",
      "command": "check-availability"
    }
  },
  "output": {
    "text": {
      "values": [
        "$user.name, OK I will check the availabilty at $times on $dates"
      ],
      "selection_policy": "sequential"
    }
  }
}

3. ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•œ ์ •๋ณด๋ฅผ ์ œ๋Œ€๋กœ ์ฃผ์ง€ ์•Š๋Š”๋‹ค๋ฉด?

์‚ฌ์šฉ์ž๊ฐ€ ์ฒ˜์Œ ๋ถ€ํ„ฐ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜์˜€๋‹ค๋ฉด ๋ฐ”๋กœ true ๋…ธ๋“œ๋กœ ๋„˜์–ด๊ฐ€์„œ ๋ชฉ์ ์„ ๋‹ฌ์„ฑํ•˜๊ฒ ์ง€๋งŒ, ๋งŽ์€ ๊ฒฝ์šฐ $dates ๋…ธ๋“œ ๋˜๋Š” $times ๋…ธ๋“œ๋ฅผ ๋จผ์ € ์ง„ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ๋‘ ๋…ธ๋“œ ๋ฐ ๊ด€๋ จ๋œ ํ•˜์œ„ ๋…ธ๋“œ๋“ค์€ ํŒจํ„ด์ด ๋˜‘๊ฐ™์œผ๋ฏ€๋กœ $dates ๋…ธ๋“œ๋งŒ ์˜ˆ๋ฅผ ๋“ค์–ด ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

conversation sample 2

์œ„ ๊ทธ๋ฆผ์€ $dates ๋…ธ๋“œ๋ฅผ ํŽผ์นœ ๋ชจ์Šต์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ขŒ์ธก ๋…ธ๋“œ๋ฅผ ๋ณด๋ฉด ์‚ฌ์šฉ์ž์—๊ฒŒ When do you want to have a meeting? ์ด๋ผ๋Š” ์งˆ๋ฌธ์„ ๋˜์ ธ date ๊ฐ’์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์œ ๋„ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด Response์˜ context ๊ฐ’์„ ๋ณด๋ฉด repeat ๊ฐ’์„ 1๋กœ ์ดˆ๊ธฐํ™” ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ repeat ๊ฐ’์€ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ๋‹ต์„ ์ฃผ์ง€ ์•Š์•˜์„ ๋•Œ, ์ปจํ…์ŠคํŠธ๋ฅผ ์œ ์ง€ ํ•˜๋ฉด์„œ ๋‹ค์‹œ ์งˆ๋ฌธํ•˜๋Š” ํšŸ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋‹ต์ด ์˜ค๋ฉด, ๋‹ค์Œ ๋…ธ๋“œ์ธ @sys-date ๋…ธ๋“œ๋กœ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค. ์œ„ ๊ทธ๋ฆผ์—์„œ ๊ฐ€์šด๋ฐ ์œ—์ชฝ์— ์œ„์น˜ํ•œ ๋…ธ๋“œ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ๋‹ต๋ณ€์—์„œ date๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋ฉด, ์ด ํฌ์ŠคํŒ…์˜ 2๋ฒˆ์—์„œ ๋‹ค๋ค˜๋˜ ๋ถ€๋ชจ๋…ธ๋“œ๋กœ ๋Œ์•„๊ฐ€ Context ๊ฐ’์— date ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. date๊ฐ€ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์œผ๋ฉด ๊ฐ€์šด๋ฐ ํ•˜์œ„์— ์œ„์น˜ํ•œ true ๋…ธ๋“œ๋กœ ๋„˜์–ด๊ฐ€๋ฉฐ date๋ฅผ ๋‹ค์‹œ ์งˆ๋ฌธํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ์ ์ ˆํ•œ date ๊ฐ’์„ ์ฃผ์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ฐ€์žฅ ์šฐ์ธก ๋…ธ๋“œ๋“ค์ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ณด๋ฉด 3๊ฐ€์ง€ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋Œ€ํ™”๊ฐ€ ์ด๋ฃจ์–ด ์ง‘๋‹ˆ๋‹ค.

  • @sys-date ๋…ธ๋“œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์‹œ ๋‹ต๋ณ€์„ ์ฃผ์—ˆ์„ ๋•Œ date ๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ์ €์žฅํ•˜๊ณ  ๋‹ค์Œ์œผ๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์œ„ํ•œ ๋…ธ๋“œ์ž…๋‹ˆ๋‹ค.
  • $repeat<3 ๋…ธ๋“œ๋Š” repeat๊ฐ’์„ 1์”ฉ ์ƒ์Šน์‹œํ‚ค๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ์ ์ ˆํ•œ ๋‹ต์„ ์ค„ ๋•Œ๊นŒ์ง€ ๋‹ค์‹œ ์งˆ๋ฌธํ•˜๊ธฐ ์œ„ํ•œ ๋…ธ๋“œ์ž…๋‹ˆ๋‹ค.
  • ๋งˆ์ง€๋ง‰ true ๋…ธ๋“œ๋Š” ์—ฌ๋Ÿฌ๋ฒˆ ์งˆ๋ฌธ์„ ๋ฐ˜๋ณต ํ•˜์˜€์Œ์—๋„ ์›ํ•˜๋Š” ๋‹ต์„ ์–ป์ง€ ๋ชปํ–ˆ์„ ๋•Œ, ๋Œ€ํ™”๋ฅผ ํฌ๊ธฐํ•˜๊ณ  ์ดˆ๊ธฐํ™” ํ•˜๊ธฐ ์œ„ํ•œ ๋…ธ๋“œ์ž…๋‹ˆ๋‹ค.

์ด์ฒ˜๋Ÿผ Context๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์ž˜ ํ™œ์šฉํ•˜๋ฉด, ๋ช‡ ๋ฒˆ ๊นŒ์ง€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์žฌ์งˆ๋ฌธ์„ ํ• ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๊ฑฐ๋‚˜, ์–ด๋–ค ์‹์œผ๋กœ ๋Œ€๋‹ตํ•ด์•ผ Watson Conversation์ด ์•Œ์•„์ฑŒ ์ˆ˜ ์žˆ์„์ง€ ๋“ฑ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌํ•˜๋„๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ๋…ธ๋“œ์˜ ์„ค์ •๊ฐ’์„ ์ž์„ธํžˆ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ๋งํฌ์˜ json ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.