ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

๐Ÿ” RAG ํ’ˆ์งˆ์ด ๋ฌด๋„ˆ์งˆ ๋•Œ ์ง„์งœ ์›์ธ ์ฐพ๊ธฐ

– “์™œ AI๊ฐ€ ์—‰๋šฑํ•œ ๋ง์„ ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์„๊นŒ?” ์šด์˜ํ•˜๋ฉด์„œ ๊ฒช์€ ๊ฒƒ๋“ค
(NestJS + Vector DB + Qdrant + OpenAI ๊ธฐ์ค€, ํ˜„์—… ์‚ฝ์งˆ ๊ธฐ๋ก)


RAG๋ฅผ ์ฒ˜์Œ ๋ถ™์˜€์„ ๋•Œ๋Š” ๋‹ค๋“ค ์ด๋Ÿฐ ๊ฒฝํ—˜์„ ํ•œ๋‹ค.

“์˜ค… ์ฒ˜์Œ์—” ์ง„์งœ ๋˜‘๋˜‘ํ•œ๋ฐ?”
“๊ทผ๋ฐ ์™œ ์ ์  ๋ง์ด ์ด์ƒํ•ด์ง€์ง€…?”

์ด๊ฒŒ ์ฐฉ๊ฐ์ด ์•„๋‹ˆ๋‹ค.
**RAG๋Š” ์‹œ๊ฐ„์ด ์ง€๋‚ ์ˆ˜๋ก, ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์ผ์ˆ˜๋ก ‘๋ง๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ’**๋‹ค.

์ด๋ฒˆ ๊ธ€์€

  • RAG ํ’ˆ์งˆ์ด ๋–จ์–ด์งˆ ๋•Œ
  • “๋ชจ๋ธ์ด ๋ฉ์ฒญํ•ด์ง„ ๊ฑด์ง€”, “๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌธ์ œ์ธ์ง€”, “๊ตฌ์กฐ๊ฐ€ ๋ฌธ์ œ์ธ์ง€”
    ๋ฅผ ํ•˜๋‚˜์”ฉ ๋ถ„ํ•ดํ•ด์„œ ์›์ธ์„ ์ฐพ๋Š” ๊ธ€์ด๋‹ค.

์ด๋ก  ์–˜๊ธฐ โŒ
์šด์˜ํ•˜๋ฉด์„œ ์‹ค์ œ๋กœ ๊ฒช์€ ์ฆ์ƒ → ์›์ธ → ํ•ด๊ฒฐ ํ๋ฆ„์œผ๋กœ ๊ฐ„๋‹ค.


๐Ÿงญ ์ด ๊ธ€์˜ ๋ชฉํ‘œ

  • RAG ํ’ˆ์งˆ ์ €ํ•˜์˜ ๋Œ€ํ‘œ์ ์ธ ์ฆ์ƒ 6๊ฐ€์ง€
  • ๊ฐ ์ฆ์ƒ๋ณ„ ์ง„์งœ ์›์ธ
  • ์šด์˜ ์ค‘ ๋ฐ”๋กœ ์จ๋จน๋Š” ์ฒดํฌ๋ฆฌ์ŠคํŠธ
  • “์•„, ์ด ์‚ฌ๋žŒ์€ RAG๋ฅผ ๊ตด๋ ค๋ดค๊ตฌ๋‚˜” ์†Œ๋ฆฌ ๋“ฃ๋Š” ํฌ์ธํŠธ

1๏ธโƒฃ ์ฆ์ƒ 1: ๋ถ„๋ช… ๋ฌธ์„œ์— ์žˆ๋Š”๋ฐ, ์—‰๋šฑํ•œ ๋‹ต์„ ํ•œ๋‹ค

์ด๊ฒŒ ์ œ์ผ ๋งŽ์ด ๋‚˜์˜จ๋‹ค.

“๋ฌธ์„œ์— ์ •ํ™•ํžˆ ์จ ์žˆ๋Š”๋ฐ
์™œ ์ „ํ˜€ ๋‹ค๋ฅธ ๋‹ต์„ ํ•˜์ง€?”

โŒ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ํ•˜๋Š” ์˜คํ•ด

  • “LLM๊ฐ€ ๋ฉ์ฒญํ•˜๋‹ค”
  • “๋ชจ๋ธ์„ ๋ฐ”๊ฟ”์•ผ ํ•˜๋‚˜?”

โœ… ์‹ค์ œ ์›์ธ

๋ฒกํ„ฐ ๊ฒ€์ƒ‰ ๋‹จ๊ณ„์—์„œ ์ด๋ฏธ ์ž˜๋ชป๋œ ๋ฌธ์„œ๋ฅผ ์ง‘์–ด์™”๋‹ค

LLM์€ ๋ฐ›์€ ๋ฌธ๋งฅ ์•ˆ์—์„œ๋Š” ์ตœ์„ ์„ ๋‹คํ•œ๋‹ค.
์ฆ‰, ๋ฌธ์ œ๋Š” ๊ฑฐ์˜ ํ•ญ์ƒ Retrieval ์ชฝ์ด๋‹ค.


๐Ÿ”Ž ์ฒดํฌ ํฌ์ธํŠธ

const results = await qdrant.search("documents", {
  vector,
  limit: 5,
});

์ด ๊ฒฐ๊ณผ๋ฅผ ๋กœ๊ทธ๋กœ ๊ทธ๋Œ€๋กœ ์ฐ์–ด๋ณธ ์  ์žˆ๋Š”๊ฐ€?

console.log(results.map(r => r.payload.text));

๐Ÿ‘‰ ์—ฌ๊ธฐ์„œ ์ด๋ฏธ

  • “์ด๊ฒŒ ์™œ ๋‚˜์˜ค์ง€?”
  • “์ด ๋ฌธ์„œ๋Š” ๊ด€๋ จ์ด ์—†๋Š”๋ฐ?”
    ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค๋ฉด RAG๋Š” ์ด๋ฏธ ์‹คํŒจ๋‹ค.

2๏ธโƒฃ ์ฆ์ƒ 2: ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์ •ํ™•๋„๊ฐ€ ๋–จ์–ด์ง„๋‹ค

์ด๊ฑด ๊ฑฐ์˜ 100% ์žฌํ˜„๋œ๋‹ค.

์ดˆ๊ธฐ(๋ฌธ์„œ 50๊ฐœ):

“์™€, ๊ฑฐ์˜ ๋‹ค ๋งž๋„ค”

์šด์˜ 2๊ฐœ์›” ํ›„(๋ฌธ์„œ 5,000๊ฐœ):

“๋ญ”๊ฐ€ ์˜ˆ์ „๋ณด๋‹ค ์ด์ƒํ•œ๋ฐ…?”


โœ… ์ง„์งœ ์›์ธ

๋ฒกํ„ฐ DB๋Š” ‘๋งŽ๋‹ค๊ณ  ๋˜‘๋˜‘ํ•ด์ง€์ง€ ์•Š๋Š”๋‹ค’

ํŠนํžˆ ์ด๋Ÿฐ ๊ฒฝ์šฐ์—์„œ ํ„ฐ์ง„๋‹ค:

  • ํ•œ ์ปฌ๋ ‰์…˜์— ์„œ๋กœ ๋‹ค๋ฅธ ์ฃผ์ œ์˜ ๋ฌธ์„œ๋ฅผ ๋‹ค ๋„ฃ์Œ
  • ์นดํ…Œ๊ณ ๋ฆฌ/๋„๋ฉ”์ธ ๊ตฌ๋ถ„ ์—†์ด ๊ฒ€์ƒ‰
  • ๋ชจ๋“  ๋ฌธ์„œ๋ฅผ ๋™์ผํ•œ ๊ฐ€์ค‘์น˜๋กœ ์ทจ๊ธ‰

โŒ ๋‚˜์˜ ์ดˆ๋ฐ˜ ๊ตฌ์กฐ

documents
 โ”œโ”€ FAQ
 โ”œโ”€ ๊ฐ€์ด๋“œ
 โ”œโ”€ ์ •์ฑ…
 โ”œโ”€ ๊ณต์ง€
 โ”œโ”€ ์‹คํ—˜ ๋ฐ์ดํ„ฐ

→ ์ „๋ถ€ ๊ฐ™์€ ์ปฌ๋ ‰์…˜ ๐Ÿ˜‡


โœ… ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• 1: ์ปฌ๋ ‰์…˜ ๋ถ„๋ฆฌ or ํ•„ํ„ฐ

await qdrant.search("documents", {
  vector,
  filter: {
    must: [
      { key: "type", match: { value: "guide" } }
    ]
  },
  limit: 4,
});

๋˜๋Š”

documents_guide
documents_faq
documents_policy

๐Ÿ‘‰ ๋„๋ฉ”์ธ ๊ฒฝ๊ณ„๋ฅผ ๋ช…ํ™•ํžˆ ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ํ’ˆ์งˆ์ด ํ™• ์˜ฌ๋ผ๊ฐ„๋‹ค.


3๏ธโƒฃ ์ฆ์ƒ 3: ๊ทธ๋Ÿด๋“ฏํ•œ๋ฐ ํ‹€๋ฆฐ ๋ง์„ ํ•œ๋‹ค (hallucination)

๋ฐ˜์‘ํ˜•

์ด๊ฒŒ ์ œ์ผ ๋ฌด์„ญ๋‹ค.
ํ‹€๋ฆฐ๋ฐ ์ž์‹  ์žˆ์–ด ๋ณด์ธ๋‹ค.


โŒ ํ”ํ•œ ์ฐฉ๊ฐ

  • “RAG ์“ฐ๋ฉด hallucination ์—†์–ด์ง€๋Š” ๊ฑฐ ์•„๋‹˜?”

โœ… ํ˜„์‹ค

RAG๋Š” hallucination์„ ์ค„์ผ ๋ฟ,
๋ฌธ๋งฅ์ด ์• ๋งคํ•˜๋ฉด ์—ฌ์ „ํžˆ ๋งŒ๋“ค์–ด๋‚ธ๋‹ค.


์ฃผ์š” ์›์ธ 3๊ฐ€์ง€

1) ์ปจํ…์ŠคํŠธ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์Œ

limit: 10 // โŒ

๋ฌธ๋งฅ์ด ๋งŽ์•„์งˆ์ˆ˜๋ก
LLM์€ ์ค‘์š”ํ•œ ๊ฑธ ๋ชป ๊ณ ๋ฅธ๋‹ค.

๐Ÿ‘‰ 3~5๊ฐœ๊ฐ€ ์ƒํ•œ์„ 


2) ๋ฌธ์„œ ํ’ˆ์งˆ์ด ๋‚ฎ์Œ

  • ํ•œ ๋ฌธ์„œ์— ์—ฌ๋Ÿฌ ์ฃผ์ œ ์„ž์ž„
  • ์• ๋งคํ•œ ํ‘œํ˜„
  • “~์ผ ์ˆ˜ ์žˆ๋‹ค” ๊ฐ™์€ ๋ฌธ์žฅ

๐Ÿ‘‰ LLM์€ ์• ๋งคํ•จ์„ ์ฆํญํ•œ๋‹ค.


3) ์งˆ๋ฌธ ์ž์ฒด๊ฐ€ ์• ๋งคํ•จ

“์ด๊ฑฐ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ๋ผ์š”?”

์ด๋Ÿฐ ์งˆ๋ฌธ์€
AI ์ž…์žฅ์—์„  ๋ญ˜ ๋ฌผ์–ด๋ณธ ๊ฑด์ง€ ๋ชจ๋ฅธ๋‹ค.


โœ… ํ•ด๊ฒฐ ์ „๋žต

  • ๋ฌธ์„œ ์ชผ๊ฐœ๊ธฐ (chunk size ์ค„์ด๊ธฐ)
  • ๋ฌธ์„œ ์ €์žฅ ์‹œ ์š”์•ฝ ํ•„๋“œ ํ•จ๊ป˜ ์ €์žฅ
  • ์งˆ๋ฌธ ์ „์ฒ˜๋ฆฌ
const normalizedQuery = `
๋‹ค์Œ ์งˆ๋ฌธ์„ ๋ช…ํ™•ํ•œ ํ•œ ๋ฌธ์žฅ ์งˆ๋ฌธ์œผ๋กœ ๋ฐ”๊ฟ”์ค˜:
"${userQuery}"
`;

4๏ธโƒฃ ์ฆ์ƒ 4: ๋น„์Šทํ•œ ์งˆ๋ฌธ์ธ๋ฐ ๊ฒฐ๊ณผ๊ฐ€ ๋งค๋ฒˆ ๋‹ค๋ฅด๋‹ค

์šด์˜ํ•˜๋‹ค ๋ณด๋ฉด ์ด๋Ÿฐ ๋ง ๋‚˜์˜จ๋‹ค.

“์–ด์ œ๋Š” ์ž˜ ๋Œ€๋‹ตํ–ˆ๋Š”๋ฐ
์˜ค๋Š˜์€ ์™œ ์ด๋ž˜์š”?”


โœ… ์›์ธ

  • ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์ˆœ์„œ๊ฐ€ ๋ฏธ์„ธํ•˜๊ฒŒ ๋ฐ”๋€œ
  • LLM temperature ๊ฐ’
  • ๋ฌธ๋งฅ ๊ธธ์ด ๋ณ€ํ™”

โŒ ์ดˆ๋ฐ˜ ์„ค์ •

temperature: 0.7

โœ… ์šด์˜ ๊ธฐ์ค€ ์„ค์ •

temperature: 0.2
top_p: 0.9

๐Ÿ‘‰ RAG๋Š” ์ฐฝ์˜๋ ฅ์ด ํ•„์š” ์—†๋‹ค
๐Ÿ‘‰ ์ผ๊ด€์„ฑ์ด ์ค‘์š”


5๏ธโƒฃ ์ฆ์ƒ 5: “๊ด€๋ จ ์—†๋Š” ๋ฌธ์„œ”๊ฐ€ ๊ณ„์† ๋ผ์–ด๋“ ๋‹ค

์ด๊ฑด ๋Œ€๋ถ€๋ถ„ ์ž„๋ฒ ๋”ฉ ์ด์ „ ๋ฌธ์ œ๋‹ค.


์ฃผ์š” ์›์ธ

  • ๋„ˆ๋ฌด ์งง์€ chunk (๋ฌธ๋งฅ ๋ถ€์กฑ)
  • ๋„ˆ๋ฌด ๊ธด chunk (์ฃผ์ œ ์„ž์ž„)
  • ์ „์ฒ˜๋ฆฌ ์•ˆ ๋œ ํ…์ŠคํŠธ (HTML, ๋ฉ”๋‰ด, ํ‘ธํ„ฐ ํฌํ•จ)

์‹ค์ „ chunk ๊ธฐ์ค€ (๋‚ด ๊ธฐ์ค€)

ํ•ญ๋ชฉ๊ถŒ์žฅ

๊ธ€์ž ์ˆ˜ 300~700์ž
๋ฌธ๋‹จ ๋‹จ์œ„ O
์ œ๋ชฉ ํฌํ•จ O
๋ถˆํ•„์š”ํ•œ UI ํ…์ŠคํŠธ ์ œ๊ฑฐ

6๏ธโƒฃ ์ฆ์ƒ 6: RAG ๋‹ต๋ณ€์ด “์–•๋‹ค”

“๋ญ”๊ฐ€ ๋‹ค ์•„๋Š” ์ฒ™์€ ํ•˜๋Š”๋ฐ
๊นŠ์ด๊ฐ€ ์—†๋‹ค…”


์ด๊ฑด ์˜์™ธ๋กœ Retrieval ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค

LLM ํ”„๋กฌํ”„ํŠธ ๋ฌธ์ œ๋‹ค.


โŒ ํ”ํ•œ ํ”„๋กฌํ”„ํŠธ

๋‹ค์Œ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๋‹ต๋ณ€ํ•ด์ค˜.

โœ… ๊ฐœ์„ ๋œ ํ”„๋กฌํ”„ํŠธ

์•„๋ž˜ ๋ฌธ์„œ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ๋งŒ ๋‹ต๋ณ€ํ•ด.
๋ฌธ์„œ์— ์—†๋Š” ๋‚ด์šฉ์€ ๋ชจ๋ฅธ๋‹ค๊ณ  ๋งํ•ด.
๋‹ต๋ณ€์€ ๋‹จ๊ณ„๋ณ„๋กœ ์ •๋ฆฌํ•ด.

๐Ÿ‘‰ ์ด ํ•œ ์ค„ ์ฐจ์ด๋กœ
๋‹ต๋ณ€ ํ’ˆ์งˆ์ด ์™„์ „ํžˆ ๋‹ฌ๋ผ์ง„๋‹ค.


7๏ธโƒฃ RAG ํ’ˆ์งˆ ์ ๊ฒ€ ์ฒดํฌ๋ฆฌ์ŠคํŠธ (์šด์˜์šฉ)

์šด์˜ ์ค‘ ์ด ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋ฅผ ์“ด๋‹ค.

  • ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ๋กœ๊ทธ๋ฅผ ์ง์ ‘ ํ™•์ธํ–ˆ๋Š”๊ฐ€?
  • ์ปฌ๋ ‰์…˜/๋„๋ฉ”์ธ ๋ถ„๋ฆฌ๊ฐ€ ๋˜์–ด ์žˆ๋Š”๊ฐ€?
  • limit 3~5 ์œ ์ง€ ์ค‘์ธ๊ฐ€?
  • ๋ฌธ์„œ chunk ํฌ๊ธฐ๊ฐ€ ์ ์ ˆํ•œ๊ฐ€?
  • ๋ฌธ์„œ ์š”์•ฝ ํ•„๋“œ๊ฐ€ ์žˆ๋Š”๊ฐ€?
  • temperature 0.3 ์ดํ•˜์ธ๊ฐ€?
  • ์งˆ๋ฌธ ์ „์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š”๊ฐ€?

๐Ÿ‘‰ ์—ฌ๊ธฐ์„œ 2~3๊ฐœ๋งŒ ํ‹€์–ด์ ธ๋„
RAG๋Š” ๋ฐ”๋กœ ํ”๋“ค๋ฆฐ๋‹ค.


8๏ธโƒฃ ์‹ค๋ฌด์—์„œ ๊นจ๋‹ฌ์€ ์ง„์งœ ํ•ต์‹ฌ

์ด๊ฑด ์ •๋ง ์ค‘์š”ํ•œ ๋ฌธ์žฅ์ด๋‹ค.

RAG ํ’ˆ์งˆ ๋ฌธ์ œ์˜ 80%๋Š”
๋ชจ๋ธ์ด ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ์™€ ๊ตฌ์กฐ๋‹ค.

LLM์„ ๋ฐ”๊พธ๊ธฐ ์ „์—
๋ฐ˜๋“œ์‹œ ์ด๊ฑธ ๋จผ์ € ๋ณด์ž.

  • Retrieval์ด ๋งž๋Š”๊ฐ€?
  • ๋ฌธ์„œ๊ฐ€ ์ข‹์€๊ฐ€?
  • ์งˆ๋ฌธ์ด ๋ช…ํ™•ํ•œ๊ฐ€?

 

RAGํ’ˆ์งˆ, ๋ฒกํ„ฐ๊ฒ€์ƒ‰, Qdrant, LLM์šด์˜, AI์„œ๋น„์Šค, NestJS, AI์‚ฝ์งˆ๊ธฐ, RAG๋ฌธ์ œํ•ด๊ฒฐ, AI๋ฐฑ์—”๋“œ

โ€ป ์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค.
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2026/01   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•