RAG ๊ฒ€์ƒ‰ ์ฆ๊ฐ• ์ƒ์„ฑ์˜ ๋ชจ๋“  ๊ฒƒ

RAG(Retrieval-Augmented Generation)๋Š” ์ตœ๊ทผ AI ๋ถ„์•ผ์—์„œ ๊ฐ€์žฅ ์ฃผ๋ชฉ๋ฐ›๋Š” ๊ธฐ์ˆ  ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด RAG์˜ ์ •ํ™•ํ•œ ์ž‘๋™ ์›๋ฆฌ์™€ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ํ˜ผ๋™ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” RAG์˜ ํ•ต์‹ฌ ๊ฐœ๋…๋ถ€ํ„ฐ ์‹ค์ œ ๊ตฌํ˜„๊นŒ์ง€ ์ƒ์„ธํžˆ ๋‹ค๋ค„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

RAG๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

RAG๋Š” ์„ธ ๋‹จ์–ด์˜ ์กฐํ•ฉ์ž…๋‹ˆ๋‹ค

  • Retrieval(๊ฒ€์ƒ‰): ์–ด๋””์„ ๊ฐ€ ๊ด€๋ จ ์ •๋ณด๋ฅผ ๋Œ์–ด์˜ค๋Š” ๊ฒƒ
  • Augmented(์ฆ๊ฐ•): ๊ธฐ์กด ๊ฒƒ์„ ๊ฐ•ํ™”ํ•˜๊ณ  ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ
  • Generation(์ƒ์„ฑ): ์ƒˆ๋กœ์šด ๋‚ด์šฉ์„ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒƒ

์ฆ‰, RAG๋Š” "๊ด€๋ จ ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ์ƒ์„ฑ ๊ณผ์ •์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ธฐ์ˆ " ์ž…๋‹ˆ๋‹ค.

RAG์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ

1. Retrieval: ์ •๋ณด ๊ฒ€์ƒ‰ ๊ณผ์ •

๊ฒ€์ƒ‰ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

  • ํ…์ŠคํŠธ ์ž„๋ฒ ๋”ฉ: ํ…์ŠคํŠธ๋ฅผ ํŠน์ • ์ฐจ์›์˜ ๋ฒกํ„ฐ๋กœ ๋ณ€ํ™˜
  • ์œ ์‚ฌ๋„ ๊ฒ€์ƒ‰: ๊ธฐ์กด์— ์ €์žฅ๋œ ๋ฒกํ„ฐ๋“ค ์ค‘ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ์ฐพ์Œ
  • ์ •๋ณด ์ถ”์ถœ: ๊ฒ€์ƒ‰๋œ ๋ฒกํ„ฐ์™€ ์—ฐ๊ฒฐ๋œ ์›๋ณธ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ด

2. Augmented: ์ง„์งœ ์ฆ๊ฐ• ๋Œ€์ƒ์€?

๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์˜คํ•ดํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.
RAG์—์„œ ์‹ค์ œ๋กœ ์ฆ๊ฐ•๋˜๋Š” ๊ฒƒ์€ ์ƒ์„ฑ(Generation) ์ž์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ์ปจํ…์ŠคํŠธ(Context)์ž…๋‹ˆ๋‹ค.

  • ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ๋‚˜ ์‚ฌ์šฉ์ž ์งˆ์˜์— ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ๋ณด๊ฐ•
  • ๋น„์Šทํ•œ ๊ฐœ๋…์œผ๋กœ Tool AC(Tool-Augmented Context), Memory AC(Memory-Augmented Context) ๋“ฑ์ด ์žˆ์Œ
  • ์‹ค์ œ๋กœ๋Š” "Retrieval Augmented Context"๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ์ด ๋” ์ •ํ™•

์ผ๋ฐ˜์ ์ธ LLM ์‚ฌ์šฉ vs RAG ํ™œ์šฉ

๊ธฐ์กด LLM ์‚ฌ์šฉ ๋ฐฉ์‹

์งˆ์˜ โ†’ LLM ํˆฌ์ž… โ†’ ๊ฒฐ๊ณผ ์ˆ˜๋ น
"๋ฆฌํŠธ๋ฆฌ๋ฒ„๋ž€?" โ†’ invoke(์งˆ์˜) โ†’ print(result)

RAG๋ฅผ ํ™œ์šฉํ•œ LLM ์‚ฌ์šฉ

์งˆ์˜ โ†’ ์ž„๋ฒ ๋”ฉ โ†’ ๋ฒกํ„ฐDB ๊ฒ€์ƒ‰ โ†’ ๊ด€๋ จ ์ž๋ฃŒ ์ทจํ•ฉ โ†’ ์งˆ์˜ ๋‚ด์šฉ ๋ณด๊ฐ• โ†’ LLM ํˆฌ์ž…

์‹ค์ œ ๊ตฌํ˜„ ์˜ˆ์‹œ

์งˆ์˜ = "๋ฆฌํŠธ๋ฆฌ๋ฒ„๋ž€?"
์ž„๋ฒ ๋”ฉ = [0.12, 0.34, -0.12, ...]
result = db.search([0.12, 0.34, -0.12, ...])
info = result.join(lambda x: x.data)
๋ณด๊ฐ•๋œ_์งˆ์˜ = ์งˆ์˜ + "์ถ”๊ฐ€์ •๋ณด: " + info
invoke(๋ณด๊ฐ•๋œ_์งˆ์˜)

์ž„๋ฒ ๋”ฉ(Embedding): RAG์˜ ํ•ต์‹ฌ ๊ธฐ์ˆ 

์ž„๋ฒ ๋”ฉ ๊ณผ์ •

  • ํ† ํฐํ™”: ๋ฌธ์žฅ์„ ๊ฐœ๋ณ„ ํ† ํฐ์œผ๋กœ ๋ถ„ํ•ดํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
  • ์ •์ˆ˜ ๋ณ€ํ™˜: ๊ฐ ํ† ํฐ์„ ์–ดํœ˜ ์‚ฌ์ „์„ ํ†ตํ•ด ์ •์ˆ˜๋กœ ๋ณ€ํ™˜
  • ๋ฒกํ„ฐ ๋ณ€ํ™˜: ์ •์ˆ˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ํŠน์ • ์ฐจ์›์˜ ๋ฒกํ„ฐ๋กœ ๋ณ€ํ™˜

์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ์˜ ์ค‘์š”์„ฑ

์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ ์„ ํƒ ์‹œ ์ฃผ์˜์‚ฌํ•ญ

  • ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ: ๋‹ค๋ฅธ ๋ชจ๋ธ๋กœ ๋งŒ๋“  ์ž„๋ฒ ๋”ฉ ๊ฒฐ๊ณผ๋Š” ์„œ๋กœ ํ˜ธํ™˜๋˜์ง€ ์•Š์Œ
  • ์ผ๊ด€์„ฑ ์œ ์ง€: RAG DB ๊ตฌ์ถ• ์‹œ ์‚ฌ์šฉํ•œ ๋ชจ๋ธ๊ณผ ์‚ฌ์šฉ์ž ์งˆ์˜ ์ž„๋ฒ ๋”ฉ ์‹œ ๊ฐ™์€ ๋ชจ๋ธ ์‚ฌ์šฉ ํ•„์ˆ˜
  • ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋น„์šฉ: ๋ชจ๋ธ ๊ต์ฒด ์‹œ ์ „์ฒด RAG DB๋ฅผ ์žฌ์ž„๋ฒ ๋”ฉํ•ด์•ผ ํ•จ

๋”ฐ๋ผ์„œ ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ์€ ์‹ ์ค‘ํ•˜๊ฒŒ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ณ ๊ธ‰ RAG ๊ธฐ๋ฒ• ์งˆ์˜ ๋ถ„ํ•ด

์™œ ์งˆ์˜ ๋ถ„ํ•ด๊ฐ€ ํ•„์š”ํ•œ๊ฐ€?

์‹ค์ œ RAG ์‹œ์Šคํ…œ์—์„œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ 

  • ์†Œ์œ  ๋ฐ์ดํ„ฐ: ๋Œ€๋ถ€๋ถ„ ์‚ฌ์‹ค ๊ธฐ๋ฐ˜ ์ •๋ณด (A๋Š” B๋‹ค)
  • ์‚ฌ์šฉ์ž ์งˆ์˜: ์˜๋„๋‚˜ ๋ฐฐ๊ฒฝ์ด ํฌํ•จ๋œ ๋ณต์žกํ•œ ๋ฌธ๋งฅ

์˜ˆ๋ฅผ ๋“ค์–ด,
"์‚ผ์„ฑ์€ ์ตœ๊ทผ ๋น„๋ฉ”๋ชจ๋ฆฌ ๋ถ„์•ผ์—์„œ ํฌ๊ฒŒ ๋’ค์ณ์ง€๊ณ  ์žˆ์œผ๋ฉฐ ์ƒค์˜ค๋ฏธ๋ฅผ ๋น„๋กฏํ•œ ํ›„๋ฐœ์ฃผ์ž์—๊ฒŒ ์กฐ์ฐจ ๋ฐ€๋ฆฐ๋‹ค.
๋ชจ๋ฐ”์ผ AP ๋ถ„์•ผ ์™ธ์—๋„ AI ์นฉ์…‹๋„ ๊ฐœ๋ฐœํ•˜์ง€ ๋ชปํ–ˆ๋‹ค
"๋ผ๋Š”
์งˆ์˜๋Š” ์—ฌ๋Ÿฌ ์‚ฌ์‹ค์„ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์งˆ์˜ ๋ถ„ํ•ด ์ „๋žต

LLM์„ ํ™œ์šฉํ•ด ๋ณต์žกํ•œ ์งˆ์˜๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋‹จ์ˆœํ•œ ์งˆ์˜๋กœ ๋ถ„ํ•ด

  1. ์‚ผ์„ฑ์ „์ž์˜ ์ตœ๊ทผ ๋น„๋ฉ”๋ชจ๋ฆฌ ๋ฐ˜๋„์ฒด ๋ถ„์•ผ ์„ฑ๊ณผ
  2. ๋น„๋ฉ”๋ชจ๋ฆฌ ๋ฐ˜๋„์ฒด ์‹œ์žฅ์—์„œ ์‚ผ์„ฑ๊ณผ ๊ฒฝ์Ÿ์‚ฌ ๊ฐ„ ๋น„๊ต
  3. ์ƒค์˜ค๋ฏธ์˜ ๋ฐ˜๋„์ฒด ๋ถ„์•ผ ๊ธฐ์ˆ ์  ์ง„์ „
  4. ์‚ผ์„ฑ์ด ํ›„๋ฐœ์ฃผ์ž์—๊ฒŒ ๋ฐ€๋ฆฌ๋Š” ๋ถ„์•ผ
  5. ์‚ผ์„ฑ์ „์ž์˜ ๋ชจ๋ฐ”์ผ AP ๊ฒฝ์Ÿ๋ ฅ
  6. ์‚ผ์„ฑ์˜ AI ์นฉ์…‹ ๊ฐœ๋ฐœ ํ˜„ํ™ฉ
  7. ์‚ผ์„ฑ AI ์นฉ์…‹์˜ ๊ฒฝ์Ÿ์‚ฌ ๋Œ€๋น„ ์ˆ˜์ค€

์งˆ์˜ ๋ถ„ํ•ด์˜ ์žฅ์ 

  • ๋†’์€ ์ผ์น˜์œจ: ์‚ฌ์‹ค ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰์œผ๋กœ ๋ฒกํ„ฐ ์œ ์‚ฌ๋„ ๋งค์นญ ํ™•๋ฅ  ์ฆ๊ฐ€
  • ํšจ์œจ์„ฑ: ์—ฌ๋Ÿฌ ์งˆ์˜ ์ฒ˜๋ฆฌ๊ฐ€ GPU ์ž์›์„ ํฌ๊ฒŒ ์†Œ๋น„ํ•˜์ง€ ์•Š์Œ
  • ์ •ํ™•์„ฑ: ์ปจํ…์ŠคํŠธ๋ฅผ ๋ฐฐ์ œํ•œ ์ˆœ์ˆ˜ํ•œ ์‚ฌ์‹ค ์ถ”์ถœ๋กœ ๊ฒ€์ƒ‰ ์ •ํ™•๋„ ํ–ฅ์ƒ

ํ”„๋กฌํ”„ํŠธ ์บ์‹œ ์ตœ์ ํ™”

ํ”„๋กฌํ”„ํŠธ ์บ์‹œ์˜ ํ˜„์‹ค

  • ๋ฒค๋”๋งˆ๋‹ค ์ œ๊ณต ์—ฌ๋ถ€๊ฐ€ ๋‹ค๋ฆ„
  • OpenAI๋Š” ํŠน์ • ๋ชจ๋ธ์—์„œ๋งŒ ์ง€์›ํ•˜๋ฉฐ ์ž…๋ ฅ ํ† ํฐ๋งŒ ๋Œ€์ƒ
  • ์บ์‹œ ์œ ์ง€ ์‹œ๊ฐ„๊ณผ ๋ฒ”์œ„๋Š” ๋ฒค๋” ์žฌ๋Ÿ‰

OpenAI ํ”„๋กฌํ”„ํŠธ ์บ์‹œ ์ž‘๋™ ์›๋ฆฌ

  • Prefix ์ผ์น˜: ๊ธฐ์กด ์งˆ์˜์™€ ์ƒˆ ์งˆ์˜๊ฐ€ ์•ž๋ถ€๋ถ„๋ถ€ํ„ฐ ์ผ์น˜ํ•˜๋Š” ๊ตฌ๊ฐ„๊นŒ์ง€ ์บ์‹œ
  • ์—„๊ฒฉํ•œ ์ผ์น˜: system๊ณผ user ์ˆœ์„œ๋งŒ ๋ฐ”๋€Œ์–ด๋„ ์บ์‹œ ๋ฌดํšจ
  • ํŠน์ • ํฌ๊ธฐ ์ด์ƒ: ์ผ์ • ํฌ๊ธฐ ์ด์ƒ์˜ ์ž…๋ ฅ์—์„œ๋งŒ ์ž‘๋™

์บ์‹œ ์ตœ์ ํ™” ์ „๋žต

  • ๊ณตํ†ต ๋ถ€๋ถ„์€ ์ตœ๋Œ€ํ•œ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€
  • ๋ณ€๊ฒฝ๋˜๋Š” ๋ถ€๋ถ„์€ ๋งจ ๋งˆ์ง€๋ง‰์— ๋ฐฐ์น˜
  • ์ฑ…์—์„œ ํ”ํžˆ ๋ณด๋Š” <WANT_TO_CACHE_HERE> ๊ฐ™์€ ํ‘œ๊ธฐ๋Š” ์˜๋ฏธ ์—†์Œ
  • ์‹ค์ œ๋กœ๋Š” ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์„ {}๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ์บ์‹œ ํ™œ์šฉ

๋žญ์ฒด์ธ ๋„๊ตฌ์ธ๊ฐ€ ์žฅ์• ๋ฌผ์ธ๊ฐ€?

๋žญ์ฒด์ธ์˜ ๋ณธ์งˆ

  • ํŒŒ์ดํ”„๋ผ์ด๋‹ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ: Runnable๋กœ ์ •์˜๋œ Task๋“ค์„ ์—ฐ๊ฒฐํ•˜์—ฌ ์‹คํ–‰
  • ๋™์‹œ์„ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ: ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค ๊ธฐ๋ฐ˜ ๋™์‹œ ์‹คํ–‰ (ํ•˜์ง€๋งŒ ์„ฑ๋Šฅ์ด ๋‚ฎ์Œ)
  • ์‚ฌ์ „ ์ •์˜๋œ ํƒœ์Šคํฌ ์ œ๊ณต: LLM ๊ด€๋ จ ์ž‘์—…๋“ค์„ ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•ด์„œ ์ œ๊ณต

๋žญ์ฒด์ธ์˜ ํ•œ๊ณ„

  • ์ฃผ๋กœ ๋…ธํŠธ๋ถ ํ™˜๊ฒฝ์˜ ์‹คํ—˜์šฉ์œผ๋กœ ์ ํ•ฉ
  • ์ƒ์šฉ ์„œ๋น„์Šค ๋„์ž… ์‹œ ์„ฑ๋Šฅ ๋ฌธ์ œ๋กœ ๋Œ€๋ถ€๋ถ„ ํฌ๊ธฐ
  • ๋™์‹œ์„ฑ ์„ฑ๋Šฅ์ด๋‚˜ ์ตœ์ ํ™”์— ๋Œ€ํ•œ ๊ฐœ์„  ์˜์ง€ ๋ถ€์กฑ

๋žญ๊ทธ๋ž˜ํ”„์™€ Langroid ๋Œ€์•ˆ

  • ๋žญ๊ทธ๋ž˜ํ”„: ํƒœ์Šคํฌ ์ฒด์ธ์„ ์ˆœ์ˆ˜ํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋กœ ํ‘œํ˜„ํ•˜๊ณ  ์‹คํ–‰๊ธฐ๋Š” ๋ณ„๋„ ์„ ํƒ
  • Langroid: ๊ณ ์„ฑ๋Šฅ asyncio ๊ธฐ๋ฐ˜์œผ๋กœ ๋žญ์ฒด์ธ๊ณผ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ์ œ๊ณต

๋žญ์ฒด์ธ ์‚ฌ์šฉ ๊ถŒ์žฅ์‚ฌํ•ญ

  • ๊นŠ์ด ํŒŒ๊ณ ๋“ค ํ•„์š” ์—†์Œ
  • ๋™์‹œ์„ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ๋Š” ๋ถ€์ ํ•ฉ
  • Task ์‹คํ–‰ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ์„œ์˜ ๊ธฐ๋Šฅ์—๋งŒ ์ง‘์ค‘
  • ์‚ฌ์ „ ์ •์˜๋œ LLM Task ํ™œ์šฉ์— ์ดˆ์ 

RAG์˜ ์šฐ์•„ํ•œ ๊ตฌํ˜„ ํ•จ์ˆ˜ํ˜• ํŒŒ์ดํ”„๋ผ์ด๋‹

RAG ์‹œ์Šคํ…œ์€ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„์˜ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ ๊ณผ์ •์ž…๋‹ˆ๋‹ค.
์ด๋ฅผ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋”์šฑ ๊น”๋”ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํƒ€์ž… ์•ˆ์ „ํ•œ ํŒŒ์ดํ”„๋ผ์ด๋‹

from typing import TypeVar, Callable

A = TypeVar('A')
B = TypeVar('B')
C = TypeVar('C')

def combine(f: Callable[[A], B], g: Callable[[B], C]) -> Callable[[A], C]:
    def composed(x: A) -> C:
        return g(f(x))
    return composed

def tokenize(text: str) -> list[str]:
    return text.split()

def embed(tokens: list[str]) -> list[float]:
    return [hash(token) % 100 / 100.0 for token in tokens]

# ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ
text_to_embedding = combine(tokenize, embed)
result = text_to_embedding("์•ˆ๋…•ํ•˜์„ธ์š” RAG์ž…๋‹ˆ๋‹ค")
print(result)  # [0.32, 0.45, 0.78]

์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๊ฐ ๋‹จ๊ณ„๊ฐ€ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌ๋˜๊ณ , ํƒ€์ž… ์•ˆ์ •์„ฑ๋„ ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

RAG๋Š” ๋‹จ์ˆœํžˆ "๊ฒ€์ƒ‰ํ•ด์„œ ์ƒ์„ฑ์„ ๋„์™€์ฃผ๋Š” ๊ธฐ์ˆ "์ด ์•„๋‹™๋‹ˆ๋‹ค.
ํšจ๊ณผ์ ์ธ RAG ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋ ค๋ฉด

  1. ์ •ํ™•ํ•œ ๊ฐœ๋… ์ดํ•ด: Context๋ฅผ ์ฆ๊ฐ•ํ•˜๋Š” ๊ธฐ์ˆ ์ž„์„ ์ธ์‹
  2. ์‹ ์ค‘ํ•œ ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ ์„ ํƒ: ํ•œ ๋ฒˆ ์„ ํƒํ•˜๋ฉด ๋ณ€๊ฒฝ ๋น„์šฉ์ด ํผ
  3. ์งˆ์˜ ๋ถ„ํ•ด ๊ธฐ๋ฒ• ํ™œ์šฉ: ๋ณต์žกํ•œ ์งˆ์˜๋ฅผ ๋‹จ์ˆœํ•œ ์‚ฌ์‹ค ๊ฒ€์ƒ‰์œผ๋กœ ๋ถ„ํ•ด
  4. ํ”„๋กฌํ”„ํŠธ ์บ์‹œ ์ตœ์ ํ™”: ๊ณตํ†ต ๋ถ€๋ถ„์€ ์•ž์—, ๋ณ€๊ฒฝ ๋ถ€๋ถ„์€ ๋’ค์—
  5. ์ ์ ˆํ•œ ๋„๊ตฌ ์„ ํƒ: ๋žญ์ฒด์ธ์˜ ํ•œ๊ณ„๋ฅผ ์ดํ•ดํ•˜๊ณ  ๋Œ€์•ˆ ๊ณ ๋ ค
  6. ํ•จ์ˆ˜ํ˜• ํŒŒ์ดํ”„๋ผ์ด๋‹: ํƒ€์ž… ์•ˆ์ „ํ•˜๊ณ  ์กฐํ•ฉ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๋กœ ์„ค๊ณ„

RAG๋Š” ์ด์ œ ์„ ํƒ์ด ์•„๋‹Œ ํ•„์ˆ˜๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์˜ฌ๋ฐ”๋ฅธ ์ดํ•ด์™€ ๊ตฌํ˜„ ์—†์ด๋Š” ์˜คํžˆ๋ ค ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฒˆ ํฌ์ŠคํŒ…์ด ์—ฌ๋Ÿฌ๋ถ„์˜ RAG ์—ฌ์ •์— ๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

profile
๊พธ์ค€ํžˆ, ์˜๋ฏธ์žˆ๋Š” ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ ๊ฒฝํ—˜๊ณผ ๋ฌธ์ œํ•ด๊ฒฐ ๊ณผ์ •์„ ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•œ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.

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