๐งฉ ๋ฐฐ๊ฒฝ
FastAPI๋ก LLM ๊ธฐ๋ฐ ์๋ต์ ์์ฑํ๋ ์ค์๊ฐ WebSocket ์คํธ๋ฆฌ๋ฐ ์๋น์ค๋ฅผ ๋ง๋ค๊ณ ์์๋ค(์๋ฅผ โก ๋ผ๊ณ ์นญํ๊ฒ ๋ค!)
์ด ์๋น์ค๋ ๊ตฌ์กฐ์ ์ผ๋ก ์๋ต ๊ณผ์ ์ด ์ฌ๋ฌ ๋จ๊ณ๋ก ๋๋์ด ์๋ค.
1. msg1 : “๋ถ์์ ์์ํฉ๋๋ค.”
2. msg2 : “๋ชจ๋ธ์ ์ค๋น ์ค์ ๋๋ค.”
3. msg3 : ๊ฒฐ๊ณผ ํ์ ์ง์ ์ ์๋ด ๋ฉ์์ง
4. LLM ์๋ต ์คํธ๋ฆฌ๋ฐ
5. ๋ด๋ถ ๋ฐ์ดํฐ ์กฐํฉ ํ, ํ์คํ ๋ฆฌ ์ธ๋ฑ์ค ์ ์ฅ
์ฌ์ฉ์ ๊ฒฝํ์ด ์ค์ํ ์๋น์ค๋ผ
“์์·ํ์ด๋ฐ·์ ์ก ํ์ด๋ฐ”์ด 3๋ฐ์ ํฉ์ด ์์ฃผ ์ค์ํ๋ค.
๊ทธ๋ฐ๋ฐ ํ ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์๋ค.
LLM ์๋ต ์์ฑ์ด ๊ฝค ์ค๋ ๊ฑธ๋ฆฐ๋ค๋ ์ ์ด๋ค
๊ทธ๋์ msg 3 -> LLM ์๋ต ์ฌ์ด๊ฐ ๋๋ฌด ๋ฉ์ด์ ์ฌ์ฉ์ ์ ์ฅ์์ ๋ฉ์ถ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค๋ ์๊ฒฌ๋ ๋์๋ค.
์ด ๋น ๊ตฌ๊ฐ์ ๋ณด์ํ๊ธฐ ์ํด
msg3๋ฅผ 2์ด ๋ค์ ๋ฟ๋ฆฌ์๋ ์๊ฒฌ์ด ๋์๊ณ ์ฝ๋์ ์ ์ฉํด๋ณด๋ ค๊ณ ํ๋ค.
๋งํ๊ธฐ ์ข ๋ฏผ๋งํ์ง๋ง.. UX ์ฐฉ์๋ฅผ ์ด์ฉํด ๋ต๋ณ์ด ๋ ๋นจ๋ฆฌ ๋์จ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ํ๊ณ ์ํ๋ค..ใ ๐
๐ญ ๊ณ ๋ฏผ์ ๋ด์ฉ

๋ด ์๋๋ ์์ฃผ ๊ฐ๋จํ๋ค.
msg1 (์ฆ์ ํ์)
↓
msg2 (์ฆ์ ํ์)
↓
msg3 (์๋๋ ๋ฐ๋ก ๋ ์ผ ํ์ง๋ง LLM ์๋ต ์ฒ๋ฆฌ๊ฐ ๋๋ฌด ์ค๋ ๊ฑธ๋ ค์ msg2๋ฅผ ๋ ์ค๋ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด → 2์ด ๋ค์ ํ์)
↓
LLM ์ค์ ์๋ต ์คํธ๋ฆฌ๋ฐ ์์ (๋๋ ์ด ์์ด ์ฆ์!)
์ฆ,
1. ๋ฉ์์ง ํ์ ์์๋ ์ ์ง
2. msg3์ 2์ด ๋ค์ ๋ฟ๋ฆผ(msg2๋ 2์ด ๋ ๋ณด์ฌ์ฃผ๋ ๊ผด)
3. ์ด๊ฑฐ๋ ๋ณ๊ฒ๋ก ์คํธ๋ฆฌ๋ฐ์ ์งํ๋์ด์ผ ํจ
์ด 3๊ฐ์ง๋ฅผ ์ถฉ์กฑํ๋ ์ฝ๋๊ฐ ํ์ํ๋ค.
๊ทธ๋ฐ๋ฐ ๋ฌธ์ ๋... msg3์ด ๋ชจ๋ ์ฐ์ฐ์ด ๋๋ ๋ค์ ๋ฑ์ฅํ๋ค๋ ๊ฒ์ด์๋ค.
๋ด๊ฐ ๋ง๋ delay_send๊ฐ ์คํ๊น์ง ๊ฐ๋๋ฐ ์ฐ์ฐ์ด ๋ค ๋๋ ๋ค์ ์ ์ก๋๋ค.
๊ทธ๋ฌ๋๊น
msg1 -> msg2 -> LLM ์๋ต -> msg3
์ ๊ฐ์ ๋ง๋ ์ ๋๋ ๋ก์ง์ ๋ง๋ ๊ฑฐ๋คใ ใ
UX ๊ฐ์ ์์ปค๋ ๋ ์ด์ํด์ง๊ณ ๋ง์๋ค
๐ ๏ธ ํด๊ฒฐ์ ์ํ ์๋๋ค
๊ฝค ๋ง์ ์๋๋ฅผ ํ๋ค
- asyncio.create_task, loop.create_task ๋ค ์จ๋ด
- await asyncio.sleep(0)๋ก ๋ฃจํ ์๋ณด ์๋
- await asyncio.to_thread๋ก ๋ถ๋ฆฌ ์๋
- WebSocketTap ๋ด๋ถ await ์ ๊ฑฐ
- ๋ด๋ถ ํ๋ฌ์ ์กฐ์ฌ
๋ณ๋ณ ๊ฑธ ๋คํด๋ณธ ๊ฒฐ๋ก ์ ์ด๊ฑฐ์๋ค
Websocket ๋ฉ์์ง ์ ์ก send_json() ์
๊ฐ์ event loop ์์ ์์ผ๋ฉด ๋ด ๋ง๋๋ก ํ ์๊ฐ ์๋ค
์ด๋ฒคํธ ๋ฃจํ๊ฐ ๋ค๋ฅธ ์์ ๋๋ฌธ์ ๋ฐ์๋ฉด delay๊ฐ ๋๋๋ send_json์ ๋ฟ๋ฆด ๊ธฐํ๋ฅผ ์ป์ ์๊ฐ ์๋ ๊ฒ์ด๋ค.
ํด๊ฒฐ์ฑ
๋ต์ ์์ธ๋ก ๊ฐ๋จํ ๊ฒ์ด์๋ค
delay_send๋ฅผ ์ด๋ฒคํธ ๋ฃจํ์์ ๋ถ๋ฆฌ์ํค๋ฉด ๋๋ค!
์ฆ
1. delay๋ ์ค๋ ๋์์ ์ฒ๋ฆฌ
2. delay ๋๋๋ฉด ์ค๋ ๋ ์์์ asyncio.run()์ผ๋ก ์ง์ ์๊ธฐ
์ด๋ ๊ฒ ํ๋ฉด send_json์ ๋ฉ์ธ ๋ฃจํ๊ฐ ๋ญํ๊ณ ์๋ ์๊ด์์ด 'delay ํ ๋ค์ msg3 ์ ์ก'์ ์คํํ ์ ์๋ค.
๋ฉ์ธ ๋ฃจํ
- ์ฌ๋ฌ ์ฐ์ฐ๋ค..
- LLM ์ฐ์ฐ ๋ฉ์๋()
๋ณ๋ ์ค๋ ๋
- sleep(2)
- asyncio.run(ws.send_json(msg3))
๐ ๋ณํ
๋ด๊ฐ ์ํ๋ ํ๋ฆ์ด ๋ง๋ค์ด์ก๋ค!
์ด์ ๋ฉ์์ง๊ฐ ์ ํํ 2์ด ๋ค ๋จ๊ณ ๊ทธ ์ฌ์ด์ ์ฐ์ฐ์ ์์ฐ์ค๋ฝ๊ฒ ๋ณํ๋๋ค.
์ค์ LLM ์ฐ์ฐ ์๊ฐ์ ์ฌ์ ํ 7์ด๋์ง๋ง
UX์ ์ผ๋ก๋ 5์ด์ฒ๋ผ ๋๊ปด์ง๊ฒ ํ๋ค ๐๐
๐ ํ๊ณ & ๋ค์ ๋ชฉํ
์ด๋ฒ ๋ฌธ์ ๋ฅผ ๊ฒช์ผ๋ฉฐ ํฌ๊ฒ ๋ฐฐ์ ๋ค:
๋น๋๊ธฐ ์ฝ๋๋ ๋จ์ํ await๋ฅผ ๋ง์ด ์ฐ๋ ๊ฒ ์๋๋ผ,
“๋ฃจํ๊ฐ ์ธ์ ๋๊ตฌ์๊ฒ ๊ธฐํ๋ฅผ ์ฃผ๋๊ฐ”๋ฅผ ์ดํดํด์ผ ํ๋ค.
๋ค์ ๋ชฉํ๋ asyncio ๋ด๋ถ event loop๋ฅผ ์ง์ ์ปค์คํฐ๋ง์ด์งํด
I/O-heavy ์์
์์๋ ์๋ฒฝํ ํ์ด๋ฐ ์ ์ด๋ฅผ ์๋ํด๋ณด๋ ๊ฒ.
'๐ธ๏ธ Web์ ๋ํด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๐SQL Injection ์ง์ ์ค์ต (0) | 2024.08.11 |
|---|---|
| ์น๊ณผ ์น ํดํน (0) | 2024.08.11 |