๐ŸŽต Plexamp๋Š” ์•ˆ๋…•, Ollama๋กœ ๊ตฌ์ถ•ํ•œ ๋กœ์ปฌ RAG ๊ธฐ๋ฐ˜ AI ์Œ์•… ์—์ด์ „ํŠธ

์ตœ๊ทผ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ๋Œ€ํ˜• ์–ธ์–ด ๋ชจ๋ธ(LLM)์„ ๋Œ๋ฆฌ๋Š” ๊ฒƒ์ด ๋Œ€์ค‘ํ™”๋˜๋ฉด์„œ, ๋‹จ์ˆœํžˆ ์ฑ„ํŒ…์„ ๋‚˜๋ˆ„๋Š” ๋‹จ๊ณ„๋ฅผ ๋„˜์–ด ์‹ค์งˆ์ ์ธ **’๊ฐœ์ธ์šฉ ์„œ๋น„์Šค’**๋ฅผ ๋งŒ๋“œ๋Š” ์žฌ๋ฏธ๊ฐ€ ์ปค์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” ๊ธฐ์กด ์ƒ์šฉ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๊ฐˆ์ฆ์—์„œ ์‹œ์ž‘ํ•ด, ๋‚ด ํ•˜๋“œ๋””์Šคํฌ์˜ ์Œ์•…์„ ์™„๋ฒฝํ•˜๊ฒŒ ํ†ต์ œํ•˜๋Š” ๋‚˜๋งŒ์˜ AI ์Œ์•… ๋น„์„œ๋ฅผ ๊ตฌ์ถ•ํ•œ ๊ธฐ๋ก์ž…๋‹ˆ๋‹ค.


1. ์™œ ์ง์ ‘ ๋งŒ๋“ค์—ˆ๋‚˜? (Motivation)

๊ทธ๋™์•ˆ ์Œ์•… ๊ด€๋ฆฌ์™€ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์œ„ํ•ด Plexamp๋ฅผ ์• ์šฉํ•ด ์™”์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚ ์ด ๊ฐˆ์ˆ˜๋ก ํ์‡„์ ์œผ๋กœ ๋ณ€ํ•˜๋Š” ์ง€์› ์ •์ฑ…๊ณผ ๋งค๋‹ฌ ์ง€๋ถˆํ•ด์•ผ ํ•˜๋Š” ๊ตฌ๋… ๋ชจ๋ธ, ๊ทธ๋ฆฌ๊ณ  ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์˜ ํ•œ๊ณ„์— ์ง€์น˜๊ณ  ๋ง์•˜์Šต๋‹ˆ๋‹ค.

“๋‚ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๊ฐ€ ๊ฐ€์žฅ ํŽธํ•œ ๋ฐฉ์‹์œผ๋กœ, ๋น„์šฉ ๊ฑฑ์ • ์—†์ด ์“ฐ๊ณ  ์‹ถ๋‹ค.”

๋˜ํ•œ, ์ˆ˜๋งŒ ๊ณก์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ˆ˜๋™์œผ๋กœ ํ”Œ๋ ˆ์ด๋ฆฌ์ŠคํŠธํ™”ํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅ์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ์ด ์ผ์ผ์ด ๊ด€๋ฆฌํ•˜๋‹ค ๋ณด๋ฉด ๊ฒฐ๊ตญ ๋“ฃ๋Š” ๊ณก๋งŒ ๋“ฃ๊ฒŒ ๋˜๊ณ , ์ด๋ฆ„์กฐ์ฐจ ๊ธฐ์–ต๋‚˜์ง€ ์•Š๋Š” ์ˆ˜๋งŽ์€ ๋ช…๊ณก์€ ํ•˜๋“œ๋””์Šคํฌ ๊นŠ์ˆ™ํ•œ ๊ณณ์—์„œ ์ž ๋“ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ช…๋ฐฑํ•œ ์ €์žฅ ๊ณต๊ฐ„์˜ ๋‚ญ๋น„์ด์ž ์†Œ์ค‘ํ•œ ๋ฐ์ดํ„ฐ์˜ ๋ฐฉ์น˜์ž…๋‹ˆ๋‹ค.

์ด ๊ฐ„๊ฒฐํ•œ ๋ชฉํ‘œ๋ฅผ ์œ„ํ•ด ๋กœ์ปฌ GPU ์„œ๋ฒ„์™€ ์˜คํ”ˆ์†Œ์Šค AI ๋„๊ตฌ๋“ค์„ ๊ฒฐํ•ฉํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.


2. ์‹œ์Šคํ…œ ์„ค๊ณ„: RAG(Retrieval-Augmented Generation)

๋‹จ์ˆœํ•œ ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰์€ ์˜คํƒ€๋‚˜ ๋ชจํ˜ธํ•œ ํ‘œํ˜„์— ์ทจ์•ฝํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž์˜ ์˜๋„๋ฅผ ๋ฒกํ„ฐ(Vector)๋กœ ์ดํ•ดํ•˜๋Š” RAG ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ฑ„ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ: mxbai-embed-large (Ollama๋ฅผ ํ†ตํ•ด ๋กœ์ปฌ ๊ตฌ๋™)
  • ๋ฒกํ„ฐ DB: ChromaDB (์œ ์‚ฌ๋„ ๊ธฐ๋ฐ˜ ๊ณก ๊ฒ€์ƒ‰)
  • ์ธํ„ฐํŽ˜์ด์Šค: ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ API (์–ธ์ œ ์–ด๋””์„œ๋‚˜ ์ ‘๊ทผ ๊ฐ€๋Šฅ)
  • ์ธํ”„๋ผ: Docker & Docker Compose (๊ฐ„ํŽธํ•œ ๋ฐฐํฌ ๋ฐ ๊ด€๋ฆฌ)

3. ํ•ต์‹ฌ ์ค‘์˜ ํ•ต์‹ฌ: ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๊ฐ€ ์ „๋ถ€๋‹ค! (Data Cleaning)

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ๊ฐ€์žฅ ๋ผˆ์ €๋ฆฌ๊ฒŒ ๋А๋‚€ ์ ์€ **”Garbage In, Garbage Out”**์ž…๋‹ˆ๋‹ค. ์•„๋ฌด๋ฆฌ ๋›ฐ์–ด๋‚œ AI ๋ชจ๋ธ์„ ์จ๋„, ์†Œ์Šค ๋ฐ์ดํ„ฐ(ํŒŒ์ผ๋ช…, ํƒœ๊ทธ)๊ฐ€ ์—‰๋ง์ด๋ฉด ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋Š” ์ฒ˜์ฐธํ•ฉ๋‹ˆ๋‹ค.

ํŠนํžˆ ์œˆ๋„์šฐ์™€ ๋ฆฌ๋ˆ…์Šค๋ฅผ ์˜ค๊ฐ€๋Š” ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•˜๋Š” **ํ•œ๊ธ€ ์ธ์ฝ”๋”ฉ ๊นจ์ง(NFD/NFC ์ถฉ๋Œ)**๊ณผ ๋ถˆํ•„์š”ํ•œ ๊ด‘๊ณ ์„ฑ ์ ‘๋ฏธ์‚ฌ([MV], Official, Kpop)๋Š” ๊ฒ€์ƒ‰ ์ •ํ™•๋„๋ฅผ ๋–จ์–ด๋œจ๋ฆฌ๋Š” ์ฃผ๋ฒ”์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ› ๏ธ ๋ฐ์ดํ„ฐ ์ •ํ™” ํ”„๋กœ์„ธ์Šค

๋‹จ์ˆœํ•œ ์‰˜ ์Šคํฌ๋ฆฝํŠธ ๋Œ€์‹  Python์˜ ๊ฐ•๋ ฅํ•œ ์œ ๋‹ˆ์ฝ”๋“œ ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ์„ ํ™œ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์ธ์ฝ”๋”ฉ ์ •๊ทœํ™”: unicodedata.normalize('NFC', ...)๋ฅผ ํ†ตํ•ด ์ž๋ชจ ๋ถ„๋ฆฌ ํ˜„์ƒ์„ ์™„๋ฒฝํžˆ ํ•ด๊ฒฐ.
  • ๋ฐ”์ดํŠธ ๋‹จ์œ„ ์ œ์–ด: ํŒŒ์ผ๋ช…์ด ์™„์ „ํžˆ ๊นจ์ง„ ์ƒํƒœ์—์„œ๋„ ๋ฐ”์ดํŠธ ๋ ˆ๋ฒจ์—์„œ ๋ณต๊ตฌ๋ฅผ ์‹œ๋„ํ•˜์—ฌ ์œ ์‹ค๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ตœ์†Œํ™”.
  • ์ง€๋Šฅํ˜• ์ธ๋ฑ์‹ฑ: ํŒŒ์ผ๋ช…๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ์™€ ID3 ํƒœ๊ทธ๋ฅผ ํ•˜๋‚˜์˜ ๋ฌธ์žฅ์œผ๋กœ ์กฐํ•ฉํ•ด AI๊ฐ€ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ๋งฅ๋ฝ์„ ์ œ๊ณต.

๋ฐ์ดํ„ฐ๊ฐ€ ๊นจ๋—ํ•ด์ง€๋Š” ์ˆœ๊ฐ„, AI์˜ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์€ ๋น„์•ฝ์ ์œผ๋กœ ์ƒ์Šนํ–ˆ์Šต๋‹ˆ๋‹ค.


4. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์˜ ๊ฐ€์žฅ ํฐ ์˜์˜: “์•ฑ ๋งŒ๋“ค๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ์‰ฝ๋‹ค”

๊ณผ๊ฑฐ์— ์ด๋Ÿฐ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋ ค๋ฉด ๋ณต์žกํ•œ ๊ฒ€์ƒ‰ ์—”์ง„ ๋กœ์ง๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„์— ์ˆ˜์ฃผ๊ฐ€ ๊ฑธ๋ ธ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ง€๊ธˆ์€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

  • AI์™€์˜ ํ˜‘์—…: ๋กœ์ปฌ LLM๊ณผ ๋Œ€ํ™”ํ•˜๋ฉฐ ๋ณต์žกํ•œ ํŒŒ์ด์ฌ ์Šคํฌ๋ฆฝํŠธ์™€ ๋„์ปค ์„ค์ •์„ ์ˆœ์‹๊ฐ„์— ์งœ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“ˆํ™”๋œ ๋„๊ตฌ: Ollama์™€ ChromaDB ๊ฐ™์€ ๋„๊ตฌ๋“ค์ด ์ถ”์ƒํ™”๊ฐ€ ์ž˜ ๋˜์–ด ์žˆ์–ด, ์กฐ๋ฆฝ ์œ„์ฃผ๋กœ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ๋Š” ๊ฑฐ์ฐฝํ•œ ๊ฐœ๋ฐœ ํŒ€์ด๋‚˜ ํฐ ์ž๋ณธ ์—†์ด๋„, ๊ฐœ์ธ์ด ๋ณธ์ธ์˜ ๋ถˆํŽธํ•จ์„ ํ•ด๊ฒฐํ•˜๋Š” ์ˆ˜์ค€ ๋†’์€ ์•ฑ์„ ๋ฉฐ์น  ๋งŒ์— ๋š๋”ฑ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์‹œ๋Œ€๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


5. ๊ฒฐ๊ณผ ๋ฐ ํ–ฅํ›„ ๊ณ„ํš

  • ์„ฑ๋Šฅ: ์ˆ˜์ฒœ ๊ณก์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ “์‹ ๋‚˜๋Š” ๊ณก ์ฐพ์•„์ค˜” ํ˜น์€ “๊ฐ€์ˆ˜ ์ด๋ฆ„”๋งŒ ์ž…๋ ฅํ•ด๋„ 0.5์ดˆ ์ด๋‚ด์— ์ •ํ™•ํ•œ ๊ณก์„ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
  • ์ž์œ : ๊ตฌ๋…๋ฃŒ๋„ ์—†๊ณ , ์ •์ฑ… ๋ณ€ํ™”์— ํœ˜๋‘˜๋ฆด ์ผ๋„ ์—†์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ๋‚ด ์„œ๋ฒ„ ์•ˆ์—์„œ๋งŒ ์•ˆ์ „ํ•˜๊ฒŒ ํ๋ฆ…๋‹ˆ๋‹ค.

๋ฌผ๋ก  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์–ผ๋งˆ๋‚˜ ์ž˜ ๋งŒ๋“œ๋А๋ƒ์— ๋”ฐ๋ผ ๋งŽ์€ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค!!

๐Ÿ”ฎ ํ–ฅํ›„ ๊ณ„ํš

  1. ์ž๋™ ํ”Œ๋ ˆ์ด๋ฆฌ์ŠคํŠธ: ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ ๊ธฐ๋ก์„ ๋ถ„์„ํ•ด ์ทจํ–ฅ์— ๋งž๋Š” ๊ณก์„ ๋จผ์ € ์ œ์•ˆํ•˜๋Š” ๊ธฐ๋Šฅ.
  2. ์˜ค๋””์˜ค ๋ถ„์„ ๊ฒฐํ•ฉ: ํ…์ŠคํŠธ๋ฅผ ๋„˜์–ด ์˜ค๋””์˜ค ํŒŒํ˜• ์ž์ฒด๋ฅผ ๋ถ„์„ํ•ด ‘๋น„์Šทํ•œ ๋А๋‚Œ์˜ ๊ณก’์„ ์ฐพ๋Š” ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ ๊ฒ€์ƒ‰ ๋„์ž….

๋‚˜๋งŒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ AI์˜ ํž˜์œผ๋กœ ์žฌ๋ฐœ๊ฒฌํ•˜๋Š” ๊ณผ์ •์€ ๋งค์šฐ ์ฆ๊ฑฐ์› ์Šต๋‹ˆ๋‹ค. ์ƒ์šฉ ์„œ๋น„์Šค์˜ ์ œ์•ฝ์—์„œ ๋ฒ—์–ด๋‚˜ ๋‚˜๋งŒ์˜ ๋””์ง€ํ„ธ ์˜ํ† ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์‹ถ์€ ๋ถ„๋“ค์ด๋ผ๋ฉด, ์ง€๊ธˆ ๋‹น์žฅ ๋กœ์ปฌ AI ์—์ด์ „ํŠธ ๊ฐœ๋ฐœ์— ๋„์ „ํ•ด ๋ณด์‹œ๊ธธ ๊ถŒํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€ ๋‹ฌ๊ธฐ

์ด๋ฉ”์ผ ์ฃผ์†Œ๋Š” ๊ณต๊ฐœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•„์ˆ˜ ํ•„๋“œ๋Š” *๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค

์ด ์‚ฌ์ดํŠธ๋Š” Akismet์„ ์‚ฌ์šฉํ•˜์—ฌ ์ŠคํŒธ์„ ์ค„์ž…๋‹ˆ๋‹ค. ๋Œ“๊ธ€ ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋Š”์ง€ ์•Œ์•„๋ณด์„ธ์š”.

์œ„๋กœ ์Šคํฌ๋กค