๐ŸŽฏ RASA Socket.IO ์—ฐ๊ฒฐ ๋ฌธ์ œ ํ•ด๊ฒฐ๊ธฐ

์—”์ผ€์ดยท2025๋…„ 2์›” 5์ผ
0
post-thumbnail

๐ŸŽฏ RASA Socket.IO ์—ฐ๊ฒฐ ๋ฌธ์ œ ํ•ด๊ฒฐ๊ธฐ

RASA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ Socket.IO๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ •์—์„œ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ๋ฌธ์ œ์˜ ์ฆ์ƒ, ์›์ธ ๋ถ„์„, ๊ทธ๋ฆฌ๊ณ  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๋‹จ๊ณ„๋ณ„๋กœ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿšฉ ๋ฌธ์ œ ์ƒํ™ฉ

RASA ์„œ๋ฒ„์™€ Python Socket.IO ํด๋ผ์ด์–ธํŠธ๋ฅผ ์—ฐ๊ฒฐํ–ˆ์ง€๋งŒ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ  ๋‚˜์„œ๋„ ๋ด‡์˜ ์‘๋‹ต์„ ๋ฐ›์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

โ— ์ฃผ์š” ์ฆ์ƒ

  • ํด๋ผ์ด์–ธํŠธ๋Š” ์ •์ƒ์ ์œผ๋กœ ์„œ๋ฒ„์— ์—ฐ๊ฒฐ๋จ.
  • session_request ์ด๋ฒคํŠธ๋Š” ์ž˜ ์ „์†ก๋˜๊ณ  session_confirm ์‘๋‹ต๋„ ์ •์ƒ ์ˆ˜์‹ ๋จ.
  • ๊ทธ๋Ÿฌ๋‚˜ user_uttered ์ด๋ฒคํŠธ๋ฅผ ์ „์†กํ•œ ํ›„ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์•„๋ฌด๋Ÿฐ ์‘๋‹ต์ด ์˜ค์ง€ ์•Š์Œ.
  • ์„œ๋ฒ„๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ๋ด‡ ์‘๋‹ต์„ ์ƒ์„ฑํ–ˆ์œผ๋‚˜, ํด๋ผ์ด์–ธํŠธ๋กœ ์ „๋‹ฌ๋˜์ง€ ์•Š์Œ.

๐Ÿ” ์›์ธ ๋ถ„์„

RASA์˜ credentials.yml ํŒŒ์ผ์—์„œ session_persistence: true๋กœ ์„ค์ •ํ•˜๋ฉด, RASA๋Š” Socket.IO์˜ ๋ฃธ(Room) ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ์„ธ์…˜์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

socketio:
  user_message_evt: user_uttered
  bot_message_evt: bot_uttered
  session_persistence: true

๋ฌธ์ œ๋Š” RASA์˜ socketio.py ์ฝ”๋“œ์—์„œ enter_room ๋ฉ”์„œ๋“œ๊ฐ€ ๋น„๋™๊ธฐ์ ์œผ๋กœ ํ˜ธ์ถœ๋˜์–ด ์žˆ์ง€๋งŒ await๊ฐ€ ๋ˆ„๋ฝ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

# ๋ฌธ์ œ ์ฝ”๋“œ
sio.enter_room(sid, data["session_id"])  # await๊ฐ€ ์—†์Œ

๐Ÿ“š ์ถœ์ฒ˜: Rasa Github ์ด์Šˆ

์ด๋กœ ์ธํ•ด ์‹ค์ œ๋กœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•ด๋‹น ๋ฃธ์— ์ฐธ์—ฌํ•˜์ง€ ๋ชปํ•˜๊ณ , ๊ฒฐ๊ตญ ๋ด‡์˜ ์‘๋‹ต์ด ์ „์†ก๋˜์ง€ ์•Š๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ› ๏ธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

โœ… 1. ์ž„์‹œ ํ•ด๊ฒฐ์ฑ…: session_persistence ๋น„ํ™œ์„ฑํ™”

credentials.yml ํŒŒ์ผ์—์„œ session_persistence๋ฅผ false๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

socketio:
  user_message_evt: user_uttered
  bot_message_evt: bot_uttered
  session_persistence: false

ํ•˜์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•์€ ์„ธ์…˜ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ํฌ๊ธฐํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ทผ๋ณธ์ ์ธ ํ•ด๊ฒฐ์ฑ…์€ ์•„๋‹™๋‹ˆ๋‹ค.


โœ… 2. ๊ทผ๋ณธ์  ํ•ด๊ฒฐ์ฑ…: RASA ์ฝ”๋“œ ์ˆ˜์ •

RASA์˜ socketio.py ํŒŒ์ผ์„ ์ฐพ์•„ enter_room ํ˜ธ์ถœ ๋ถ€๋ถ„์— await๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”Ž RASA ์ฝ”๋“œ ์œ„์น˜ ์ฐพ๊ธฐ

pip show rasa

๋˜๋Š”

python -c "import rasa; print(rasa.__file__)"

โœ๏ธ ์ฝ”๋“œ ์ˆ˜์ •

rasa/core/channels/socketio.py ํŒŒ์ผ์„ ์—ด์–ด ์•„๋ž˜์™€ ๊ฐ™์ด ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

# ์ˆ˜์ • ์ „
sio.enter_room(sid, data["session_id"])

# ์ˆ˜์ • ํ›„
await sio.enter_room(sid, data["session_id"])

์ˆ˜์ • ํ›„์—๋Š” RASA ์„œ๋ฒ„๋ฅผ ์žฌ์‹œ์ž‘ํ•ด์•ผ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.

rasa run --enable-api --cors "*" --debug --credentials credentials.yml

๐Ÿ’ก ์ตœ์ข… ํ™•์ธ

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋ด‡์˜ ์‘๋‹ต์„ ์ˆ˜์‹ .
  • ์„ธ์…˜ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ๋„ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘.
  • ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๋ชจ๋‘ ์—๋Ÿฌ ์—†์ด ์•ˆ์ •์ ์œผ๋กœ ์—ฐ๊ฒฐ ์œ ์ง€.

๐Ÿš€ ๋งˆ๋ฌด๋ฆฌ

์ด๋ฒˆ ๊ฒฝํ—˜์„ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์—์„œ ์„ธ์…˜ ๊ด€๋ฆฌ์˜ ์ค‘์š”์„ฑ๊ณผ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์„ธ์„ธํ•œ ๋ถ€๋ถ„์ด ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ์— ์–ผ๋งˆ๋‚˜ ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

ํ˜น์‹œ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฒช๋Š” ๋ถ„๋“ค์ด ์žˆ๋‹ค๋ฉด ์ด ๊ธ€์ด ๋„์›€์ด ๋˜๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๐Ÿ™Œ

profile
FE ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€