Home / Advanced RAG ๊ธฐ๋ฒ• / ๐ŸŽฏ Advanced RAG
Module

๐ŸŽฏ Advanced RAG

HyDE, Reranking, Self-RAG

โฑ 60๋ถ„ 56 / 189

Advanced RAG ๊ธฐ๋ฒ•

์ธ๋ฑ์‹ฑ ์ตœ์ ํ™” ยท ์‚ฌ์ „ ๊ฒ€์ƒ‰ ยท ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ยท ์‚ฌํ›„ ๊ฒ€์ƒ‰

๊ฒ€์ƒ‰์ด ์—‰๋šฑํ•  ๋•Œ ์“ฐ๋Š” ์ฒ˜๋ฐฉ์ „

์‹คํŒจ ์œ ํ˜• ์ง„๋‹จ๊ณผ ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„๋ณ„ ์ฒ˜๋ฐฉ โ€” ๊ฒ€์ƒ‰ ํ’ˆ์งˆ์„ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ๊ธฐ๋ฒ• ์ฒด๊ณ„

์™œ Advanced RAG์ธ๊ฐ€

์‹คํŒจ ์œ ํ˜• 3๊ฐ€์ง€ ยท 3๋‹จ๊ณ„ ์ตœ์ ํ™”

PART 1 ยท ์™œ Advanced RAG์ธ๊ฐ€

Advanced RAG

Naive RAG๊ฐ€ ์‹คํŒจํ•˜๋Š” ์ง€์ ์„ ์ง„๋‹จํ•˜๊ณ , ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„๋ณ„๋กœ ์ฒ˜๋ฐฉํ•˜๋Š” ๊ธฐ๋ฒ• ์ฒด๊ณ„

Advanced RAG

๊ธฐ๋ฒ•์˜ ๋‚˜์—ด์ด ์•„๋‹ˆ๋ผ ์ง„๋‹จ โ†’ ์ฒ˜๋ฐฉ์˜ ์ฒด๊ณ„ โ€” ์–ด๋А ๋‹จ๊ณ„๊ฐ€ ๋ณ‘๋ชฉ์ธ์ง€์— ๋”ฐ๋ผ ์“ธ ๊ธฐ๋ฒ•์ด ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค

  • ์ง„๋‹จ โ€” ์‹คํŒจ ์œ ํ˜• 3๊ฐ€์ง€
  • ์ธ๋ฑ์‹ฑ โ€” ์ €์žฅ ๋ฐฉ๋ฒ• ๊ฐœ์„  (์˜คํ”„๋ผ์ธ 1ํšŒ)
  • ์‚ฌ์ „ ๊ฒ€์ƒ‰ โ€” ์ฟผ๋ฆฌ ๋ณ€ํ™˜ (๊ฒ€์ƒ‰ ์ „)
  • ์‚ฌํ›„ ๊ฒ€์ƒ‰ โ€” ๊ฒฐ๊ณผ ์ •์ œ (๊ฒ€์ƒ‰ ํ›„)
takeaway

์ „๋ถ€ ์“ฐ๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค โ€” ๋ณ‘๋ชฉ์— ๋งž๋Š” ๊ธฐ๋ฒ•๋งŒ ๊ณจ๋ผ ์–น๊ณ , ํ‰๊ฐ€ ๋ฃจํ”„๋กœ ํšจ๊ณผ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
๋ชจ๋“  ๊ธฐ๋ฒ•์€ ๋น„์šฉ(๋ ˆ์ดํ„ด์‹œยทํ† ํฐยท์ธํ”„๋ผ)์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

PART 1 ยท ์™œ Advanced RAG์ธ๊ฐ€

Naive RAG โ€” ์ง์„  ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋ฒฝ

๊ฒ€์ƒ‰ ํ•œ ๋ฒˆ, ๊ฒฐ๊ณผ ๊ทธ๋Œ€๋กœ ์ฃผ์ž… โ€” ์•ž ๋ชจ๋“ˆ์—์„œ ๋งŒ๋“  ๊ธฐ๋ณธํ˜•์ด ์‹ค์ „์—์„œ ๋ถ€๋”ชํžˆ๋Š” ์ง€์ 

takeaway

์•ž RAG ํŒŒ์ดํ”„๋ผ์ธ ๋ชจ๋“ˆ์—์„œ ๋งŒ๋“  ๊ตฌ์„ฑ์ด ๋ฐ”๋กœ ์ด Naive(Basic) RAG์ž…๋‹ˆ๋‹ค โ€” ๋™์ž‘์€ ํ•˜์ง€๋งŒ ์ค‘๊ฐ„์— ๊ณ ์น  ์ง€์ ์ด ์—†์–ด, ๊ฒ€์ƒ‰์ด ํ‹€๋ฆฌ๋ฉด ๋‹ต๋„ ๊ทธ๋Œ€๋กœ ํ‹€๋ฆฝ๋‹ˆ๋‹ค.

PART 1 ยท ์™œ Advanced RAG์ธ๊ฐ€

Naive vs Advanced โ€” ๋ฌด์—‡์ด ๋‹ค๋ฅธ๊ฐ€

ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ฐˆ์•„์—Ž๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ฐ™์€ ๋ผˆ๋Œ€์˜ ๋‹จ๊ณ„๋งˆ๋‹ค ๊ฐœ์„  ํฌ์ธํŠธ๋ฅผ ๊ฝ‚๋Š” ๊ฒƒ

Naive RAG

๊ณ ์ •๋œ ์ง์„  ํŒŒ์ดํ”„๋ผ์ธ

  • ์งˆ๋ฌธ์„ ๋ฐ›์€ ๊ทธ๋Œ€๋กœ ๊ฒ€์ƒ‰ โ€” ์ฟผ๋ฆฌ ๊ฐœ์„  ์—†์Œ
  • ๊ฒ€์ƒ‰๋„ ์ฃผ์ž…๋„ ํ•œ ๋ฒˆ โ€” ์žฌ์‹œ๋„ยท์ •์ œ ์—†์Œ
  • ์ˆœ์œ„๊ฐ€ ํ‹€๋ ค๋„ ๊ทธ๋Œ€๋กœ LLM์— ์ „๋‹ฌ
  • ๊ตฌํ˜„์ด ๋‹จ์ˆœ โ€” ํ”„๋กœํ† ํƒ€์ž…์— ์ ํ•ฉ

์‹คํŒจํ•ด๋„ ๊ทธ ์›์ธ์„ ๊ณ ์น  ์ง€์ ์ด ํŒŒ์ดํ”„๋ผ์ธ ์•ˆ์— ์—†์Šต๋‹ˆ๋‹ค.

Advanced RAG

๋‹จ๊ณ„๋งˆ๋‹ค ๊ฐœ์„  ํฌ์ธํŠธ๋ฅผ ๊ฝ‚๋Š” ์ฒด๊ณ„

  • ์ธ๋ฑ์‹ฑ โ€” ์ €์žฅ ๋ฐฉ๋ฒ•๋ถ€ํ„ฐ ๊ฐœ์„  (Parent-Childยท๋ฉ”ํƒ€๋ฐ์ดํ„ฐ)
  • ์‚ฌ์ „ ๊ฒ€์ƒ‰ โ€” ์ฟผ๋ฆฌ๋ฅผ ๋ฐ”๊ฟ”์„œ ๊ฒ€์ƒ‰ (RewritingยทMulti-Query)
  • ๊ฒ€์ƒ‰ โ€” ๋ฒกํ„ฐ + ํ‚ค์›Œ๋“œ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ
  • ์‚ฌํ›„ ๊ฒ€์ƒ‰ โ€” ๊ฒฐ๊ณผ๋ฅผ ์ •์ œํ•ด ์ฃผ์ž… (RerankingยทCompression)

๊ฐ™์€ ๋ผˆ๋Œ€ ์œ„์— ๋ณ‘๋ชฉ์— ๋งž๋Š” ๊ธฐ๋ฒ•๋งŒ ๊ณจ๋ผ ์–น์Šต๋‹ˆ๋‹ค.

takeaway

Advanced RAG๋Š” ์ƒˆ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์•„๋‹ˆ๋ผ Naive ํŒŒ์ดํ”„๋ผ์ธ์— ๊ฝ‚๋Š” ๊ฐœ์„  ํฌ์ธํŠธ์˜ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค โ€” ๋ฌด์—‡์„ ๊ฝ‚์„์ง€๋Š” ์‹คํŒจ ์œ ํ˜•์ด ์ •ํ•ฉ๋‹ˆ๋‹ค.

PART 1 ยท ์™œ Advanced RAG์ธ๊ฐ€

Naive RAG์˜ ์‹คํŒจ ์œ ํ˜• 3๊ฐ€์ง€

๋‹จ์ˆœ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰์ด ๋†“์น˜๋Š” ์งˆ๋ฌธ๋“ค โ€” ์œ ํ˜•์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋Š” ์ฒ˜๋ฐฉ

์–ดํœ˜ ๋ถˆ์ผ์น˜

"ํ•ด์•ฝํ•˜๋ฉด ๋ˆ ๋‚ด์•ผ ํ•ด?" โ€” ๋ฌธ์„œ๋Š” "์ทจ์†Œ ์ˆ˜์ˆ˜๋ฃŒ ์ •์ฑ…"

  • ๊ตฌ์–ด์ฒดโ†”๋ฌธ์–ด์ฒดยท๋™์˜์–ด๋ฅผ ์ž„๋ฒ ๋”ฉ์ด ์ž‡์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ
  • ๊ด€๋ จ ๋ฌธ์„œ๊ฐ€ ์•„์˜ˆ ๊ฒ€์ƒ‰๋˜์ง€ ์•Š์Œ
  • ์ฒ˜๋ฐฉ โ€” Query Rewriting ยท ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰

์˜๋„ ๋ถˆ๋ช…ํ™•

"๊ดœ์ฐฎ์€ ๋ฐ ์žˆ์–ด?" โ€” ์นดํ…Œ๊ณ ๋ฆฌ ยท ์กฐ๊ฑด์ด ๋ชจํ˜ธ

  • ์–ด๋–ค ๊ด€์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•ด์•ผ ํ• ์ง€ ์ฟผ๋ฆฌ์— ์ •๋ณด๊ฐ€ ์—†์Œ
  • ์—‰๋šฑํ•œ ๋ฌธ์„œ๊ฐ€ ์ƒ์œ„์— ์˜ฌ๋ผ์˜ด
  • ์ฒ˜๋ฐฉ โ€” Multi-Query ยท ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„ํ„ฐ

๋ณตํ•ฉ ์งˆ๋ฌธ

"์˜ˆ์•ฝ ๋ฐ”๊พธ๋ฉด์„œ ์ธ์›๋„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์–ด?" โ€” ์ฃผ์ œ 2๊ฐœ

  • ํ•˜๋‚˜์˜ ๋ฒกํ„ฐ๋กœ ๋‘ ์ฃผ์ œ๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์—†์Œ
  • ํ•œ์ชฝ ์ฃผ์ œ๋งŒ ๊ฒ€์ƒ‰๋˜์–ด ๋ฐ˜์ชฝ ๋‹ต๋ณ€
  • ์ฒ˜๋ฐฉ โ€” Sub-Query ๋ถ„ํ•ด ยท RAG Fusion
takeaway

LLM์ด ์•„๋ฌด๋ฆฌ ์ข‹์•„๋„ ์ž˜๋ชป๋œ ๋ฌธ์„œ๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉด ํ• ๋ฃจ์‹œ๋„ค์ด์…˜(ํ™˜๊ฐ)์ž…๋‹ˆ๋‹ค.
Advanced RAG์˜ ๋ชฉํ‘œ๋Š” ํ•˜๋‚˜ โ€” ์ •ํ™•ํ•œ ๋ฌธ์„œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ

PART 1 ยท ์™œ Advanced RAG์ธ๊ฐ€

3๋‹จ๊ณ„ ์ตœ์ ํ™” ์ง€๋„

์™ผ์ชฝ์€ Naive, ์˜ค๋ฅธ์ชฝ์€ Advanced โ€” ๊ฐ™์€ ์„ธ๋กœ ํ๋ฆ„์—์„œ ์˜ค๋ฅธ์ชฝ์—๋งŒ ๊ธฐ๋ฒ•์ด ๋ผ์–ด๋“ ๋‹ค




NAIVE โ€” ์ง์„  ๊ทธ๋Œ€๋กœ

ADVANCED โ€” ๊ฐ™์€ ํ๋ฆ„, ์‚ฌ์ด์— ๊ธฐ๋ฒ•

์˜คํ”„๋ผ์ธ

๋ฌธ์„œ

๋ฌธ์„œ

โ†“

โ†“


โ‘  ์ธ๋ฑ์‹ฑ ์ตœ์ ํ™” โ€” Parent-Child ยท Semantic ยท ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ยท ์ž„๋ฒ ๋”ฉ

โ†“

โ†“

๋ฒกํ„ฐ ์ธ๋ฑ์Šค

๋ฒกํ„ฐ ์ธ๋ฑ์Šค

์˜จ๋ผ์ธ

์งˆ๋ฌธ

์งˆ๋ฌธ

โ†“

โ†“


โ‘ก ์‚ฌ์ „ ๊ฒ€์ƒ‰ โ€” Rewriting ยท HyDE ยท Multi-Query ยท Fusion

โ†“

โ†“

๋ฒกํ„ฐ ๊ฒ€์ƒ‰

๋ฒกํ„ฐ ๊ฒ€์ƒ‰

โ†“

โ†“


โ‘ข ์‚ฌํ›„ ๊ฒ€์ƒ‰ โ€” Reranking ยท Compression ยท Citation

โ†“

โ†“

Top-K ์ฃผ์ž… โ†’ ์ƒ์„ฑ

Top-K ์ฃผ์ž… โ†’ ์ƒ์„ฑ



โ‘  1ํšŒ ์„ค์ • โ€” ์ถ”๊ฐ€ ์ฟผ๋ฆฌ ๋น„์šฉ ์—†์Œ
โ‘ก ๋งค ์ฟผ๋ฆฌ LLM ํ˜ธ์ถœ ์ถ”๊ฐ€
โ‘ข ์ฟผ๋ฆฌ๋‹น ๋ฆฌ๋žญ์ปค ยท LLM ํ˜ธ์ถœ ์ถ”๊ฐ€


takeaway

๊ฐ ๋‹จ๊ณ„๋Š” ๋…๋ฆฝ ์ ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค โ€” ๊ทธ๋ฆฌ๊ณ  ๋น„์šฉ์ด ๋‚ฎ์€ ์ธ๋ฑ์‹ฑ๋ถ€ํ„ฐ ์‹œ๋„ํ•˜๋Š” ๊ฒƒ์ด ์ •์„์ž…๋‹ˆ๋‹ค.

PART 1 ยท ์™œ Advanced RAG์ธ๊ฐ€

๋Ÿฌ๋‹ ์˜ˆ์ œ โ€” Naive vs Advanced

๊ฐ™์€ ์งˆ๋ฌธ "์˜ˆ์•ฝ๊ธˆ ํ™˜๋ถˆ ๊ทœ์ •์ด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?" โ€” ๊ธฐ๋ฒ• 3๊ฐœ๊ฐ€ ๋ฌธ์„œ๋“ค์˜ ์ˆœ์œ„๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฐ”๊พธ๋Š”๊ฐ€ (์˜ˆ์‹œ ์ˆ˜์น˜)




"์˜ˆ์•ฝ๊ธˆ ํ™˜๋ถˆ ๊ทœ์ •์ด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?"
restaurant-policy.pdf
์ •๋‹ต์€ ยง3 ์˜ˆ์•ฝ๊ธˆ ํ™˜๋ถˆ ๊ธฐ์ค€ ์ฒญํฌ



NAIVE โ€” ์งˆ๋ฌธ ๊ทธ๋Œ€๋กœ 1ํšŒ


3
restaurant-policy ยง3 ์ •๋‹ต

0.64


1
terms.pdf ยง9 ํฌ์ธํŠธ ํ™˜๊ธ‰ ์ ˆ์ฐจ

0.71


2
faq.pdf ๊ฒฐ์ œ ์˜ค๋ฅ˜ ์‹œ ์žฌ๊ฒฐ์ œ ์•ˆ๋‚ด

0.68



์ˆœ์œ„ ๋ณ€ํ™”

3์œ„ โ†’ 1์œ„ โ†‘

1์œ„ โ†’ 2์œ„ โ†“

2์œ„ โ†’ 3์œ„ โ†“



ADVANCED โ€” ์žฌ์ž‘์„ฑ ยท ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ยท ๋ฆฌ๋žญํ‚น


1
์ •๋‹ต

0.94


2

0.41


3

0.28



์™ผ์ชฝ์€ ์ž„๋ฒ ๋”ฉ ์œ ์‚ฌ๋„, ์˜ค๋ฅธ์ชฝ์€ ๋ฆฌ๋žญ์ปค ๊ด€๋ จ๋„ โ€” ์ ์ˆ˜ ์ถ•์€ ๋‹ค๋ฅด์ง€๋งŒ, ๋‹ต์„ ์ •ํ•˜๋Š” ๊ฒƒ์€ ์ˆœ์œ„์ž…๋‹ˆ๋‹ค


์ธ๋ฑ์‹ฑ ์ตœ์ ํ™”

Parent-Child ยท ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ยท ์ž„๋ฒ ๋”ฉ ์ „๋žต

PART 2 ยท ์ธ๋ฑ์‹ฑ ์ตœ์ ํ™”

์ธ๋ฑ์‹ฑ ์ตœ์ ํ™”

๊ฒ€์ƒ‰์ด ์‹œ์ž‘๋˜๊ธฐ ์ „์— ์Šน๋ถ€๋ฅผ ๋‚ด๋Š” ์˜คํ”„๋ผ์ธ ๋‹จ๊ณ„ โ€” ์ €์žฅ ๋ฐฉ๋ฒ•์ด ๊ฒ€์ƒ‰ ํ’ˆ์งˆ์„ ๊ฒฐ์ •

์ €์žฅ์„ ๋ฐ”๊พธ๋ฉด ๊ฒ€์ƒ‰์ด ๋ฐ”๋€๋‹ค

RAG ๋ชจ๋“ˆ์˜ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ์œ„์— ์–น๋Š” ์„ธ ๊ฐ€์ง€ ๊ฐœ์„  โ€” ์ฒญํ‚น ๊ตฌ์กฐ ยท ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ยท ์ž„๋ฒ ๋”ฉ

  • Parent-Child โ€” ์ž‘๊ฒŒ ์ฐพ๊ณ  ํฌ๊ฒŒ ์ฝ๊ธฐ
  • Semantic Chunking โ€” ์˜๋ฏธ ๊ฒฝ๊ณ„์—์„œ ๋ถ„ํ• 
  • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ โ€” ๊ฒ€์ƒ‰ ์ „ ๋ฒ”์œ„ ์ œํ•œ
  • ์ž„๋ฒ ๋”ฉ ์ „๋žต โ€” ๋ชจ๋ธยท์ฐจ์› ์„ ํƒ
takeaway

ํ•œ ๋ฒˆ ์„ค์ •ํ•˜๋ฉด ๋ชจ๋“  ์ฟผ๋ฆฌ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค โ€” ๊ฐ€์„ฑ๋น„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ๋‹จ๊ณ„์ด๋ฏ€๋กœ ํ•ญ์ƒ 1์ˆœ์œ„๋กœ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

PART 2 ยท ์ธ๋ฑ์‹ฑ ์ตœ์ ํ™”

Parent-Child ์ฒญํ‚น

์ฒญํ‚น์˜ ๋”œ๋ ˆ๋งˆ โ€” ์ž‘๊ฒŒ ์ž๋ฅด๋ฉด ๋ฌธ๋งฅ ์†์‹ค, ํฌ๊ฒŒ ์ž๋ฅด๋ฉด ๊ฒ€์ƒ‰ ํ๋ฆผ. ๊ทธ๋ž˜์„œ ๋‘˜ ๋‹ค ์“ฐ๋Š” ์ „๋žต

Child โ€” ๊ฒ€์ƒ‰์šฉ

์ž‘์€ ์ฒญํฌ (100~300์ž)

  • ์ •๋ฐ€ํ•œ ์˜๋ฏธ ๋งค์นญ โ€” ๊ฒ€์ƒ‰ ์ •ํ™•๋„ ๋†’์Œ
  • "์ทจ์†Œ ์ˆ˜์ˆ˜๋ฃŒ" ํ‚ค์›Œ๋“œ๊ฐ€ ๋“  ์ฒญํฌ๋ฅผ ์ •ํ™•ํžˆ ์กฐ์ค€
  • ID๋กœ ์ž์‹ ์˜ Parent๋ฅผ ์ฐธ์กฐ

๊ฒ€์ƒ‰์€ Child์—์„œ ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค โ€” ์ž‘์„์ˆ˜๋ก ์ฟผ๋ฆฌ์™€์˜ ์˜๋ฏธ ๋งค์นญ์ด ์„ ๋ช…ํ•ด์ง‘๋‹ˆ๋‹ค.

Parent โ€” ์‘๋‹ต์šฉ

ํฐ ์ฒญํฌ (1,000~2,000์ž)

  • ์กฐ๊ฑด ยท ๊ณ„์‚ฐ๋ฒ• ยท ์˜ˆ์™ธ๊ฐ€ ํ•จ๊ป˜ ๋‹ด๊ธด ๋ฌธ๋งฅ
  • LLM์— ์ „๋‹ฌ๋˜๋Š” ๋‹จ์œ„ โ€” ๋‹ต๋ณ€ ์™„์ „์„ฑ ํ™•๋ณด
  • ์•ž๋’ค ๋งฅ๋ฝ ํฌํ•จ โ€” ๋ฌธ์žฅ ์ค‘๊ฐ„ ์ ˆ๋‹จ ์—†์Œ

๋งค์นญ๋œ Child์˜ Parent๋ฅผ LLM์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค โ€” ์ •๋ฐ€ ๊ฒ€์ƒ‰๊ณผ ํ’๋ถ€ํ•œ ๋ฌธ๋งฅ์„ ๋™์‹œ์— ์–ป์Šต๋‹ˆ๋‹ค.

Bedrock Knowledge Bases Hierarchical Chunking

Knowledge Base์—์„œ Hierarchical Chunking์„ ์„ ํƒํ•˜๋ฉด ์ฝ”๋“œ ์—†์ด ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค โ€” Parent 1,500 ยท Child 300 ํ† ํฐ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๊ด€๋ฆฌํ˜• ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ปค์Šคํ…€ ๋ถ„ํ•  ๋กœ์ง์ด ํ•„์š”ํ•  ๋•Œ๋งŒ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์„ธ์š”.

PART 2 ยท ์ธ๋ฑ์‹ฑ ์ตœ์ ํ™”

Semantic Chunking โ€” ์˜๋ฏธ ๊ฒฝ๊ณ„์—์„œ ๋ถ„ํ• 

๋ฌธ์žฅ ์‚ฌ์ด ์ž„๋ฒ ๋”ฉ ์œ ์‚ฌ๋„๊ฐ€ ๊ธ‰๋ฝํ•˜๋Š” ์ง€์  = ์ฃผ์ œ์˜ ๊ฒฝ๊ณ„ โ€” ๊ธฐ๊ณ„์  ๋ถ„ํ• ์ด ๋†“์น˜๋Š” ๋ฌธ๋งฅ ๋ณด์กด

๊ณ ์ • ํฌ๊ธฐ ์ฒญํ‚น

N์ž๋งˆ๋‹ค ๊ธฐ๊ณ„์  ๋ถ„ํ• 

  • ๊ตฌํ˜„ ๊ฐ„๋‹จ โ€” ์ธ๋ฑ์‹ฑ ๋น„์šฉ ์ตœ์†Œ
  • ๋ฌธ์žฅ ยท ์ฃผ์ œ ์ค‘๊ฐ„์—์„œ ์ž˜๋ฆด ์œ„ํ—˜
  • ํ•ญ๋ชฉ์ด ๋…๋ฆฝ์ ์ธ FAQ์— ์ ํ•ฉ
  • ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋จผ์ € ์‹œ๋„ํ•˜๋Š” ์ถœ๋ฐœ์ 

์งง๊ณ  ๋…๋ฆฝ์ ์ธ ๋ฌธ์„œ๋ผ๋ฉด ์ด๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค โ€” ๊ฒ€์ƒ‰ ํ’ˆ์งˆ ๋ฌธ์ œ๊ฐ€ ์ธก์ •๋  ๋•Œ๋งŒ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๊ฐ‘๋‹ˆ๋‹ค.

Semantic Chunking

์œ ์‚ฌ๋„ ๋ณ€ํ™”์ ์—์„œ ๋ถ„ํ• 

  • ๋ฌธ์žฅ ์ž„๋ฒ ๋”ฉ ์œ ์‚ฌ๋„๊ฐ€ ๊ธ‰๋ฝํ•˜๋Š” ์ง€์ ์—์„œ ์ ˆ๋‹จ
  • ์ฃผ์ œ ๋‹จ์œ„ ๋ณด์กด โ€” ๊ธด ๋‹จ๋ฝ ๊ธฐ์ˆ  ๋ฌธ์„œ์— ์ ํ•ฉ
  • ๋ชจ๋“  ๋ฌธ์žฅ์„ ์‚ฌ์ „ ์ž„๋ฒ ๋”ฉ โ€” ์ธ๋ฑ์‹ฑ ๋น„์šฉ ์ฆ๊ฐ€
  • ์กฐํ•ญ ๊ฒฝ๊ณ„๊ฐ€ ๋šœ๋ ทํ•œ ๋ฒ•๋ฅ  ยท ์ •์ฑ… ๋ฌธ์„œ์— ํšจ๊ณผ

์ธ๋ฑ์‹ฑ 1ํšŒ ๋น„์šฉ์„ ๋‚ด๊ณ  ๊ฒ€์ƒ‰ ํ’ˆ์งˆ์„ ์‚ฌ๋Š” ์„ ํƒ์ž…๋‹ˆ๋‹ค โ€” ๋ฌธ์„œ ๊ฐฑ์‹ ์ด ์žฆ์œผ๋ฉด ๋น„์šฉ์ด ๋ฐ˜๋ณต๋˜๋Š” ์ ์„ ๊ฐ์•ˆํ•˜์„ธ์š”.

takeaway

๋ฌธ์„œ ์œ ํ˜•์ด ์ „๋žต์„ ์ •ํ•ฉ๋‹ˆ๋‹ค โ€” ๊ธฐ์ˆ  ๋ฌธ์„œ๋Š” Parent-Child, FAQ๋Š” ๊ณ ์ • ํฌ๊ธฐ, ๋ฒ•๋ฅ ยท์ •์ฑ…์€ Semantic + ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, ํ‘œ ๋ฌธ์„œ๋Š” Data Automation์ด ๋งž์Šต๋‹ˆ๋‹ค.

PART 2 ยท ์ธ๋ฑ์‹ฑ ์ตœ์ ํ™”

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ ๋ฒ”์œ„ ์ขํžˆ๊ธฐ

๋ฒกํ„ฐ ์œ ์‚ฌ๋„๋Š” "2026๋…„ ๋ฉ”๋‰ด"์™€ "2025๋…„ ๊ตฌ ๋ฉ”๋‰ด"๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ๋ชปํ•จ โ€” ๊ทธ๋ž˜์„œ ํ•„ํ„ฐ๊ฐ€ ๋จผ์ €

ํ•ต์‹ฌ ํฌ์ธํŠธ

.metadata.json
S3์— ๊ฐ ๋ฌธ์„œ์™€ ํ•จ๊ป˜ ์—…๋กœ๋“œ โ€” Knowledge Base๊ฐ€ ํ•„ํ„ฐ ํ‚ค๋ฅผ ์ž๋™ ์ธ๋ฑ์‹ฑ
ํ•„์ˆ˜ ํ‚ค 3์ข…
category(์œ ํ˜•) ยท effective_date(์œ ํšจ์ผ) ยท source(์ถœ์ฒ˜)
์—ฐ์‚ฐ์ž
equals ยท notEquals ยท greaterThan ยท in ยท startsWith ๋“ฑ
์„ค๊ณ„ ์›์น™
ํ‚ค 3~5๊ฐœ ์ œํ•œ, ๋‚ ์งœ๋Š” ISO 8601, ์ค‘์ฒฉ ์—†์ด 1depth ํ‰ํƒ„ํ™”

์ฝ”๋“œ

python
import boto3
bedrock_rt = boto3.client("bedrock-agent-runtime", region_name="us-east-1")

# ๋ฒกํ„ฐ ๊ฒ€์ƒ‰ ์ „์— ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ ๋Œ€์ƒ ๋ฒ”์œ„๋ฅผ ์ขํžŒ๋‹ค
response = bedrock_rt.retrieve(
    knowledgeBaseId="KB-RESTAURANT-001",
    retrievalQuery={"text": "์ดํƒˆ๋ฆฌ์•ˆ ์ฝ”์Šค ๊ฐ€๊ฒฉ"},
    retrievalConfiguration={"vectorSearchConfiguration": {
        "numberOfResults": 5,
        "filter": {"andAll": [
            {"equals": {"key": "category", "value": "restaurant"}},
            {"equals": {"key": "cuisine", "value": "์ดํƒˆ๋ฆฌ์•ˆ"}},
        ]},
    }},
)
PART 2 ยท ์ธ๋ฑ์‹ฑ ์ตœ์ ํ™”

์ž„๋ฒ ๋”ฉ ์ „๋žต โ€” ๋ชจ๋ธ๊ณผ ์ฐจ์›

์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ์ด ๋ฒกํ„ฐ ๊ณต๊ฐ„์˜ ํ’ˆ์งˆ์„ ๊ฒฐ์ • โ€” ์–ธ์–ด ๊ตฌ์„ฑ๊ณผ ์ž…๋ ฅ ๊ธธ์ด๊ฐ€ ๊ฐˆ๋ฆผ๊ธธ

์„ ํƒ๊ณผ ์ตœ์ ํ™”

ํ•œ๊ตญ์–ด ์œ„์ฃผ
Titan Embed v2๊ฐ€ ์ถœ๋ฐœ์  โ€” 8,192ํ† ํฐ ์ž…๋ ฅ, AWS ํ†ตํ•ฉ
๋‹ค๊ตญ์–ด ํ˜ผํ•ฉ
Cohere Multilingual v3 โ€” 512ํ† ํฐ ์ž…๋ ฅ ํ•œ๋„ ์ฃผ์˜
์ฐจ์› ์ถ•์†Œ
1,024 โ†’ 256์œผ๋กœ ์ €์žฅยท๊ฒ€์ƒ‰ ๋น„์šฉ ์ ˆ๊ฐ (์•ฝ๊ฐ„์˜ ์ •ํ™•๋„ ์†์‹ค๊ณผ ๊ตํ™˜)
์ธ๋ฑ์‹ฑ ์ตœ์ ํ™”
๋ฐฐ์น˜ ์ž„๋ฒ ๋”ฉ ยท ๋ฌธ์„œ ํ•ด์‹œ ์บ์‹ฑ์œผ๋กœ ์žฌ์ž„๋ฒ ๋”ฉ ๋ฐฉ์ง€ ยท ์ฝ”์‚ฌ์ธ ์‚ฌ์šฉ ์‹œ ์ •๊ทœํ™”

๋ชจ๋ธ ๋น„๊ต

๋ชจ๋ธ์ฐจ์›์ตœ๋Œ€ ์ž…๋ ฅ๊ฐ•์ 
Titan Embed v21,0248,192 ํ† ํฐAWS ํ†ตํ•ฉ ยท ๋ฒ”์šฉ ยท ์ƒ๋Œ€์ ์œผ๋กœ ์ €๋ ด
Cohere Multilingual v31,024512 ํ† ํฐ๋‹ค๊ตญ์–ด ํ˜ผํ•ฉ ๋ฌธ์„œ์— ์ตœ์ 

์‚ฌ์ „ ๊ฒ€์ƒ‰

Query Rewriting ยท HyDE ยท Multi-Query ยท RAG Fusion

PART 3 ยท ์‚ฌ์ „ ๊ฒ€์ƒ‰

์‚ฌ์ „ ๊ฒ€์ƒ‰

์‚ฌ์šฉ์ž ์งˆ๋ฌธ์„ ๊ทธ๋Œ€๋กœ ๊ฒ€์ƒ‰ํ•˜์ง€ ์•Š์Œ โ€” LLM์ด ์ฟผ๋ฆฌ๋ฅผ ๋ณ€ํ™˜ํ•œ ๋’ค ๊ฒ€์ƒ‰

๊ฒ€์ƒ‰ ์ „์— ์ฟผ๋ฆฌ๋ฅผ ๊ณ ์นœ๋‹ค

์ด๋ฆ„์€ ๋งŽ์ง€๋งŒ ๊ตฌํ˜„์€ ํ•˜๋‚˜ โ€” ํ”„๋กฌํ”„ํŠธ ํ…œํ”Œ๋ฆฟ๊ณผ LLM ํ˜ธ์ถœ์ž…๋‹ˆ๋‹ค. ์ง€์‹œ๋ฌธ๋งŒ ๋ฐ”๊พธ๋ฉด ๋‹ค๋ฅธ ๊ธฐ๋ฒ•์ด ๋ฉ๋‹ˆ๋‹ค

  • Query Rewriting โ€” ๊ตฌ์–ด์ฒด๋ฅผ ๊ฒ€์ƒ‰์–ด๋กœ
  • HyDE โ€” ๊ฐ€์ƒ ๋‹ต๋ณ€์œผ๋กœ ๊ฒ€์ƒ‰
  • Multi-Query ๊ฐ€์กฑ โ€” ๊ด€์  ๋ถ„ํ•ดยท์ถ”์ƒํ™”ยท์ฃผ์ œ ๋ถ„ํ•ด
  • RAG Fusion โ€” ์—ฌ๋Ÿฌ ๊ฒฐ๊ณผ๋ฅผ RRF๋กœ ์œตํ•ฉ
takeaway

๋งค ์ฟผ๋ฆฌ๋งˆ๋‹ค LLM ํ˜ธ์ถœ์ด ์ถ”๊ฐ€๋˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค โ€” ํšจ๊ณผ๋Š” ํฌ์ง€๋งŒ ๋น„์šฉ๋„ ์ปค์„œ, ์ธ๋ฑ์‹ฑยท์‚ฌํ›„ ๊ฒ€์ƒ‰์„ ๋จผ์ € ์‹œ๋„ํ•œ ๋’ค ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

PART 3 ยท ์‚ฌ์ „ ๊ฒ€์ƒ‰

Query Rewriting

"ํ•ด์•ฝํ•˜๋ฉด ๋ˆ ๋‚ด์•ผ ํ•ด?" โ†’ "์˜ˆ์•ฝ ์ทจ์†Œ ์ˆ˜์ˆ˜๋ฃŒ ์ •์ฑ…" โ€” ๊ฐ€์žฅ ๊ฐ’์‹ธ๊ณ  ํ™•์‹คํ•œ ์ฒซ ์ฒ˜๋ฐฉ

ํ•ต์‹ฌ ํฌ์ธํŠธ

REWRITE_PROMPT
์ง€์‹œ๋ฌธ์ด ๊ณง ๊ธฐ๋ฒ• โ€” ๊ตฌ์–ด์ฒดโ†’๊ณต์‹ ์šฉ์–ด, ๋Œ€๋ช…์‚ฌโ†’๊ตฌ์ฒด ๋ช…์‚ฌ
str(result)
AgentResult์—์„œ ํ…์ŠคํŠธ๋ฅผ ๊บผ๋‚ด๋Š” ์ •๋ณธ โ€” message๋Š” dict์ž…๋‹ˆ๋‹ค.
chat_history
์ตœ๊ทผ 3ํ„ด์„ ํ•จ๊ป˜ ์ฃผ๋ฉด "๊ทธ๊ฑฐ ์–ผ๋งˆ์•ผ?" ๊ฐ™์€ ๋Œ€๋ช…์‚ฌ ํ•ด์†Œ
@tool
Agentic RAG ๋ชจ๋“ˆ์˜ ์—์ด์ „ํŠธ์— ๊ทธ๋Œ€๋กœ ์žฅ์ฐฉ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ

์ฝ”๋“œ

python
from strands import Agent, tool
from strands.models import BedrockModel

model = BedrockModel(model_id="us.anthropic.claude-sonnet-4-6")

REWRITE_PROMPT = """์‚ฌ์šฉ์ž ์งˆ๋ฌธ์„ ๊ฒ€์ƒ‰์— ์ตœ์ ํ™”๋œ ์ฟผ๋ฆฌ๋กœ ๋ณ€ํ™˜ํ•˜์„ธ์š”.
- ๊ตฌ์–ด์ฒด๋ฅผ ๊ณต์‹ ์šฉ์–ด๋กœ, ๋Œ€๋ช…์‚ฌ๋ฅผ ๊ตฌ์ฒด์  ๋ช…์‚ฌ๋กœ
- ๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ๋งŒ ์ถœ๋ ฅ (์„ค๋ช… ์—†์ด)"""

# ์žฌ์ž‘์„ฑ ์—์ด์ „ํŠธ๋ฅผ ๋„๊ตฌ๋กœ โ€” ์ถœ๋ ฅ ํ…์ŠคํŠธ๋Š” str(result)๋กœ ์ถ”์ถœ
@tool
def rewrite_query(query: str) -> str:
    """์‚ฌ์šฉ์ž ์งˆ๋ฌธ์„ ๊ฒ€์ƒ‰ ์ตœ์  ์ฟผ๋ฆฌ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค."""
    rewriter = Agent(model=model, system_prompt=REWRITE_PROMPT)
    return str(rewriter(query))

# "ํ•ด์•ฝํ•˜๋ฉด ๋ˆ ๋‚ด์•ผ ํ•ด?" โ†’ "์˜ˆ์•ฝ ์ทจ์†Œ ์ˆ˜์ˆ˜๋ฃŒ ์ •์ฑ…"
PART 3 ยท ์‚ฌ์ „ ๊ฒ€์ƒ‰

HyDE โ€” ๊ฐ€์ƒ ๋‹ต๋ณ€์œผ๋กœ ๊ฒ€์ƒ‰

HyDE(Hypothetical Document Embeddings) โ€” ๋ฌธ์„œ๋ฅผ ๋‹ฎ์€ ๊ฐ€์ƒ ๋‹ต๋ณ€์„ ๋งŒ๋“ค์–ด, ์งˆ๋ฌธ ๋Œ€์‹  ๊ทธ ์ž„๋ฒ ๋”ฉ์œผ๋กœ ๊ฒ€์ƒ‰

ํ•ต์‹ฌ ํฌ์ธํŠธ

ํ˜•์‹ ๊ฐญ ํ•ด์†Œ
์งง์€ ์งˆ๋ฌธ โ†” ๊ธด ๋ฌธ์„œ โ€” ๋‹ต๋ณ€ ์ž„๋ฒ ๋”ฉ์ด ๋ฌธ์„œ์™€ ๋” ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.
LLM 2ํšŒ
๊ฐ€์ƒ ๋‹ต๋ณ€ ์ƒ์„ฑ + ์ตœ์ข… ์‘๋‹ต โ€” ๋ ˆ์ดํ„ด์‹œ ๋น„์šฉ์„ ๊ฐ์ˆ˜ํ•˜๋Š” ๊ธฐ๋ฒ•
์ ํ•ฉ
FAQ ์Šคํƒ€์ผ ๋ฌธ์„œ, ์ „๋ฌธ ์šฉ์–ด ๋ฌธ์„œ๋ฅผ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒ€์ƒ‰ํ•  ๋•Œ
์—ญํšจ๊ณผ
์ˆ˜์น˜ยท๋‚ ์งœยท์ตœ์‹  ๋ฐ์ดํ„ฐ ์งˆ๋ฌธ โ€” ๊ฐ€์ƒ ๋‹ต๋ณ€์ด ํ™˜๊ฐ ๋…ธ์ด์ฆˆ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ

python
import boto3
bedrock = boto3.client("bedrock-runtime", region_name="us-east-1")

# 1๋‹จ๊ณ„ โ€” ๊ฐ€์ƒ ๋‹ต๋ณ€ ์ƒ์„ฑ (์ •ํ™•ํ•  ํ•„์š” ์—†์Œ, ํ˜•์‹๋งŒ ๋ฌธ์„œ์™€ ๋‹ฎ์œผ๋ฉด ๋จ)
def hypothetical_answer(query: str) -> str:
    response = bedrock.converse(
        modelId="us.anthropic.claude-sonnet-4-6",
        messages=[{"role": "user", "content": [
            {"text": f"๋‹ค์Œ ์งˆ๋ฌธ์— ์ƒ์„ธํžˆ ๋‹ต๋ณ€ํ•˜์„ธ์š” (๋ถ€์ •ํ™•ํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค): {query}"}]}],
        inferenceConfig={"maxTokens": 200, "temperature": 0},
    )
    return response["output"]["message"]["content"][0]["text"]

# 2๋‹จ๊ณ„ โ€” ์งˆ๋ฌธ ๋Œ€์‹  ๊ฐ€์ƒ ๋‹ต๋ณ€์˜ ์ž„๋ฒ ๋”ฉ์œผ๋กœ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰
docs = vector_search(embed(hypothetical_answer("์ดํƒˆ๋ฆฌ์•ˆ ์ฝ”์Šค ๊ฐ€๊ฒฉ?")))
PART 3 ยท ์‚ฌ์ „ ๊ฒ€์ƒ‰

์งˆ๋ฌธ์„ ์ชผ๊ฐœ๋Š” ์„ธ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•

๋ชจํ˜ธํ•˜๋ฉด ๊ด€์ ์„ ๋Š˜๋ฆฌ๊ณ , 0๊ฑด์ด๋ฉด ๋„“ํžˆ๊ณ , ์„ž์˜€์œผ๋ฉด ๋ถ„ํ•ด โ€” ๋ฌธ์ œ๋งˆ๋‹ค ๋‹ค๋ฅธ ์ชผ๊ฐœ๊ธฐ

Step-back

์ƒ์œ„ ๊ฐœ๋… ์ถ”์ƒํ™”

  • "ํŠธ๋ผํ† ๋ฆฌ์•„ ๋ฒจ๋ผ ๋Ÿฐ์น˜ ํŒŒ์Šคํƒ€ ๊ฐ€๊ฒฉ" โ†’ "์ดํƒˆ๋ฆฌ์•ˆ ๋ฉ”๋‰ด ๊ฐ€๊ฒฉ ์ •์ฑ…"
  • ํ•ต์‹ฌ ์˜๋„๋ฅผ ์œ ์ง€ํ•œ ์ฑ„ ๊ฒ€์ƒ‰ ๋ฒ”์œ„ ํ™•๋Œ€
  • ๋„ˆ๋ฌด ๊ตฌ์ฒด์ ์ธ ์งˆ๋ฌธ์˜ 0๊ฑด ๋ฌธ์ œ ํ•ด๊ฒฐ

์–ธ์ œ โ€” ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ 0๊ฑด์— ๊ฐ€๊นŒ์šธ ๋•Œ

Sub-Query

๋…๋ฆฝ ์ฃผ์ œ ๋ถ„ํ•ด

  • "์˜ˆ์•ฝ ๋ฐ”๊พธ๋ฉด์„œ ์ธ์› ์ถ”๊ฐ€ ๋ผ?" โ†’ ๋…๋ฆฝ ์งˆ๋ฌธ 2๊ฐœ
  • ํ•˜์œ„ ์งˆ๋ฌธ๋ณ„๋กœ ๊ฒ€์ƒ‰ โ†’ ๊ฒฐ๊ณผ ํ•ฉ์‚ฐ โ†’ LLM ์ „๋‹ฌ
  • Multi-Query์™€ ๋‹ค๋ฆ„ โ€” ํ‘œํ˜„ ๋ณ€ํ˜•์ด ์•„๋‹ˆ๋ผ ์ฃผ์ œ ๋ถ„๋ฆฌ

์–ธ์ œ โ€” ์งˆ๋ฌธ์— ๋…๋ฆฝ ์ฃผ์ œ๊ฐ€ 2๊ฐœ ์ด์ƒ ์„ž์˜€์„ ๋•Œ

takeaway

์…‹ ๋‹ค ํ”„๋กฌํ”„ํŠธ ์ง€์‹œ๋ฌธ์˜ ์ฐจ์ด์ผ ๋ฟ์ž…๋‹ˆ๋‹ค โ€” "๋‹ค๋ฅธ ๊ด€์ ์œผ๋กœ" ยท "์ƒ์œ„ ๊ฐœ๋…์œผ๋กœ" ยท "๋…๋ฆฝ ์งˆ๋ฌธ์œผ๋กœ" ๋ถ„ํ•ด ๋ฐฉํ–ฅ๋งŒ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

PART 3 ยท ์‚ฌ์ „ ๊ฒ€์ƒ‰

RAG Fusion โ€” ๋ถ„ํ•ด์˜ ์™„์„ฑ

์—ฌ๋Ÿฌ ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋‹จ์ˆœ ํ•ฉ์ง‘ํ•ฉ์ด ์•„๋‹ˆ๋ผ ์ˆœ์œ„ ์œตํ•ฉ์œผ๋กœ โ€” ๊ณตํ†ต ์ƒ์œ„ ๋ฌธ์„œ๊ฐ€ ์ง„์งœ ๊ด€๋ จ ๋ฌธ์„œ

takeaway

์งˆ๋ฌธ์„ ๊ด€์  ์ฟผ๋ฆฌ๋กœ ๋ถ„ํ•ด(Multi-Query)ํ•œ ๋’ค, ์ ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ์ˆœ์œ„๋กœ ์œตํ•ฉํ•ฉ๋‹ˆ๋‹ค โ€” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰๋„ ๊ฐ™์€ ์œตํ•ฉ๊ธฐ RRF๋ฅผ ์”๋‹ˆ๋‹ค.

ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰

๋ฒกํ„ฐ + ํ‚ค์›Œ๋“œ ยท RRF ยท ์ ์ˆ˜ ์ „๋žต

PART 4 ยท ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰

ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰

๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ๋ฒกํ„ฐ์™€ ํ‚ค์›Œ๋“œ๋กœ ๋™์‹œ์— ๊ฒ€์ƒ‰ํ•˜๊ณ , ๋‘ ์ˆœ์œ„๋ฅผ ํ•˜๋‚˜๋กœ ์œตํ•ฉ

์˜๋ฏธ + ์šฉ์–ด

๋ฒกํ„ฐ๋Š” "ํŒŒ์Šคํƒ€์ง‘"๊ณผ "์ดํƒˆ๋ฆฌ์•ˆ ๋ ˆ์Šคํ† ๋ž‘"์„ ์ž‡๊ณ , BM25๋Š” "SKU-12345"๋ฅผ ์ •ํ™•ํžˆ ์งš์Šต๋‹ˆ๋‹ค

  • ๋ฒกํ„ฐ โ€” ์˜๋ฏธ ์œ ์‚ฌ (๋™์˜์–ดยท์œ ์‚ฌ ํ‘œํ˜„)
  • BM25 โ€” ์ •ํ™• ์šฉ์–ด (์ฝ”๋“œยท๊ณ ์œ ๋ช…์‚ฌ)
  • RRF โ€” ์ˆœ์œ„ ๊ธฐ๋ฐ˜ ์œตํ•ฉ
  • Bedrock Knowledge Bases โ€” HYBRID ์˜ต์…˜ ๋‚ด์žฅ
takeaway

Bedrock Knowledge Bases๋Š” overrideSearchType: "HYBRID" ํ•œ ์ค„์ด๋ฉด ๋ โ€” ๊ฒฐํ•ฉ ์ „๋žต์„ ์ง์ ‘ ๊ณ ๋ฅด๋Š” ๊ฒƒ์€ ์ปค์Šคํ…€ OpenSearch ํŒŒ์ดํ”„๋ผ์ธ์ผ ๋•Œ์ž…๋‹ˆ๋‹ค.

PART 4 ยท ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰

๋ฒกํ„ฐ ๊ฒ€์ƒ‰์ด ๋†“์น˜๋Š” ์ฟผ๋ฆฌ

์˜๋ฏธ์— ๊ฐ•ํ•˜๊ณ  ์šฉ์–ด์— ์•ฝํ•œ ๋ฒกํ„ฐ โ€” ์ •ํ™•ํ•œ ๋ฌธ์ž์—ด ๋งค์นญ์€ ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰์˜ ์˜์—ญ

์ฟผ๋ฆฌ ์œ ํ˜•๋ฒกํ„ฐ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฌธ์ œ
์ œํ’ˆ ์ฝ”๋“œ (SKU-12345)์œ ์‚ฌํ•œ ์„ค๋ช… ๋ฌธ์„œ ๋ฐ˜ํ™˜์ •ํ™•ํ•œ ์ฝ”๋“œ ๋งค์นญ ์‹คํŒจ
๊ณ ์œ ๋ช…์‚ฌ (Claude Sonnet)๊ด€๋ จ AI ๋ฌธ์„œ ๋ฐ˜ํ™˜๋‹ค๋ฅธ ๋ชจ๋ธ ๋ฌธ์„œ๋„ ์„ž์ž„
์—๋Ÿฌ ๋ฉ”์‹œ์ง€ (AccessDenied)IAM ๊ด€๋ จ ๋ฌธ์„œ ๋ฐ˜ํ™˜์ •ํ™•ํ•œ ์—๋Ÿฌ ์ฝ”๋“œ ๋งค์นญ ์•ฝํ•จ
๋‚ ์งœ ยท ๋ฒ„์ „ (2026-07-01)๋ฌด๊ด€ํ•œ ๋ฌธ์„œ ๋ฐ˜ํ™˜์ˆซ์ž๋Š” ๋ฒกํ„ฐ ๊ณต๊ฐ„์—์„œ ์˜๋ฏธ๊ฐ€ ์—†์Œ
takeaway

๊ฒฐํ•ฉํ•˜๋ฉด ์„œ๋กœ์˜ ์•ฝ์ ์„ ๋ณด์™„ํ•ฉ๋‹ˆ๋‹ค โ€” ์˜๋ฏธ๋„ ๋งž๊ณ  ์šฉ์–ด๋„ ๋งž๋Š” ๋ฌธ์„œ๊ฐ€ ์–‘์ชฝ ์ˆœ์œ„ ๋ชจ๋‘์—์„œ ์ƒ์œ„์— ์˜ค๋ฆ…๋‹ˆ๋‹ค.

PART 4 ยท ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰

๊ฐ™์€ ์งˆ๋ฌธ, ๋‘ ๊ฒ€์ƒ‰๊ธฐ

"์˜ˆ์•ฝ๊ธˆ ํ™˜๋ถˆ ๊ทœ์ •์ด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?" โ€” ์˜๋ฏธ๋กœ ์ฐพ๋Š” ๋ฒกํ„ฐ์™€ "ํ™˜๋ถˆ" ์šฉ์–ด๋กœ ์ฐพ๋Š” BM25๋ฅผ ์ˆœ์œ„๋กœ ๋ณ‘ํ•ฉ





๋ฒกํ„ฐ ๊ฒ€์ƒ‰ โ€” ์˜๋ฏธ ์œ ์‚ฌ

1terms.pdf ยง9 ํฌ์ธํŠธ ํ™˜๊ธ‰ ์ ˆ์ฐจ

2faq.pdf ๊ฒฐ์ œ ์˜ค๋ฅ˜ ์‹œ ์žฌ๊ฒฐ์ œ ์•ˆ๋‚ด

3restaurant-policy.pdf ยง3 ์˜ˆ์•ฝ๊ธˆ ํ™˜๋ถˆ ๊ธฐ์ค€ ์ •๋‹ต

์งˆ๋ฌธ ํ˜•์‹๊ณผ ์กฐํ•ญ ๋ฌธ์ฒด์˜ ๊ฐญ โ€” ์ •๋‹ต์ด 3์œ„ (์˜ˆ์‹œ ์ˆœ์œ„)



BM25 โ€” "ํ™˜๋ถˆ" ์ •ํ™• ๋งค์นญ

1restaurant-policy.pdf ยง3 ์˜ˆ์•ฝ๊ธˆ ํ™˜๋ถˆ ๊ธฐ์ค€ ์ •๋‹ต

2restaurant-policy.pdf ยง1 ํ™˜๋ถˆ ์šฉ์–ด ์ •์˜

"ํ™˜๋ถˆ"์ด ๋“  ๋ฌธ์„œ๋งŒ โ€” ์šฉ์–ด๊ฐ€ ์žˆ์œผ๋ฉด ํ™•์‹ค, ์—†์œผ๋ฉด 0๊ฑด (์˜ˆ์‹œ ์ˆœ์œ„)




โ†“
RRF ๋ณ‘ํ•ฉ ยท k=60
โ†“


๋ณ‘ํ•ฉ ์ˆœ์œ„ โ€” ์–‘์ชฝ ์ƒ์œ„๊ฐ€ ์ตœ์ƒ์œ„๋กœ

1restaurant-policy.pdf ยง3 ์˜ˆ์•ฝ๊ธˆ ํ™˜๋ถˆ ๊ธฐ์ค€๋ฒกํ„ฐ 3์œ„ + BM25 1์œ„ = 1/63 + 1/61 = 0.0323

2terms.pdf ยง9 ํฌ์ธํŠธ ํ™˜๊ธ‰ ์ ˆ์ฐจ๋ฒกํ„ฐ 1์œ„๋ฟ = 1/61 = 0.0164

โ€ฆ ํ•œ์ชฝ ๋ฆฌ์ŠคํŠธ์—๋งŒ ์žˆ๋˜ ๋‚˜๋จธ์ง€ ๋ฌธ์„œ๋Š” ๊ทธ ์•„๋ž˜๋กœ โ€” ์ ์ˆ˜ ์Šค์ผ€์ผ์„ ๋งž์ถœ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค



takeaway

์ ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ์ˆœ์œ„์˜ ์—ญ์ˆ˜๋ฅผ ํ•ฉ์‚ฐํ–ˆ์„ ๋ฟ์ž…๋‹ˆ๋‹ค โ€” ์Šค์ผ€์ผ์ด ๋‹ค๋ฅธ ๋‘ ์ ์ˆ˜๋ฅผ ๋ณ€ํ™˜ ์—†์ด ์œตํ•ฉํ•ฉ๋‹ˆ๋‹ค.

PART 4 ยท ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰

RRF (Reciprocal Rank Fusion)

๋ฒกํ„ฐ ์ ์ˆ˜๋Š” 0~1, BM25๋Š” 0~๋ฌดํ•œ๋Œ€ โ€” ์ ์ˆ˜ ๋Œ€์‹  ์ˆœ์œ„๋ฅผ ์“ฐ๋ฉด ์‚ฌ๋ผ์ง€๋Š” ์Šค์ผ€์ผ ๋ฌธ์ œ

ํ•ต์‹ฌ ํฌ์ธํŠธ

์ˆœ์œ„ ๊ธฐ๋ฐ˜
์ ์ˆ˜ ์Šค์ผ€์ผ ๋ถˆ์ผ์น˜๋ฅผ ์™„์ „ํžˆ ํšŒํ”ผ โ€” ์ •๊ทœํ™” ๋ถˆํ•„์š”
k=60
ํ‘œ์ค€๊ฐ’ โ€” ๋†’์ผ์ˆ˜๋ก ์ˆœ์œ„ ์ฐจ์ด์˜ ์˜ํ–ฅ๋ ฅ์ด ์™„ํ™”๋ฉ๋‹ˆ๋‹ค.
์–‘์ชฝ ์ƒ์œ„ = ์ตœ์ƒ์œ„
ํ•œ์ชฝ์—์„œ๋งŒ ๋†’์€ ๋ฌธ์„œ๋Š” ๋ณด์™„์ ์œผ๋กœ ํฌํ•จ๋˜๋˜ ์ˆœ์œ„ ํ•˜๋ฝ
์žฌ์‚ฌ์šฉ
RAG Fusion(๋‹ค์ค‘ ์ฟผ๋ฆฌ)๊ณผ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ(๋ฒกํ„ฐ+ํ‚ค์›Œ๋“œ) ๊ณต์šฉ ์œตํ•ฉ๊ธฐ

์ฝ”๋“œ

python
# RRF โ€” ์ ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ์ˆœ์œ„์˜ ์—ญ์ˆ˜๋ฅผ ํ•ฉ์‚ฐํ•œ๋‹ค (์ •๊ทœํ™” ๋ถˆํ•„์š”)
def reciprocal_rank_fusion(results_list, k=60):
    scores = {}
    for results in results_list:
        for rank, doc in enumerate(results):
            scores[doc.id] = scores.get(doc.id, 0) + 1 / (k + rank + 1)
    return sorted(scores.items(), key=lambda x: x[1], reverse=True)

# ๋ฒกํ„ฐ 1์œ„ + ํ‚ค์›Œ๋“œ 3์œ„ = 1/61 + 1/63 โ€” ์–‘์ชฝ ์ƒ์œ„ ๋ฌธ์„œ๊ฐ€ ์ตœ์ƒ์œ„๋กœ
fused = reciprocal_rank_fusion([vector_results, keyword_results])
PART 4 ยท ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰

์ ์ˆ˜ ๊ฒฐํ•ฉ ์ „๋žต ๋น„๊ต

RRF๊ฐ€ ๊ธฐ๋ณธ๊ฐ’ โ€” ๊ฐ€์ค‘์น˜ ํŠœ๋‹์€ ํ‰๊ฐ€ ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์ธ ๋’ค์—๋งŒ

์ „๋žต๋ฐฉ์‹์žฅ์ ์ ํ•ฉ
RRF์ˆœ์œ„ ์—ญ์ˆ˜ ํ•ฉ์‚ฐ์ •๊ทœํ™” ๋ถˆํ•„์š” ยท ํŠœ๋‹ ์—†์ด ๋ฒ”์šฉ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ (๊ธฐ๋ณธ๊ฐ’)
Weighted Sum๋ฒกํ„ฐ 0.7 + BM25 0.3๋„๋ฉ”์ธ ๋งž์ถค ๊ฐ€๋ŠฅA/B ํ…Œ์ŠคํŠธ๋กœ ์ตœ์ ํ™”ํ•  ๋•Œ
Normalizationmin-max ์ •๊ทœํ™” ํ›„ ํ•ฉ์‚ฐ์ ์ˆ˜ ํฌ๊ธฐ ์ •๋ณด ๋ณด์กด์ ์ˆ˜ ์ฐจ์ด๊ฐ€ ์˜๋ฏธ ์žˆ์„ ๋•Œ
ํŠœ๋‹ ์—†๋Š” Weighted Sum ๊ธˆ์ง€

BM25 ์ ์ˆ˜๊ฐ€ ๋ฒกํ„ฐ ์ ์ˆ˜๋ณด๋‹ค ํ›จ์”ฌ ํด ์ˆ˜ ์žˆ์–ด 0.5:0.5๋กœ ์‹œ์ž‘ํ•˜๋ฉด ํ‚ค์›Œ๋“œ ํŽธํ–ฅ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋“œ์‹œ ํ‰๊ฐ€ ๋ฐ์ดํ„ฐ๋กœ A/B ํ…Œ์ŠคํŠธ ํ›„ ๊ฐ€์ค‘์น˜๋ฅผ ์ •ํ•˜์„ธ์š” โ€” ๊ทธ์ „๊นŒ์ง€๋Š” RRF์ž…๋‹ˆ๋‹ค.

์‚ฌํ›„ ๊ฒ€์ƒ‰

Reranking ยท Compression ยท Lost-in-the-Middle ยท Citation

PART 5 ยท ์‚ฌํ›„ ๊ฒ€์ƒ‰

์‚ฌํ›„ ๊ฒ€์ƒ‰

๊ฒ€์ƒ‰์€ ๋๋Š”๋ฐ ์ˆœ์œ„ ยท ๋ถ„๋Ÿ‰ ยท ์ถœ์ฒ˜๊ฐ€ ๋ฌธ์ œ์ผ ๋•Œ โ€” ๊ฒฐ๊ณผ๋ฅผ ์ •์ œํ•œ ๋’ค LLM์— ์ „๋‹ฌ

๊ฐ€์ ธ์˜จ ๊ฒƒ์„ ๋‹ค๋“ฌ๋Š”๋‹ค

์ ์šฉ ์ˆœ์„œ๊ฐ€ ๊ณง ์šฐ์„ ์ˆœ์œ„ โ€” ์ˆœ์œ„ ๊ต์ •(Reranking) โ†’ ๋ถ„๋Ÿ‰ ์ •๋ฆฌ(Compression) โ†’ ์ถœ์ฒ˜ ๋ช…์‹œ(Citation)

  • Reranking โ€” Cross-Encoder ์ •๋ฐ€ ์žฌ์ •๋ ฌ
  • Compression โ€” ๊ด€๋ จ ๋ฌธ์žฅ๋งŒ ์ถ”์ถœ
  • Lost-in-the-Middle โ€” ๋ฐฐ์น˜ ์žฌ์กฐ์ •
  • Citation โ€” ์ถœ์ฒ˜ ๋ช…์‹œ ยท ํ™˜๊ฐ ํƒ์ง€
takeaway

์ „๋ถ€ ์“ธ ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค โ€” Reranking ํ•˜๋‚˜๋กœ ๋Œ€๋ถ€๋ถ„ ์ถฉ๋ถ„ํ•˜๊ณ , ๋‚˜๋จธ์ง€๋Š” ์ฆ์ƒ์ด ์žˆ์„ ๋•Œ๋งŒ ์–น์Šต๋‹ˆ๋‹ค.

PART 5 ยท ์‚ฌํ›„ ๊ฒ€์ƒ‰

Reranking ์ „ โ†’ ํ›„

"์˜ˆ์•ฝ๊ธˆ ํ™˜๋ถˆ ๊ทœ์ •์ด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?"์˜ ํ›„๋ณด๋“ค โ€” ์œ ์‚ฌ๋„ ์ˆœ์œ„๊ฐ€ Cross-Encoder ๊ด€๋ จ๋„๋กœ ๋’ค์ง‘ํžˆ๋Š” ์ „/ํ›„




์ „ โ€” ๊ฒ€์ƒ‰ ์œ ์‚ฌ๋„ ์ˆœ (ํ›„๋ณด 20๊ฐœ ์ค‘ ์ƒ์œ„ 4)

terms.pdf ยง9 ํ™˜๊ธ‰
0.71

faq.pdf ์žฌ๊ฒฐ์ œ
0.68

ยง3 ํ™˜๋ถˆ ๊ธฐ์ค€ ์ •๋‹ต
0.64

notice.pdf ํ˜œํƒ
0.61

์œ ์‚ฌ๋„๋Š” "๊ฐ€๊น๋‹ค"์ผ ๋ฟ โ€” ์ •๋‹ต์ด ์—ฌ์ „ํžˆ 3์œ„ (์˜ˆ์‹œ ์ˆ˜์น˜)



โ†’
Cross-
Encoder



ํ›„ โ€” ๊ด€๋ จ๋„ ์žฌ์ •๋ ฌ ยท TOP-5๋งŒ LLM์œผ๋กœ

ยง3 ํ™˜๋ถˆ ๊ธฐ์ค€ 1์œ„
0.97

terms.pdf ยง9 ํ™˜๊ธ‰
0.41

faq.pdf ์žฌ๊ฒฐ์ œ
0.18

notice.pdf ํ˜œํƒ
0.07

์งˆ๋ฌธยท์ฒญํฌ๋ฅผ ํ•œ ์Œ์œผ๋กœ ๊ฐ™์ด ์ฝ๊ณ  ์ฑ„์  โ€” ์ •๋‹ต์ด 1์œ„๋กœ (์˜ˆ์‹œ ์ˆ˜์น˜)



takeaway

์œ ์‚ฌ๋„(๊ฐ€๊น๋‹ค)์™€ ๊ด€๋ จ๋„(๋‹ต์ด ๋œ๋‹ค)๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค โ€” ์ด ์žฌ์ •๋ ฌ์ด retrieve ํ˜ธ์ถœ ํ•œ ๋ฒˆ์— ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.

PART 5 ยท ์‚ฌํ›„ ๊ฒ€์ƒ‰

Reranking โ€” 2๋‹จ๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ

Bi-Encoder๋กœ ๋„“๊ฒŒ ํ›„๋ณด 20๊ฐœ โ†’ Cross-Encoder๊ฐ€ ์ฟผ๋ฆฌยท๋ฌธ์„œ ์Œ์„ 1:1 ์ •๋ฐ€ ๋น„๊ตํ•ด Top-5 ์„ ๋ณ„

python
import boto3
bedrock_rt = boto3.client("bedrock-agent-runtime", region_name="us-east-1")

response = bedrock_rt.retrieve(
    knowledgeBaseId="KB-RESTAURANT-001",
    retrievalQuery={"text": "๋‹น์ผ ์ทจ์†Œ ์ˆ˜์ˆ˜๋ฃŒ"},
    retrievalConfiguration={"vectorSearchConfiguration": {
        # โ‘  1๋‹จ๊ณ„ โ€” ํ›„๋ณด๋Š” ๋„“๊ฒŒ 20๊ฐœ (Bi-Encoder + ํ•˜์ด๋ธŒ๋ฆฌ๋“œ)
        "numberOfResults": 20,
        "overrideSearchType": "HYBRID",
        # โ‘ก 2๋‹จ๊ณ„ โ€” rerankingConfiguration์€ vectorSearchConfiguration ๋‚ด๋ถ€์— ์œ„์น˜
        "rerankingConfiguration": {
            "type": "BEDROCK_RERANKING_MODEL",
            "bedrockRerankingConfiguration": {
                # โ‘ข Cross-Encoder(Cohere Rerank)๊ฐ€ ์ •๋ฐ€ ์žฌ์ •๋ ฌํ•ด Top-5๋งŒ ๋‚จ๊น€
                "numberOfRerankedResults": 5,
                "modelConfiguration": {"modelArn": "arn:aws:bedrock:us-east-1::foundation-model/cohere.rerank-v3-5:0"},
            },
        },
    }})
  • 1๋‹จ๊ณ„ โ€” ๋„“์€ ํ›„๋ณด โ€” numberOfResults=20์œผ๋กœ ์žฌํ˜„์œจ ํ™•๋ณด. HYBRID๋กœ ์–ดํœ˜ ๋ถˆ์ผ์น˜ ๋ณด์™„
  • 2๋‹จ๊ณ„ โ€” ๋ฆฌ๋žญํ‚น ์„ค์ • โ€” retrieve ํ˜ธ์ถœ ํ•œ ๋ฒˆ์— ๋ฆฌ๋žญํ‚น๊นŒ์ง€. ๋ณ„๋„ ํŒŒ์ดํ”„๋ผ์ธ ์ฝ”๋“œ ๋ถˆํ•„์š”
  • Cross-Encoder ์„ ๋ณ„ โ€” ์ฟผ๋ฆฌยท๋ฌธ์„œ ์Œ 1:1 ์ •๋ฐ€ ๋น„๊ต๋กœ Top-5๋งŒ LLM์— ์ „๋‹ฌ. LLM ํ˜ธ์ถœ ์—†์ด ๋ฆฌ๋žญ์ปค๋งŒ ์ถ”๊ฐ€๋˜๋Š” ๊ฐ€์„ฑ๋น„ ๊ธฐ๋ฒ•
PART 5 ยท ์‚ฌํ›„ ๊ฒ€์ƒ‰

Compression๊ณผ ๋ฐฐ์น˜ ์ „๋žต

๊ฐ€์ ธ์˜จ ๋ฌธ์„œ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ๊ฑฐ๋‚˜, LLM์ด ์ค‘๊ฐ„์„ ๊ฑด๋„ˆ๋›ฐ๊ฑฐ๋‚˜ โ€” ๋ถ„๋Ÿ‰๊ณผ ๋ฐฐ์น˜์˜ ๋ฌธ์ œ

Contextual Compression

๋ฌธ์„œ์—์„œ ๊ด€๋ จ ๋ฌธ์žฅ๋งŒ ์ถ”์ถœ

  • 500ํ† ํฐ ์ฒญํฌ์—์„œ ๊ด€๋ จ 50ํ† ํฐ๋งŒ โ€” ๋น„์šฉ ์ ˆ๊ฐ + ์ •๋ฐ€๋„ ํ–ฅ์ƒ
  • ๋ฌธ์„œ๋‹น LLM 1ํšŒ ์ถ”๊ฐ€ ํ˜ธ์ถœ โ€” ๊ฒฝ๋Ÿ‰ ๋ชจ๋ธ(Haiku)๋กœ ์ ˆ์ถฉ
  • 200ํ† ํฐ ์ดํ•˜ ์ฒญํฌ์—๋Š” ๋ถˆํ•„์š” โ€” ์˜คํžˆ๋ ค ์ •๋ณด ์†์‹ค

Lost-in-the-Middle ๋ฐฉ์ง€

์ค‘์š” ๋ฌธ์„œ๋ฅผ ์ฒ˜์Œ๊ณผ ๋์— ๋ฐฐ์น˜

  • LLM์€ ํ”„๋กฌํ”„ํŠธ ์ฒ˜์Œยท๋์— ์ง‘์ค‘ (Stanford NLP ์—ฐ๊ตฌ)
  • Reranking ํ›„ 1๋“ฑ์€ ๋งจ ์•ž, 2๋“ฑ์€ ๋งจ ๋’ค๋กœ ์žฌ๋ฐฐ์น˜
  • Knowledge Base RetrieveAndGenerate๋Š” ์ž์ฒด ์ •๋ ฌ โ€” ์ปค์Šคํ…€ RAG ์ „์šฉ ๊ธฐ๋ฒ•
takeaway

๋ฌธ์„œ ์ˆ˜๋ฅผ ์ค„์ด๋ฉด "์ค‘๊ฐ„"์ด ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค โ€” Top-3 ์ œํ•œ์ด ๊ฐ€์žฅ ๊ฐ’์‹ผ Lost-in-the-Middle ๋ฐฉ์–ด์ž…๋‹ˆ๋‹ค.

PART 5 ยท ์‚ฌํ›„ ๊ฒ€์ƒ‰

Citation โ€” ์ถœ์ฒ˜๊ฐ€ ๊ณง ๋ฐฉ์–ด์„ 

๋‹ต๋ณ€์˜ ๊ฐ ์ฃผ์žฅ์— ์ถœ์ฒ˜ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ•์ œ โ€” ์‹ ๋ขฐ์„ฑ ํ™•๋ณด์™€ ํ™˜๊ฐ ํƒ์ง€๋ฅผ ๋™์‹œ์—

์ปค์Šคํ…€ RAG โ€” ํ”„๋กฌํ”„ํŠธ ์œ ๋„

[N] ๋ฒˆํ˜ธ ๊ฐ•์ œ

  • ๋ฌธ์„œ๋งˆ๋‹ค [1], [2] ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์—ฌ ์ „๋‹ฌ
  • "๊ฐ ์ฃผ์žฅ์— [N] ํ‘œ๊ธฐ" + "์—†์œผ๋ฉด ํ™•์ธ ๋ถˆ๊ฐ€๋กœ ๋‹ต๋ณ€" ์ง€์‹œ
  • ๋‹ต๋ณ€์—์„œ [N] ํŒจํ„ด ์ถ”์ถœ โ†’ ์›๋ฌธ๊ณผ ๋Œ€์กฐ
  • [N] ์—†๋Š” ๋ฌธ์žฅ = ํ™˜๊ฐ ์˜์‹ฌ ์‹ ํ˜ธ

Citation ๊ฒ€์ฆ์„ ํŒŒ์ดํ”„๋ผ์ธ์— ๋„ฃ์œผ๋ฉด ํ™˜๊ฐ ํƒ์ง€๊ฐ€ ์ž๋™ํ™”๋ฉ๋‹ˆ๋‹ค โ€” Guardrails์™€ ๊ฒฐํ•ฉํ•˜๋ฉด ๋ฐฉ์–ด์„ ์ด ์ด์ค‘์ด ๋ฉ๋‹ˆ๋‹ค.

Bedrock Knowledge Bases โ€” ์ž๋™ ์ œ๊ณต

๊ด€๋ฆฌํ˜• ๊ฒฝ๋กœ

  • RetrieveAndGenerate ์‘๋‹ต์— citations ๋ฐฐ์—ด ํฌํ•จ
  • retrievedReferences + generatedResponsePart ๋งคํ•‘
  • Managed Knowledge Base๋„ ๊ธฐ์กด Retrieve API ํ˜ธํ™˜ โ€” location์œผ๋กœ ์ถœ์ฒ˜ ์ถ”์ 
  • ํ”„๋กฌํ”„ํŠธ ์—”์ง€๋‹ˆ์–ด๋ง ๋ถˆํ•„์š”

๊ด€๋ฆฌํ˜• ๊ฒฝ๋กœ๋Š” Citation์ด ๊ธฐ๋ณธ์ž…๋‹ˆ๋‹ค โ€” ์ง์ ‘ ์œ ๋„๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์€ ์ปค์Šคํ…€ ํŒŒ์ดํ”„๋ผ์ธ๋ฟ์ž…๋‹ˆ๋‹ค.

takeaway

Citation์ด ์žˆ์–ด๋„ ์›๋ฌธ๊ณผ ๋ถˆ์ผ์น˜ํ•˜๋ฉด ์ž˜๋ชป๋œ ์ธ์šฉ โ€” ๋ฒˆํ˜ธ์˜ ์กด์žฌ๊ฐ€ ์•„๋‹ˆ๋ผ ๋‚ด์šฉ ๋Œ€์กฐ๊นŒ์ง€๊ฐ€ ๊ฒ€์ฆ์ž…๋‹ˆ๋‹ค.

์ ์šฉ ์ „๋žต

์ง„๋‹จ โ†’ ์ฒ˜๋ฐฉ ยท ์ ์šฉ ์ˆœ์„œ ยท ์‹ค์Šต

PART 6 ยท ์ ์šฉ ์ „๋žต

์ฆ์ƒ โ†’ ์ง„๋‹จ โ†’ ์ฒ˜๋ฐฉ

์‹คํŒจ ๋กœ๊ทธ์˜ ์ฆ์ƒ์ด ์ง„๋‹จ์„, ์ง„๋‹จ์ด ๊ธฐ๋ฒ•์„ ๊ฒฐ์ • โ€” ์ฒ˜๋ฐฉ์€ ๋น„์šฉ ๋‚ฎ์€ ๊ฒƒ๋ถ€ํ„ฐ

์ฆ์ƒ์ง„๋‹จ์ฒ˜๋ฐฉ (๋น„์šฉ ๋‚ฎ์€ ์ˆœ)
๊ด€๋ จ ๋ฌธ์„œ๊ฐ€ ์•„์˜ˆ ์•ˆ ๋‚˜์˜ด์–ดํœ˜ ๋ถˆ์ผ์น˜๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„ํ„ฐ โ†’ Query Rewriting โ†’ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ
๋ฌธ์„œ๋Š” ๋‚˜์˜ค๋Š”๋ฐ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์Œ์ž„๋ฒ ๋”ฉ ํ•œ๊ณ„Parent-Child โ†’ Reranking โ†’ HyDE
๋ณตํ•ฉ ์งˆ๋ฌธ์— ๋ฐ˜์ชฝ ๋‹ต๋ณ€์ฃผ์ œ ํ˜ผ์žฌSub-Query ๋ถ„ํ•ด โ†’ RAG Fusion
๋„ˆ๋ฌด ๊ตฌ์ฒด์ ์ด๋ผ 0๊ฑด๊ฒ€์ƒ‰ ๋ฒ”์œ„ ํ˜‘์†ŒStep-back ์ถ”์ƒํ™”
๋ฌด๊ด€ํ•œ ๋ฌธ์„œ๊ฐ€ ๋งŽ์ด ์„ž์ž„๊ณผ์ž‰ ๊ฒ€์ƒ‰Semantic Chunking โ†’ Compression
๋‹ต์ด ์ค‘๊ฐ„ ๋‚ด์šฉ์„ ๋ˆ„๋ฝLost-in-the-MiddleTop-3 ์ œํ•œ ๋˜๋Š” ์žฌ๋ฐฐ์น˜
์ •ํ™•ํ•˜์ง€๋งŒ ์ถœ์ฒ˜ ๋ถˆ๋ช…์‹ ๋ขฐ์„ฑ ๋ถ€์กฑCitation
takeaway

์ด ํ‘œ๊ฐ€ ์ด ๋ชจ๋“ˆ์˜ ์š”์•ฝ์ž…๋‹ˆ๋‹ค โ€” ์ฆ์ƒ ์—†์ด ๊ธฐ๋ฒ•๋ถ€ํ„ฐ ๊ณ ๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

PART 6 ยท ์ ์šฉ ์ „๋žต

์ ์šฉ ์ˆœ์„œ โ€” ๋น„์šฉ์ด ๋‚ฎ์€ ๊ฒƒ๋ถ€ํ„ฐ

ํ•œ ๋ฒˆ์— 1๊ฐœ ๊ธฐ๋ฒ•๋งŒ โ€” ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ๋™์‹œ์— ๋ฐ”๊พธ๋ฉด ํšจ๊ณผ์˜ ์ถœ์ฒ˜๊ฐ€ ๋ถˆ๋ถ„๋ช…

  1. 1
    1์ˆœ์œ„ โ€” ์ธ๋ฑ์‹ฑ

    Parent-Child ยท ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ยท ์ฒญํ‚น ์กฐ์ •. 1ํšŒ ์„ค์ •์œผ๋กœ ๋ชจ๋“  ์ฟผ๋ฆฌ์— ์ ์šฉ, ์ถ”๊ฐ€ ์ฟผ๋ฆฌ ๋น„์šฉ 0.

  2. 2
    2์ˆœ์œ„ โ€” ์‚ฌํ›„ ๊ฒ€์ƒ‰

    Reranking๋ถ€ํ„ฐ โ€” LLM ํ˜ธ์ถœ ์—†์ด ๋ฆฌ๋žญ์ปค๋งŒ ์ถ”๊ฐ€. ์ฝ”๋“œ ๋ช‡ ์ค„๋กœ ์ฆ‰๊ฐ ํšจ๊ณผ.

  3. 3
    3์ˆœ์œ„ โ€” ์‚ฌ์ „ ๊ฒ€์ƒ‰

    Query Rewriting โ†’ ํ•„์š” ์‹œ HyDE ยท RAG Fusion. ๋งค ์ฟผ๋ฆฌ LLM ๋น„์šฉ โ€” ๊ฐ€์žฅ ๋น„์‹ธ์ง€๋งŒ ํšจ๊ณผ๋„ ํผ.

  4. 4
    ์ƒ์‹œ โ€” ํ‰๊ฐ€ ๋ฃจํ”„

    ๊ธฐ๋ฒ• 1๊ฐœ ์ถ”๊ฐ€๋งˆ๋‹ค ๋™์ผ ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ ์žฌ์ธก์ •. ๊ฐœ์„ ์ด ํ™•์ธ๋  ๋•Œ๋งŒ ์œ ์ง€ โ€” ๋นผ์„œ ์ข‹์•„์ง€๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

takeaway

"๋” ๋„ฃ์œผ๋ฉด ์ข‹๊ฒ ์ง€"๊ฐ€ ์•„๋‹ˆ๋ผ ์ˆ˜์น˜๋กœ ๊ฐœ์„  ํ™•์ธ์ด ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค โ€” ์ธก์ • ๋ฐฉ๋ฒ•(3์ถ• ๋ฉ”ํŠธ๋ฆญยทRAGAS)์€ RAG ํ‰๊ฐ€ ๋ชจ๋“ˆ์—์„œ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

Advanced RAG ์‹ค์Šต

โฑ 60๋ถ„

Naive RAG์— Advanced ๊ธฐ๋ฒ•์„ ๋‹จ๊ณ„๋ณ„๋กœ ์–น์œผ๋ฉฐ ํ’ˆ์งˆ ๋ณ€ํ™”๋ฅผ ์ง์ ‘ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค

ํ•™์Šต ๋ชฉํ‘œ

  • Query Rewriting์œผ๋กœ ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ ์ตœ์ ํ™”
  • Multi-Query๋กœ ๋‹ค์–‘ํ•œ ๊ด€์ ์˜ ๊ฒ€์ƒ‰ ์ˆ˜ํ–‰
  • Reranking์œผ๋กœ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์ •ํ™•๋„ ํ–ฅ์ƒ
  • Self-RAG๋กœ ์‘๋‹ต์˜ ๊ทผ๊ฑฐ ์ž๋™ ๊ฒ€์ฆ
  • ๊ธฐ๋ณธ RAG vs Advanced RAG ํ’ˆ์งˆ ๋น„๊ต
๊ธฐ๋ฒ•์„ ์Œ“๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ณ‘๋ชฉ์„ ์ง„๋‹จํ•˜๊ณ  ์ฒ˜๋ฐฉํ•˜์„ธ์š”.

์ธ๋ฑ์‹ฑ โ†’ ์‚ฌํ›„ โ†’ ์‚ฌ์ „ ์ˆœ์œผ๋กœ โ€” ํ‰๊ฐ€ ๋ฃจํ”„๋กœ ํšจ๊ณผ๋ฅผ ํ™•์ธํ•˜๋ฉฐ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ