IBM Watson์„ ์ด์šฉํ•œ ํšŒ์˜์‹ค ์˜ˆ์•ฝ ์ฑ—๋ด‡ ์„œ๋น„์Šค์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

 

Conversation ์„œ๋น„์Šค๋Š” ์ด๋ฏธ ๊ฐœ๋ฐœ ์‚ฌ๋ก€ ๊ด€๋ จ ์ž๋ฃŒ๊ฐ€ ์–ด๋Š ์ •๋„ ์ œ๊ณต์ด ๋˜์–ด์žˆ์–ด ๋ธ”๋ฃจ๋ฏน์Šค ๊ฐ€์ž…๊ณผ Conversation ์„œ๋น„์Šค ์‹ ์ฒญ ๊ฐ™์€ ๊ธฐ๋ณธ์ ์ธ ์„ค์ • ๋ฐฉ๋ฒ• ๋ฐ Conversation ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๊ฐœ๋… ๋“ฑ์„ ์›ํ•˜์‹ ๋‹ค๋ฉด ๋ธ”๋ฃจ๋ฏน์Šค์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

https://www.ibm.com/watson/developercloud/conversation/api/v1/?cm_mc_uid=09010138839914986140776&cm_mc_sid_50200000=1500598036

 

1. Conversation Dialog ์„ค์ •ํ•˜๊ธฐ

 

 

Conversation ์„œ๋น„์Šค๋ฅผ ์‹ ์ฒญ ํ›„ Launch tool์„ ํด๋ฆญํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ ํ›„ Workspace๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Create๋ฅผ ํด๋ฆญํ•˜์—ฌ Name์„ ์„ค์ • ํ›„ Language๋ฅผ Korean์œผ๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  • Korean์œผ๋กœ ์„ค์ • ์‹œ Conversation์—์„œ ์ œ๊ณตํ•˜๋Š” System Entity(์˜ˆ: ๋‚ ์งœ, ์ˆซ์ž, ์‹œ๊ฐ„ ๋“ฑ)์˜ ํ•œ๊ตญ์–ด ์ธ์‹์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

2. Intent ๋ฐ Entity ์„ค์ •ํ•˜๊ธฐ

์ƒ์„ฑ๋œ Workspace๋ฅผ ํด๋ฆญํ•˜์—ฌ ์˜ˆ์•ฝ์— ํ•„์š”ํ•œ Intent ๋ฐ Entity๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  • Intent : ์‚ฌ์šฉ์ž๊ฐ€ ๋ฌด์—‡์„ ์›ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋ง์˜ ์˜๋„
    Entity : Intent์™€ ๊ด€๋ จ๋œ ์šฉ์–ด์˜ ๋ชฉ์ ์–ด

 

CSV๋กœ ๋ฏธ๋ฆฌ ์ž‘์„ฑํ•˜์—ฌ Importํ•˜๋ฉด ์ข€ ๋” ๋‹ค์–‘ํ•˜๊ฒŒ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • CSV๋กœ Import ํ•  ์‹œ ํŒŒ์ผ ํ˜•์‹์„ UTF8๋กœ ์„ค์ •ํ•ด์•ผ ํ•œ๊ธ€์ด ๊นจ์ง€์ง€ ์•Š๊ฒŒ ์ž…๋ ฅ์ด ๋ฉ๋‹ˆ๋‹ค.

 

ํšŒ์˜์‹ค ์˜ˆ์•ฝ์— ํ•„์š”ํ•œ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์— ๋Œ€ํ•œ System Entity๋ฅผ on์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” System Entity๋Š” ๋˜๋„๋ก off๋กœ ์‹œ์ผœ๋‘๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

 

3. Dialog ์„ค์ •ํ•˜๊ธฐ

์ฒ˜์Œ ์ƒ์„ฑ ์‹œ ‘ํ™˜์˜์ธ์‚ฌ’์™€ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ‘๊ธฐํƒ€’๋ผ๋Š” node๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์•ฝ์— ํ•„์š”ํ•œ ์ธ์ฆ ๋ฐ ์˜ˆ์•ฝ/์ทจ์†Œ/ํ˜„ํ™ฉ ๊ด€๋ จ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ์ด๋ฆ„์œผ๋กœ node๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • Dialog : ๋Œ€ํ™”์˜ ํ๋ฆ„. Intent์™€ Entity๋ฅผ ์ธ์‹ํ•˜์—ฌ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์–ด๋– ํ•œ ์‘๋‹ต์„ ๋„์ถœํ•˜๊ฒŒ ํ•  ๊ฒƒ์ธ์ง€๋ฅผ ์ •์˜

 

‘ํ™˜์˜์ธ์‚ฌ’ node๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ค ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ• ์ง€์— ๋Œ€ํ•œ ์งˆ์˜ ๋ฌธ๊ตฌ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
๋ฌธ๊ตฌ์˜ ์‘๋‹ต ๋ถ€๋ถ„์€ response์— ์ž…๋ ฅํ•˜๋ฉฐ, ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์„ ํด๋ฆญํ•˜๋ฉด JSON์œผ๋กœ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

JSON ์ž‘์„ฑ์‹œ “context”์™€ “output”์œผ๋กœ ๋‚˜๋‰˜์–ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Output : Watson์˜ ์ถœ๋ ฅ ๊ฐ’์„ ๋‹ด์€ JSON object
    Context : ์‚ฌ์šฉ์ž์™€ Watson ์‚ฌ์ด์˜ ๋Œ€ํ™” ๋ฌธ๋งฅ์„ ๋‹ด์€ JSON object

 

์‚ฌ์šฉ์ž๊ฐ€ ์ฒ˜์Œ์— ์˜ˆ์•ฝ/์ทจ์†Œ/ํ˜„ํ™ฉ ์ค‘ ์–ด๋–ค ์„œ๋น„์Šค๋ฅผ ์„ ํƒํ• ์ง€ ์กฐ๊ฑด์„ ์„ค์ •ํ•˜์—ฌ, context์— ์„œ๋น„์Šค์„ ํƒ์„ ์™„๋ฃŒํ–ˆ๋‹ค๋Š” ์˜๋ฏธ์˜ ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
(์„œ๋น„์Šค ์„ ํƒ ์™„๋ฃŒ : isSelected, ์˜ˆ์•ฝ :  ReservationOk๋ฅผ true๋กœ ์„ค์ •)

์กฐ๊ฑด ์„ค์ • ๋ฐฉ๋ฒ•์€ respond์˜ condition์— Intent๋ฅผ ์ง€์นญํ•˜๋Š” ‘#’์„ prefix๋กœ ์ž…๋ ฅํ•˜์—ฌ, ์‚ฌ์šฉ์ž๊ฐ€ ์˜๋„๊ฐ€ ๋‹ด๊ธด ๋‹จ์–ด ๋˜๋Š” ๋ฌธ์žฅ์„ ์ž…๋ ฅ ์‹œ JSON์œผ๋กœ ์ž‘์„ฑํ•œ ๋‚ด๋ถ€์˜ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

  • Context ๋‚ด๋ถ€์˜ ๋ณ€์ˆ˜ ๋ช…์€ ์ž„์˜๋กœ ์ง€์ •ํ•˜์—ฌ ์„ ์–ธํ•˜์˜€์Šต๋‹ˆ๋‹ค.

now().substring(x, y)๋Š” Conversation์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด์ธ SpEL์˜ ๊ธฐ๋ณธ ํ•จ์ˆ˜๋กœ, ํ˜„์žฌ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ “YYYY-MM-DD hh:mm:ss” ํ˜•์‹์˜ ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ ํ•ฉ๋‹ˆ๋‹ค.

 

์˜ˆ์•ฝ ์ง„ํ–‰์„ ์œ„ํ•ด Chatbot์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์˜ˆ์•ฝ์— ํ•„์š”ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ •๋ณด๋“ค์„ ์ˆ˜์ง‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํšŒ์˜์‹ค ์˜ˆ์•ฝ์— ํ•„์š”ํ•œ ์š”์†Œ๋Š” ๋‚ ์งœ/์žฅ์†Œ/์‹œ๊ฐ„ ๋“ฑ์ด ์žˆ์œผ๋ฉฐ ํ•ด๋‹น ์š”์†Œ๋ฅผ ์ž…๋ ฅ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก node๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ์•ฝ ์ง„ํ–‰ ์‹œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์‘๋‹ต์„ ๋ฐ›์„ ํ•„์š”๊ฐ€ ์—†๋Š” node์˜ ๊ฒฝ์šฐ Jump to๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ node๋กœ ๋ฐ”๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Jump to : ๋‹ค๋ฅธ node์—์„œ ๋Œ€ํ™”๋ฅผ ์ง„ํ–‰ํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉ

 

๋‚ ์งœ ์—ฌ๋ถ€๋ฅผ ์ž…๋ ฅ ๋ฐ›๋Š” node ์ž…๋‹ˆ๋‹ค. If bot recognizes๋ฅผ ํ†ตํ•ด ๋‚ ์งœ ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ ํŒ๋‹จํ•˜์—ฌ ์—†์„ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‚ ์งœ ์š”์†Œ๋ฅผ ์ž…๋ ฅ ๋ฐ›๋„๋ก ์œ ๋„ํ•ฉ๋‹ˆ๋‹ค.

 

์‚ฌ์šฉ์ž๊ฐ€ ๋‚ ์งœ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด System Entity๋ฅผ ํ†ตํ•ด ๋‚ ์งœํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ €์žฅํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์–‘์‹์— ๋งž๊ฒŒ ๋‚ ์งœ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด, ‘๋‚ ์งœ์—ฌ๋ถ€’ node๋กœ Jump toํ•˜์—ฌ ์ €์žฅ์ด ๋˜์—ˆ๋Š”์ง€ ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฒ€์ฆ ํ•ฉ๋‹ˆ๋‹ค.
์ •์ƒ์ ์œผ๋กœ ์ €์žฅ์ด ๋˜์—ˆ๋‹ค๋ฉด ๋‹ค์Œ node์ธ ์žฅ์†Œ์— ๋Œ€ํ•œ ์š”์†Œ๋ฅผ ์ž…๋ ฅ ๋ฐ›๋„๋ก ์œ ๋„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

4. ์˜ˆ์•ฝํ•˜๊ธฐ

์˜ˆ์•ฝ ์š”์†Œ๋ฅผ ๋ชจ๋‘ ์ž…๋ ฅํ–ˆ๋‹ค๋ฉด, ์ด์ œ ์‹ค์ œ ์‹œ์Šคํ…œ์—์„œ ์˜ˆ์•ฝ์„ ์ง„ํ–‰ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋Œ€ํ™” ๋„์ค‘ ์‹œ์Šคํ…œ ์ˆ˜ํ–‰์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ context ๋‚ด๋ถ€์— “Action”์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ž‘์„ฑ์ด ์™„๋ฃŒ๋˜๋ฉด, Watson Conversation API๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž‘์„ฑ ์–ธ์–ด๋Š” Node.js์ด๋ฉฐ, ์˜ˆ์•ฝ์„ ์œ„ํ•œ API ํ˜ธ์ถœ ์ฝ”๋“œ๋Š” https://github.com/hjjo/chatbot-tutorial

๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

doAction() ํ•จ์ˆ˜๋Š” ๋Œ€ํ™” ๋„์ค‘ ์‹œ์Šคํ…œ์ด ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” Action์ด ์žˆ์„ ๊ฒฝ์šฐ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Conversation Dialog ๋‚ด์˜ ์ •์˜ํ•œ action ๊ณผ ๋™์ผํ•˜๊ฒŒ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ €ํฌ๋Š” Return ๊ฐ’์„ ์„ค์ •ํ•˜์—ฌ, ์‹ค์ œ ํ•ด๋‹น ์ˆ˜ํ–‰ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

Conversation ๋‚ด์— ์ €์žฅํ•œ ์š”์†Œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
1-1์˜ ์˜ˆ์•ฝ ์ •๋ณด ์ž…๋ ฅ์„ ๋ณด์‹œ๋ฉด, Action commend์— checkReservationOK๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
doAction() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœ๋œ checkReservationOK๋Š” fncCheckReservationOk()๋ฅผ return ํ•ฉ๋‹ˆ๋‹ค.

(์ƒ๋žต)

(์ƒ๋žต)

fncCheckReservationOk()๋Š” Conversation Dialog์˜ ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๊ฐ’์„ ์‹œ์Šคํ…œ์— HTTP Request๋ฅผ ๋ณด๋‚ด๋ฉฐ, Promise()๋ฅผ ํ†ตํ•ด HTTP response๋ฅผ ๋ฆฌํ„ด ๋ฐ›์Šต๋‹ˆ๋‹ค.

  • Action์„ ํ†ตํ•ด ์‹œ์Šคํ…œ์—์„œ ์ฒ˜๋ฆฌํ•œ ๊ฐ’์„ Dialog์— ์ ์šฉ์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ•œ๋ฒˆ์˜ ์ž…๋ ฅ์„ ๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    (Jump to ์‚ฌ์šฉ์‹œ ์ฆ‰์‹œ ์ ์šฉ์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

 

์˜ˆ์•ฝ์ด ์™„๋ฃŒ ๋˜๋ฉด ์˜ˆ์•ฝ ์„ฑ๊ณต์— ๋Œ€ํ•œ response๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

 

5. ์ฑ„ํŒ… ํ™”๋ฉด

์ง€๊ธˆ๊นŒ์ง€ ์ž‘์„ฑํ•œ ๋‚ด์šฉ์„ ํ† ๋Œ€๋กœ ์˜ˆ์•ฝ์„ ์ง„ํ–‰ํ•˜๋Š” ์ฑ„ํŒ… ํ™”๋ฉด์„ ๋ณด์—ฌ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

6. ์‹œ์—ฐ ๋™์˜์ƒ

 

 

7. ์ฐธ๊ณ  ์ž๋ฃŒ

์™“์Šจ์œผ๋กœ ์‰ฝ๊ฒŒ ๊ฐœ๋ฐœํ•˜๋Š” ์นด์นด์˜คํ†ก ์ฑ—๋ด‡ 1. Watson Conversation ์„œ๋น„์Šค๋กœ ์ธ๊ณต์ง€๋Šฅ ๋Œ€ํ™” ์„œ๋น„์Šค ๋งŒ๋“ค๊ธฐ

https://github.com/hjjo/chatbot-tutorial

https://www.ibm.com/watson/developercloud/conversation/api/v1/?cm_mc_uid=09010138839914986140776&cm_mc_sid_50200000=1500598036

https://console.bluemix.net/docs/services/conversation/expression-language.html#built-in-global-variables

 

์— ๋Œ€ํ•œ ๋Œ“๊ธ€์ด 1๊ฑด ์žˆ์Šต๋‹ˆ๋‹ค"Watson Conversation ์„œ๋น„์Šค๋ฅผ ํ™œ์šฉํ•œ ํšŒ์˜์‹ค ์˜ˆ์•ฝ ํ•œ๊ธ€ ์ฑ—๋ด‡"

  1. […] ์›๋ฌธ๋ณด๊ธฐ :ย Watson Conversation ์„œ๋น„์Šค๋ฅผ ํ™œ์šฉํ•œ ํšŒ์˜์‹ค ์˜ˆ์•ฝ ํ•œ๊ธ€ ์ฑ—๋ด‡ […]

ํ† ๋ก  ์ฐธ๊ฐ€

์ด๋ฉ”์ผ์€ ๊ณต๊ฐœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•„์ˆ˜ ์ž…๋ ฅ์ฐฝ์€ * ๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.