RAG(Retrieval Augmented Generation)
RAG(๊ฒ์ ์ฆ๊ฐ ์์ฑ)
- ๋๊ท๋ชจ ์ธ์ด ๋ชจ๋ธ(LLM)์ด ๋ต๋ณ์ ์์ฑํ ๋, ๋จ์ํ ํ์ต ๋ฐ์ดํฐ์ ์์กดํ๋ ๊ฒ์ด ์๋๋ผ ์ธ๋ถ์ ์ ๋ขฐํ ์ ์๋ ๋ฐ์ดํฐ ์์ค์์ ๊ด๋ จ ์ ๋ณด๋ฅผ ๊ฒ์ํ์ฌ ์ถ๊ฐํจ์ผ๋ก์จ ๋ต๋ณ์ ์ ํ์ฑ์ ๋์ด๋ ๊ธฐ์ .
- ์งง๊ฒ ๋งํด, RAG๋ ์ฌ์ฉ์์ ์ง๋ฌธ๊ณผ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ์ธ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฒ์ํ์ฌ, ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ ๋์ ๋ต๋ณ์ ์์ฑํด์ฃผ๋ ๊ธฐ์ ์ด๋ค.
RAG์ ์๋ ๋ฐฉ์
๊ฒ์(Retrieval)
- ์ฌ์ฉ์์ ์ง๋ฌธ์ ๋ฐ๋ผ ๊ด๋ จ์ฑ์ด ๋์ ์ ๋ณด๋ฅผ ์ธ๋ถ ์ง์ ๋ฒ ์ด์ค(์: ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๋ฌธ์ ์งํฉ)์์ ๊ฒ์
์ฆ๊ฐ(Augmentation)
- ๊ฒ์๋ ์ ๋ณด๋ฅผ LLM์ ์ ๋ ฅ ํ๋กฌํํธ์ ํจ๊ป ๋ฃ์ด ์ ๊ณตํ๋ค.
์์ฑ(Generation)
- LLM์ ๊ธฐ์กด์ ํ์ต๋ ์ง์๊ณผ ๊ฒ์๋ ์ธ๋ถ ์ ๋ณด๋ฅผ ๊ฒฐํฉํ์ฌ, ๋ ์ ํํ๊ณ ๊ตฌ์ฒด์ ์ธ ๋ต๋ณ์ ์์ฑํ๋ค.
์ผ๋ฐ์ ์ธ LLM ์๋ ๋ฐฉ์
RAG ์๋ ๋ฐฉ์
RAG์ ์ฃผ์ ์ฅ์
๊ฒฝ์ ์
- LLM์ ํ์ต(๋๋ ํ์ธํ๋)ํ๊ฑฐ๋, ํ์ต์ํฌ ์์ง์ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์ถํ๋๋ฐ ๋ง์ ์๊ฐ๊ณผ ๋น์ฉ์ด ๋ค์ง๋ง, RAG๋ ๊ทธ๋ด ํ์๊ฐ ์์ด ๊ฒฝ์ ์ ์ด๋ค.
์ ํ์ฑ ํฅ์
- LLM์ ํ ๋ฃจ์๋ค์ด์ (ํ๊ฐ ํ์)์ ์ค์ด๊ณ , ๊ฒ์ฆ ๊ฐ๋ฅํ ์ถ์ฒ๋ฅผ ๋ฐํ์ผ๋ก ๋ต๋ณํ์ฌ ์ ํ์ฑ์ ๋์ธ๋ค.
์ต์ ์ ๋ณด ํ์ฉ
- ์ธ๋ถ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ํตํด ์ต์ ์ ๋ณด๋ฅผ ํ์ฉํ ์ ์์ด, ํ์ต ๋ฐ์ดํฐ๊ฐ ์ค๋๋์์ ๊ฒฝ์ฐ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
ํ์ฅ์ฑ ๋ฐ ์ ์ฐ์ฑ
- ์๋ก์ด ์ ๋ณด๊ฐ ์๊ธธ ๋๋ง๋ค LLM ์ ์ฒด๋ฅผ ์ฌํ์ต์ํฌ ํ์ ์์ด, ์ธ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง ์ ๋ฐ์ดํธํ๋ฉด ๋๋ฏ๋ก ํจ์จ์ ์ด๋ค.
๋ง์ถคํ ๋ต๋ณ ์ ๊ณต
- ํน์ ์ฌ์ฉ ์ฌ๋ก๋ ๋ ์ ์ ์ธ ๋ฐ์ดํฐ ์์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง์ถคํ๋ ๋ต๋ณ์ ์์ฑํ ์ ์๋ค.
RAG์ ๊ธฐ๋ณธ์ ์ธ ํ์ดํ ๋ผ์ธ
RAG ํ์ดํ๋ผ์ธ
1๏ธโฃ Embedding

- ์๋ฒ ๋ฉ(Embedding)์ ํ ์คํธ(๋ฌธ์ฅ)๋ฅผ ์์น ๋ฒกํฐ(Vector) ํ์์ผ๋ก ๋ณํํ๋ ๊ณผ์
- ์๋ฒ ๋ฉ์ ๋ชฉ์ ์ ๋ฌธ์ฅ๊ณผ ๋ฌธ์ฅ ์ฌ์ด์ ์ ์ฌ๋๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํจ์ด๋ฉฐ, ์๋ฒ ๋ฉ ๋ชจ๋ธ์ ์๋ฏธ๊ฐ ๋น์ทํ ๋ฌธ์ฅ๋ค์ด ์๋ก ๊ฐ๊น๊ฒ ์์นํ ์ ์๋๋ก ํ์ต๋์ด ์๋ค. โ ==* ๋ฌธ์ฅ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๊ฐ ์งง๋ค = ์ ์ฌํ ์๋ฏธ๋ฅผ ๊ฐ์ง ๋ฌธ์ฅ์ด๋ค. *==
- ์๋ฒ ๋ฉ์ ํตํ ๊ฑฐ๋ฆฌ ๊ฐ๋ ์ ํ์ฉํด์ ์ฌ์ฉ์์ Query์ ๊ด๋ จ๋ ๋ฌธ์ฅ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก๋ถํฐ ๊ฒ์ํ ์ ์๊ฒ ๋๋ค.
2๏ธโฃ Vector DB

- Vector DB๋ ๊ฒ์๋ ๋ฌธ์๋ค์ด vector ํ์์ผ๋ก ์ ์ฅ๋์ด ์๋ ์ ์ฅ์
- ์ด๋ ๋ฌธ์๋ค์ ํต์งธ๋ก ์๋ฒ ๋ฉํ์ฌ ํ๋์ vector๋ก ๋ง๋ค์ด๋ด๋ ๊ฒ์ด ์๋, ํด๋น ๋ฌธ์๋ค์ ๋์ฑ ๋ ์์ ๋จ์์ธ **์ฒญํฌ(Chunk)**๋ก ์ชผ๊ฐ์ ์๋ฒ ๋ฉ์ ํ๊ฒ ๋๋ค.
- ์ฒญํฌ๋ RAG์์ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ ์ค ํ๋๋ก, ๋ชจ๋ธ์ด ์ํ๋ ์ ๋ณด๋ฅผ ์ฐพ์ง ๋ชปํ๋ ์ด์ ์ค ์๋น์๋ ์ ์ฒ๋ฆฌ์ ์๋ค. ๋ฐ๋ผ์ ์ฒญํฌ๋ฅผ ์ด๋ค ํฌ๊ธฐ๋ก ์ค์ ํ ์ง ๊ฒฐ์ ํ๋ ์ผ์ ๋จ์ํ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ๋์ด์, ๋ต๋ณ์ ํ์ง ์์ฒด๋ฅผ ๊ฒฐ์ ํ๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ์ฒญํฌ๋ 1000์, 500์ ๋จ์๋ก ์๋ฅด์ง๋ง ์๋ฏธ ๋จ์๋ก ์๋ฅด๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํ๋ค.
์ฒญํฌ์ ํฌ๊ธฐ๋ฅผ ์ ํ๋ ์ข์ ๊ธฐ์ค์ผ๋ก๋:
- ํ๋์ ๋ฌธ๋จ์ ํ๋์ ์ฃผ์ ๋ฅผ ๋ค๋ฃฐ ๊ฒ.
- ์ง๋ฌธ-๋ต๋ณ์ฒ๋ผ ์ง์ด ์๋ ๊ตฌ์กฐ๋ ํจ๊ป ์ ์งํ ๊ฒ(ex. Q&A ๋ฌธ์)
- ๋ฌธ์ฅ ์ค๊ฐ์ด ์๋๋ผ, ์๋ฏธ๊ฐ ์์ฐ์ค๋ ๋๋๋ ์ง์ ์์ ์๋ฅผ ๊ฒ
- ์ ์ ํ Overlap1(10~20%)์ ์ค์ ๋ฌธ๋งฅ์ด ์์ฐ์ค๋ฝ๊ฒ ์ด์ด์ง๊ฒ ํ ๊ฒ.
์ฒญํฌ(Chunk)๋ฅผ ํ๋ ์ด์
- ์ฒญํฌ(Chunk)๋, ํฐ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์์ ์กฐ๊ฐ์ผ๋ก ๋๋๋ ๊ฒ์ ๋งํ๋ค.
- ํ ๋ฒ์ ๋๋ฌด ๋ง์ ํ ์คํธ๋ฅผ ์ฒ๋ฆฌํ๋ฉด ๋ชจ๋ธ์ ํ๊ณ(์: ํ ํฐ ์ ํ)์ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์, ํจ์จ์ ์ธ ๊ฒ์์ ์ํด ์ฒญํฌ๋ก ๋๋์ด ์ฒ๋ฆฌํ๋ค. ํ ์คํธ๊ฐ ๋๋ฌด ๊ธด ๊ฒฝ์ฐ์๋ ํต์ฌ ์ ๋ณด ์ด์ธ์ ๋ถํ์ํ ์ ๋ณด๋ค์ด ๋ง์, ์๋ฒ ๋ฉ๋ vector์ ํ์ง์ด ๋ฎ์์ง ์ ์๋ค.
Chunk์ ์์
stateDiagram-v2 classDef bigbold font-weight:bold,font-size:20px classDef justbold font-weight:bold classDef wide padding:400px OriginalText: ์๋ฌธ OriginalText:::bigbold Chunk1:::justbold Chunk2:::justbold Chunk3:::justbold a1:::wide state OriginalText { a1 --> Chunks a1: "๊ฐํ ํ์ต์ ๋ณด์์ ํตํด ํ์ตํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด๋ ์์ด์ ํธ๊ฐ ํ๊ฒฝ๊ณผ ์ํธ์์ฉํ๋ฉฐ ์ ์ ํ ํ๋์ ์ ํํ๋ ๊ณผ์ ์ ๋๋ค. ๋ฅ๋ฌ๋๊ณผ ๊ฒฐํฉํ๋ฉด ๋์ฑ ๊ฐ๋ ฅํด์ง๋๋ค." } Chunks: ์ฒญํฌ Chunks:::bigbold state Chunks { Chunk1: ์ฒญํฌ 1 state Chunk1 { c1 c1: "๊ฐํ ํ์ต์ ๋ณด์์ ํตํด ํ์ตํ๋ ๋ฐฉ๋ฒ์ ๋๋ค." } Chunk2: ์ฒญํฌ 2 state Chunk2 { c2 c2: "์ด๋ ์์ด์ ํธ๊ฐ ํ๊ฒฝ๊ณผ ์ํธ์์ฉํ๋ฉฐ ์ ์ ํ ํ๋์ ์ ํํ๋ ๊ณผ์ ์ ๋๋ค." } Chunk3: ์ฒญํฌ 3 state Chunk3 { c3 c3: "๋ฅ๋ฌ๋๊ณผ ๊ฒฐํฉํ๋ฉด ๋์ฑ ๊ฐ๋ ฅํด์ง๋๋ค." } }
3๏ธโฃ Retrieve

- ์๋ฒ ๋ฉ์ ํ์ฉํ ์ ์ฌ๋ ๊ฒ์ ๋ฐฉ๋ฒ
- โ ์ง๋ฌธ์ Embeddingํ ๊ฐ๊ณผ โก ์ฒญํฌ๋ฅผ ์๋ฒ ๋ฉํ ๊ฐ์ ์ฝ์ฌ์ธ ์ ์ฌ๋๋ฅผ ๊ณ์ฐํ์ฌ ๊ฐ์ฅ ์ ์ฌํ ์ฒญํฌ๋ฅผ ๊ฒ์ํ๋ค. ๋ฒกํฐ๊ฐ ๊ฑฐ๋ฆฌ ์ธก์ ํ๋ ๋ค์ํ ๊ณ์ฐ์์ ์ ๋ฆฌํ ๋ธ๋ก๊ทธ
- Vector DB์ ์๋ ์๋ง์ ๋ฒกํฐ๋ค์ ๋ํด์ ๊ฐ๊ฐ ์ ์ฌ๋๋ฅผ ๋ค ์ธก์ ํ๊ฒ ๋๋ฉด ์๊ฐ์ด ์์ฒญ ์ค๋ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ANN(Approximate Nearest Neighbor) ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ๋ค
ANN(๊ทผ์ฌ ์ต๊ทผ์ ์ด์) ์๊ณ ๋ฆฌ์ฆ
- ์ ํต์ ์ธ ์ต๊ทผ์ ์ด์(NN) ๊ฒ์๊ณผ ๋ฌ๋ฆฌ ์ ํํ ์ด์ ๋์ โ๊ทผ์ฌ์ ์ผ๋ก ๊ฐ๊น์ด ์ด์โ์ ๋น ๋ฅด๊ฒ ์ฐพ๋ ๋ฐ ์ค์ ์ ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
- ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ธํธ, ๊ณ ์ฐจ์ ๋ฐ์ดํฐ(๊ณ ์ฐจ์ ํ ์คํธ ์๋ฒ ๋ฉ, ์ด๋ฏธ์ง, ์ค๋์ค ๋ฐ์ดํฐ), ์ค์๊ฐ ์ดํ๋ฆฌ์ผ์ด์ (์ฑ๋ด, ๊ฒ์์์ง) ๋ฑ์ ํ์ฉ๋๋ค.
๋ฒกํฐ ์๋ฒ ๋ฉ ๊ธฐ๋ฐ์ RAG์ ๋ํ์ฌ ๋นํ์ ์ธ ์๊ฐ์ ๊ฐ๊ณ ์๋ ๊ธ๋ ๋ง๋ค. ์๊ฐ ๋ ๋ ์ฝ์ด๋ณด์. ์๋นํ ๊ณต๊ฐ์ด ๋ง์ด ๋๋ค. Medium | The Insanity of Relying on Vector Embeddings: Why RAG Fails ์์ ๊ธฐ์ฌ๋ฅผ ํ๊ตญ์ด๋ก ์ ๋ฆฌํ ๋ธ๋ก๊ทธ
Footnotes
-
์ฒญํฌ ๊ฐ ๊ฒน์นจ(Chunk Overlap) ๋ฒ์๋ฅผ ๋งํ๋ค. ๋ฌธ์๋ฅผ ์ฒญํฌ๋ก ๋๋๋ ๊ณผ์ ์์ ๋ฌธ๋งฅ์ด ์์ค๋๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ์์ผ๋ก, ์ธ์ ํ ์ฒญํฌ ์ฌ์ด์ ์ผ๋ถ ๋ด์ฉ์ ๊ฒน์น๊ฒ ๋ง๋ค์ด ๋ฌธ๋งฅ์ ๋ณด์กดํ๋ค. โฉ