WebLLM๊ณผ WASM ๊ธฐ๋ฐ์ Browser-Local RAG ๋ฐํ์ ์ํคํ ์ฒ ๊ตฌํ
๐ I Built a Browser-Local AI Assistant in Next.js with WebLLM, WASM, ONNX Runtime, Web Workers, and RAG
AI ์์ฝ
Context
๊ธฐ์กด AI ์ฑํ ์์ ฏ์ ์๋ฒ ์์กด์ API ํธ์ถ ๊ตฌ์กฐ๋ก ์ธํ Network Round-trip ์ฆ๊ฐ์ ์ถ๋ก ๋น์ฉ ๋ฐ์ ๋ฐ ํ๋ผ์ด๋ฒ์ ์ ์ฝ ํด๊ฒฐ ํ์. ๋ธ๋ผ์ฐ์ ๋ฅผ ๋จ์ํ UI Shell์ด ์๋ ๋ ๋ฆฝ์ ์ธ Inference Runtime์ผ๋ก ์ ํํ์ฌ ์๋ฒ๋ฆฌ์ค ๋ก์ปฌ ์ถ๋ก ํ๊ฒฝ ๊ตฌ์ถ์ ๋ชฉํ๋ก ํจ.
Technical Solution
- WebLLM์ ๋ชจ๋ธ ์์ฒด๊ฐ ์๋ ์คํ ์์ง์ผ๋ก ์ ์ํ์ฌ Llama, Phi ๋ฑ ๋ค์ํ ๋ชจ๋ธ์ ๋์ ์ผ๋ก ๋ก๋ํ๋ ๋ฐํ์ ๊ตฌ์กฐ ์ค๊ณ
- WASM์ ํตํ ์ ์์ค ์คํ ๊ณ์ธต ํ๋ณด๋ก ํ ์ ์ฐ์ฐ ๋ฐ ํ ํฐ ์์ฑ ๋ฑ Compute-heavy ์์ ์ ๋ค์ดํฐ๋ธ ์์ค ์ฑ๋ฅ ๊ตฌํ
- WebLLM(์์ฑ)๊ณผ ONNX Runtime Web(์๋ฒ ๋ฉ ๋ฐ ๋ฆฌ๋ญํน)์ ์ญํ ์ ๋ถ๋ฆฌํ์ฌ ์์ ํน์ฑ์ ์ต์ ํ๋ ์ถ๋ก ๊ฒฝ๋ก ๊ตฌ์ฑ
- Web Workers๋ฅผ ์ค์ผ์คํธ๋ ์ด์ ๊ฒฝ๊ณ๋ก ์ค์ ํ์ฌ ๋ฉ์ธ ์ค๋ ๋ ์ฐจ๋จ์ ๋ฐฉ์งํ๊ณ UI ์๋ต์ฑ์ ์ ์งํ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ ๊ตฌ์กฐ ์ฑํ
- ์๋งจํฑ ๋ฐ ๋ ์์ปฌ ์ ํธ๋ฅผ ๊ฒฐํฉํ Hybrid Scoring๊ณผ Confidence Gating์ ํฌํจํ ๋ก์ปฌ RAG ํ์ดํ๋ผ์ธ ๊ตฌ์ถ
- ๋ธ๋ผ์ฐ์ ์บ์๋ฅผ ํ์ฉํ ๋ชจ๋ธ ์ํฐํฉํธ ์ฌ์ฌ์ฉ ์ค๊ณ๋ฅผ ํตํด First-run ๋น์ฉ ์ดํ์ ์ธ์ ์ง์ ์๋ ์ต์ ํ
์ค์ฒ ํฌ์ธํธ
- WebLLM ๋ฑ ๋ก์ปฌ ๋ฐํ์ ๋์ ์ ๋ชจ๋ธ ์ํฐํฉํธ ๋ค์ด๋ก๋์ ๋ฐ๋ฅธ First-run UX ์ ํ ๋์ฑ ์๋ฆฝ ์ฌ๋ถ ํ์ธ - ์ถ๋ก ๋ก์ง์ ๋ฉ์ธ ์ค๋ ๋ ์ ์ ๋ฐฉ์ง๋ฅผ ์ํ Web Worker ๊ธฐ๋ฐ์ ์ค์ผ์คํธ๋ ์ด์ ๋ ์ด์ด ๋ถ๋ฆฌ ๊ฒํ - Generation๊ณผ Retrieval-side inference์ ์ํฌ๋ก๋ ์ฐจ์ด๋ฅผ ๊ณ ๋ คํ ๋ฐํ์(WebLLM vs ONNX Runtime) ์ด์ํ ์ ์ฉ - ๋ก์ปฌ ํ๊ฒฝ์ ๋ฆฌ์์ค ์ ์ฝ์ ๊ณ ๋ คํ Knowledge Base ๋ฒกํฐ์ ์ฌ์ ๊ณ์ฐ(Precompute) ์ ๋ต ์๋ฆฝ