๋งˆ์น˜๋ฉฐยถ

๐Ÿ’ฌ ์žฅ๊ณ ๋กœ ๋งŒ๋“œ๋Š” RAG ์›น ์ฑ„ํŒ… ์„œ๋น„์Šค ํ•ธ์ฆˆ์˜จ๋žฉ์„ ๋๊นŒ์ง€ ํ•จ๊ป˜ ํ•ด์ฃผ์…”์„œ ์ง„์‹ฌ์œผ๋กœ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๐Ÿฅณ

๋ณธ ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” sqlite-vec, pgvector ํ™•์žฅ๊ณผ django-pyhub-rag ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๊ทธ๋ฆฌ๊ณ  ์žฅ๊ณ ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ™œ์šฉํ•˜์—ฌ RAG ์›น ์ฑ„ํŒ… ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ดค์Šต๋‹ˆ๋‹ค. ์žฅ๊ณ  ORM์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ์ž„๋ฒ ๋”ฉ ์ƒ์„ฑ๋ถ€ํ„ฐ ์œ ์‚ฌ๋„ ๊ฒ€์ƒ‰๊นŒ์ง€ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์—ฌ๋Ÿฌ๋ถ„๋„ SQLiteVectorDocument, PGVectorDocument ๋ชจ๋ธ์„ ์ƒ์†ํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฌธ์„œ ๋ชจ๋ธ์„ ์ •์˜ํ•˜๊ณ , ํ‰์†Œ ์žฅ๊ณ  ๊ฐœ๋ฐœํ•˜๋“ฏ์ด RAG ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ์„  ํฌ์ธํŠธยถ

  1. markdown ํฌ๋งท ์ง€์›

    • LLM ์‘๋‹ต์€ markdown ํฌ๋งท์ธ๋ฐ ์ด๋ฅผ HTML๋กœ ๋ณ€ํ™˜ํ•˜์ง€ ์•Š์•„, markdown ์ฝ”๋“œ๊ฐ€ ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. markdown to html ๋ณ€ํ™˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

    • ๋ถ€๋ก #2. AI ์‘๋‹ต markdown ํฌ๋งท ๋ณ€ํ™˜์—์„œ ๊ฐœ์„ 

  2. ๋‹ต๋ณ€ ํ€„๋ฆฌํ‹ฐ

  3. UX ๊ฐœ์„ 

    • ์‘๋‹ต์ด ์˜ค๊ธฐ๊นŒ์ง€ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ ค ํ™”๋ฉด์— ๋ณ€ํ™”๊ฐ€ ์ „ํ˜€ ์—†์–ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€ ์‘๋‹ต์„ ํ•˜๋Š” ๋™์•ˆ ๋กœ๋”ฉ ์•„์ด์ฝ˜์„ ํ‘œ์‹œํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋Œ€๊ธฐ ์ค‘์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. htmx์™€ ํ•จ๊ป˜ alpine.js๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์†์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - ๋ถ€๋ก #3. ์‘๋‹ต ๋Œ€๊ธฐ ์ค‘ ํ‘œ์‹œ์—์„œ ๊ฐœ์„ 

    • ์„œ๋ฒ„์—์„œ ์ง„ํ–‰ ์ƒํ™ฉ๋„ ์ค‘๊ฐ„ ์ค‘๊ฐ„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ์„œ๋ฒ„์—์„œ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐฉ์‹์œผ๋กœ ์‘๋‹ต์„ ํ•œ๋‹ค๋ฉด ์œ ์ €์—๊ฒŒ ๋” ๋‚˜์€ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์›น์†Œ์ผ“ ๋ฐฉ์‹์œผ๋กœ ์ฑ„ํŒ… ํ™”๋ฉด์„ ๊ตฌํ˜„ํ•˜๋ฉด ๋” ๋‚˜์€ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์žฅ๊ณ ์—์„œ๋Š” channels๋ฅผ ํ†ตํ•ด ์žฅ๊ณ  ์Šคํƒ€์ผ์˜ ์›น์†Œ์ผ“์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  4. ์žฅ๊ณ  Form์„ ํ†ตํ•œ ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€ ์ž…๋ ฅ ํผ ๋ Œ๋”๋ง

    • ์ž…๋ ฅ ํผ HTML์€ ์ง์ ‘ HTML์„ ๊ตฌ์„ฑํ•˜์‹ค ์ˆ˜๋„ ์žˆ๊ณ , ์žฅ๊ณ  Form์„ ํ†ตํ•ด ๋ Œ๋”๋งํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์žฅ๊ณ  Form์„ ์‚ฌ์šฉํ•˜๋ฉด ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ, CSRF ๋ณดํ˜ธ, ํผ ํ•„๋“œ ์ž๋™ ์ƒ์„ฑ, ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ž๋™์œผ๋กœ ์ œ๊ณต๋ฐ›์„ ์ˆ˜ ์žˆ์–ด ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•˜๊ณ  ๋ณด์•ˆ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํผ ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ ์‹œ ํ…œํ”Œ๋ฆฟ ์ฝ”๋“œ ์ˆ˜์ • ์—†์ด ํผ ํด๋ž˜์Šค๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์œ ์ง€๋ณด์ˆ˜์„ฑ๋„ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

  5. pgvector ๋ชจ๋ธ์— ์ธ๋ฑ์Šค ์ง€์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค

    • django-pyhub-rag ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ๋Š” pgvector์— ๋Œ€ํ•ด์„œ๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ง€์›ํ•˜๋ฉฐ, sqlite-vec์— ๋Œ€ํ•ด์„œ๋Š” ๊ณง ์ธ๋ฑ์Šค ์˜ต์…˜์„ ์ง€์›ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

๊ฐ์‚ฌ์˜ ๋งยถ

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

๋งŽ์€ ๊ด€์‹ฌ๊ณผ ์‘์› ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์˜ ํŒŒ์ด์ฌ/์žฅ๊ณ  ํŽ˜์ด์Šค๋ฉ”์ด์ปค๊ฐ€ ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ด์ฌ์‚ฌ๋ž‘๋ฐฉ, ์ด์ง„์„ ๋“œ๋ฆผ