ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ 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๋ฐฑ์๋
'study > ๋ฐฑ์๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๐งช RAG ํ์ง์ โ๊ฐโ์ด ์๋๋ผ โ์ซ์โ๋ก ํ๋จํ๋ ๋ฒ (0) | 2026.01.05 |
|---|---|
| ๐ RAG ๋ฌธ์ ์์งยท์ ์ ํ์ดํ๋ผ์ธ ์๋ํ (0) | 2026.01.02 |
| โก RAG ๊ฒ์ ์ฑ๋ฅ ํ๋ ์ค์ ๊ธฐ (0) | 2025.12.30 |
| ๐ ์ด๋ ฅ์ & ํฌํธํด๋ฆฌ์ค์ ์ด ํ๋ก์ ํธ๋ฅผ โ์ต๊ณ ํจ์จ๋กโ ๋ฃ๋ ๋ฒ (2) | 2025.12.15 |
| ๐ฅ SaaS ํ ์จ๋ณด๋ฉ(Onboarding) ๊ฐ์ด๋ ์์ฑํธ (0) | 2025.12.12 |
- Total
- Today
- Yesterday
- Docker
- Next.js
- nextJS
- node.js
- flax
- CI/CD
- kotlin
- Prisma
- DevOps
- JAX
- ์๋ฐ๋ฉด์
- seo ์ต์ ํ 10๊ฐ
- ๊ฐ๋ฐ๋ธ๋ก๊ทธ
- Python
- JWT
- Express
- REACT
- SEO์ต์ ํ
- ๋ฅ๋ฌ๋
- Redis
- fastapi
- ์น๊ฐ๋ฐ
- PostgreSQL
- llm
- rag
- ์ฟ ๋ฒ๋คํฐ์ค
- ai์ฒ ํ
- ํ๋ก ํธ์๋๊ฐ๋ฐ
- NestJS
- ๋ฐฑ์๋๊ฐ๋ฐ
| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 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 |

