Skip to main content
PromptQuorumPromptQuorum
ํ™ˆ/๊ณ ๊ธ‰ ๋กœ์ปฌ LLM/๋กœ์ปฌ์—์„œ PDF 1,000๊ฐœ์™€ ์ฑ„ํŒ…ํ•˜๊ธฐ: ํ…Œ์ŠคํŠธ ์˜ˆ์ œ๋ฅผ ๋„˜์–ด์„  ๊ทœ๋ชจ์˜ RAG
RAG & Document Chat

๋กœ์ปฌ์—์„œ PDF 1,000๊ฐœ์™€ ์ฑ„ํŒ…ํ•˜๊ธฐ: ํ…Œ์ŠคํŠธ ์˜ˆ์ œ๋ฅผ ๋„˜์–ด์„  ๊ทœ๋ชจ์˜ RAG

ยท18๋ถ„ ๋ถ„๋Ÿ‰ยทHans Kuepper ์ € ยท PromptQuorum ์ฐฝ๋ฆฝ์ž, ๋ฉ€ํ‹ฐ ๋ชจ๋ธ AI ๋””์ŠคํŒจ์น˜ ๋„๊ตฌ ยท PromptQuorum

๊ธฐ๋ณธ ์„ค์ •์€ 5,000โ€“8,000๊ฐœ ์ฒญํฌ์—์„œ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ๋ฒกํ„ฐ ์ธ๋ฑ์Šค๊ฐ€ RAM์„ ์ดˆ๊ณผํ•˜๋ฉด ๊ฒ€์ƒ‰ ์žฌํ˜„์œจ์ด ๋–จ์–ด์ง€๊ณ  ๊ธฐ๋ณธ ์ฝ”์‚ฌ์ธ ๊ฒ€์ƒ‰์ด ์–ดํœ˜์ ์œผ๋กœ ์œ ์‚ฌํ•˜์ง€๋งŒ ์˜๋ฏธ์ ์œผ๋กœ ์ž˜๋ชป๋œ ์ฒญํฌ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. 1,000๊ฐœ ์ด์ƒ์˜ PDF๋ฅผ ๋„˜์–ด ํ™•์žฅํ•˜๋ ค๋ฉด ๋‹ค์Œ ์ค‘ ์„ธ ๊ฐ€์ง€๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค: (1) ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰(BM25 + ๋ฒกํ„ฐ), (2) ์ƒ์œ„ 50๊ฐœ ํ›„๋ณด์— ๋Œ€ํ•œ ์žฌ๋žญํ‚น ๋‹จ๊ณ„, (3) ๊ฒ€์ƒ‰ ๊ณต๊ฐ„์„ ์ค„์ด๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง, (4) ๊ณ„์ธต์  ๊ฒ€์ƒ‰(์š”์•ฝ ์ธ๋ฑ์Šค + ์ฒญํฌ ์ธ๋ฑ์Šค). ์ฝ”ํผ์Šค ํฌ๊ธฐ์— ๋”ฐ๋ผ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค: 100โ€“1,000๊ฐœ ๋ฌธ์„œ โ†’ ์กฐ์ •๋œ AnythingLLM; 1,000โ€“5,000๊ฐœ โ†’ ๊ณ„์ธต์  ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋Š” ๋กœ์ปฌ LlamaIndex; 5,000โ€“10,000๊ฐœ โ†’ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์ด ์žˆ๋Š” ๋งž์ถคํ˜• Ollama + ChromaDB; 10,000๊ฐœ+ โ†’ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง๊ณผ ์žฌ๋žญ์ปค๊ฐ€ ์žˆ๋Š” Ollama + Qdrant.

1,000โ€“10,000๊ฐœ ์ด์ƒ์˜ ๊ฐœ์ธ ๋ฌธ์„œ(์—ฐ๊ตฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๋ฒ•์  ๊ธฐ๋ก, ๋‚ด๋ถ€ ์œ„ํ‚ค)๋ฅผ ๊ฐ€์ง„ ๊ณ ๊ธ‰ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ๊ฒฐ์ • ๊ฐ€์ด๋“œ. ๊ธฐ๋ณธ ์„ค์ •์€ 5,000๊ฐœ ์ฒญํฌ ์ฃผ๋ณ€์—์„œ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ๋Š” ๋„ค ๊ฐ€์ง€ ํ™•์žฅ ๊ฒฝ๋กœ(์กฐ์ •๋œ AnythingLLM, ๋กœ์ปฌ LlamaIndex, ๋งž์ถคํ˜• Ollama+ChromaDB, ํ”„๋กœ๋•์…˜ Ollama+Qdrant)๋ฅผ 100, 1,000, 10,000๊ฐœ ๋ฌธ์„œ์—์„œ ์ธก์ •๋œ ์ง€์—ฐ์‹œ๊ฐ„, ์ €์žฅ์†Œ, ์ธ๋ฑ์‹ฑ ๋ฒค์น˜๋งˆํฌ์™€ ํ•จ๊ป˜ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์Šฌ๋ผ์ด๋“œ ๋ฑ: ๋กœ์ปฌ์—์„œ PDF 1,000๊ฐœ์™€ ์ฑ„ํŒ…ํ•˜๊ธฐ: ํ…Œ์ŠคํŠธ ์˜ˆ์ œ๋ฅผ ๋„˜์–ด์„  ๊ทœ๋ชจ์˜ RAG

ํ”„๋ ˆ์  ํ…Œ์ด์…˜์€ ๋‹ค์Œ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค: ๊ธฐ๋ณธ RAG๊ฐ€ 5,000โ€“8,000๊ฐœ ์ฒญํฌ์—์„œ ์‹คํŒจํ•˜๋Š” ์ด์œ , 4๊ฐ€์ง€ ์•„ํ‚คํ…์ฒ˜ ๊ฒฐ์ • ํŠธ๋ฆฌ(์ฝ”ํผ์Šค ํฌ๊ธฐ์— ๋”ฐ๋ผ AnythingLLMโ†’Qdrant), BM25+๋ฒกํ„ฐ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰, BGE ์žฌ๋žญ์ปค๋กœ ์ƒ์œ„ 50๊ฐœ ์ •์ œ, 10ร— ๊ฐ€์†์„ ์œ„ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง, 100/1k/10k๊ฐœ ๋ฌธ์„œ์—์„œ ์ธก์ •๋œ ๋ฒค์น˜๋งˆํฌ. ๋กœ์ปฌ RAG ํ™•์žฅ ์ฐธ์กฐ ์นด๋“œ๋กœ PDF๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์‹ญ์‹œ์˜ค.

์•„๋ž˜ ์Šฌ๋ผ์ด๋“œ๋ฅผ ํƒ์ƒ‰ํ•˜๊ฑฐ๋‚˜ ์˜คํ”„๋ผ์ธ ์ฐธ์กฐ์šฉ์œผ๋กœ PDF๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์‹ญ์‹œ์˜ค. ์ฐธ์กฐ ์นด๋“œ ๋‹ค์šด๋กœ๋“œ(PDF)

ํ•ต์‹ฌ ์š”์ 

  • ๊ธฐ๋ณธ ์„ค์ •์€ 5,000โ€“8,000๊ฐœ ์ฒญํฌ์—์„œ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค โ€” ๋ฒกํ„ฐ ์ธ๋ฑ์Šค๊ฐ€ RAM์„ ์ดˆ๊ณผํ•˜๋ฉด ๊ฒ€์ƒ‰ ์žฌํ˜„์œจ์ด ๋–จ์–ด์ง€๊ณ  ๊ธฐ๋ณธ ์ฝ”์‚ฌ์ธ ๊ฒ€์ƒ‰์ด ์–ดํœ˜์ ์œผ๋กœ ์œ ์‚ฌํ•˜์ง€๋งŒ ์˜๋ฏธ์ ์œผ๋กœ ์ž˜๋ชป๋œ ์ฒญํฌ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋Šฅ ์„ ํ˜ธ๊ฐ€ ์•„๋‹Œ ์ฝ”ํผ์Šค ํฌ๊ธฐ์— ๋”ฐ๋ผ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค: 100โ€“1,000๊ฐœ ๋ฌธ์„œ์—๋Š” ์กฐ์ •๋œ AnythingLLM; 1,000โ€“5,000๊ฐœ์—๋Š” ๋กœ์ปฌ LlamaIndex; 5,000โ€“10,000๊ฐœ์—๋Š” ๋งž์ถคํ˜• Ollama+ChromaDB; 10,000๊ฐœ+์—๋Š” Ollama+Qdrant.
  • ์˜ํ–ฅ๋ ฅ ์ˆœ์„œ์— ๋”ฐ๋ฅธ ์„ธ ๊ฐ€์ง€ ์ตœ๋Œ€ ๊ฐœ์„  ์‚ฌํ•ญ: ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰(BM25 + ๋ฒกํ„ฐ), ์†Œํ˜• ํฌ๋กœ์Šค ์ธ์ฝ”๋”๋กœ ์ƒ์œ„ 50๊ฐœ ํ›„๋ณด ์žฌ๋žญํ‚น, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์‚ฌ์ „ ํ•„ํ„ฐ๋ง. ๊ณ„์ธต์  ๊ฒ€์ƒ‰์€ 10k+ ์ด์ƒ์—์„œ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
  • ์ €์žฅ์†Œ ์˜ˆ์‚ฐ: ์ฒญํฌ ํฌ๊ธฐ์™€ ์ž„๋ฒ ๋”ฉ ์ฐจ์›์— ๋”ฐ๋ผ PDF 100ํŽ˜์ด์ง€๋‹น 10โ€“30 MB. 50,000ํŽ˜์ด์ง€ ์ฝ”ํผ์Šค๋Š” ๋ฒกํ„ฐ๋งŒ์œผ๋กœ ๋””์Šคํฌ์— 5โ€“15 GB๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ์ธ๋ฑ์‹ฑ ์‹œ๊ฐ„: ๋ฌธ์„œ ์ˆ˜์— ์„ ํ˜•์ . ์†Œ๋น„์ž ํ•˜๋“œ์›จ์–ด์—์„œ nomic-embed-text-v1.5๋กœ 5,000๊ฐœ PDF๋‹น 30โ€“90๋ถ„์„ ๊ณ„ํšํ•˜์‹ญ์‹œ์˜ค. CPU๋งŒ์œผ๋กœ x86๋ณด๋‹ค Apple Silicon์—์„œ ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค.
  • 10k+ ๋ฌธ์„œ๋ฅผ ์œ„ํ•œ ์ตœ์†Œ ํ•˜๋“œ์›จ์–ด ์š”๊ฑด: 32 GB RAM, NVMe SSD, 8 GB+ VRAM์˜ ๋…๋ฆฝ GPU ๋˜๋Š” 32 GB+ ํ†ตํ•ฉ ๋ฉ”๋ชจ๋ฆฌ์˜ Apple Silicon.
  • ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ชจ๋“  ์•„ํ‚คํ…์ฒ˜์—์„œ ์™„์ „ํ•œ ์žฌ์ธ๋ฑ์‹ฑ์ด ๊ฐ•์ œ๋ฉ๋‹ˆ๋‹ค. 10,000๊ฐœ ๋ฌธ์„œ๋ฅผ ์ธ๋ฑ์‹ฑํ•˜๊ธฐ ์ „์— ์ž„๋ฒ ๋”๋ฅผ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค. ์ž˜๋ชป๋œ ์„ ํƒ์€ ๋˜๋Œ๋ฆฌ๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

1,000๊ฐœ ์ด์ƒ์˜ ๋ฌธ์„œ์—์„œ ๊ธฐ๋ณธ RAG๊ฐ€ ์‹คํŒจํ•˜๋Š” ์ด์œ 

1,000โ€“10,000๊ฐœ ๋ฌธ์„œ ์‚ฌ์ด์—์„œ ๋‘ ๊ฐ€์ง€ ์‹คํŒจ๊ฐ€ ๋ˆ„์ ๋ฉ๋‹ˆ๋‹ค: ์ธ๋ฑ์Šค๊ฐ€ RAM์„ ์ดˆ๊ณผํ•˜๊ณ  ์ฝ”์‚ฌ์ธ ์ „์šฉ ๊ฒ€์ƒ‰์ด ์–ดํœ˜์ ์œผ๋กœ ์œ ์‚ฌํ•˜์ง€๋งŒ ์˜๋ฏธ์ ์œผ๋กœ ์ž˜๋ชป๋œ ์ฒญํฌ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. PDF 20๊ฐœ๋กœ ์ž‘๋™ํ–ˆ๋˜ ๋ฐ๋ชจ๋Š” ๊ฐœ์ธ ์—ฐ๊ตฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๊ฐ€ ์ž˜๋ชป๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ธฐ๋ณธ ์„ค์ •์— ๋‚ด์žฅ๋œ ๊ฐ€์ •์ด ๋” ์ด์ƒ ์„ฑ๋ฆฝํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

  • RAM์„ ๋ฒ—์–ด๋‚œ ์ธ๋ฑ์Šค: LanceDB, ChromaDB, FAISS๋Š” ๋ชจ๋‘ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์ฃผ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ RAM(16 GB ๋…ธํŠธ๋ถ์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ 5โ€“8 GB ๋ฒกํ„ฐ)์„ ์ดˆ๊ณผํ•˜๋ฉด ๋””์Šคํฌ ์ฝ๊ธฐ๋กœ ๋–จ์–ด์ง€๊ณ  ์ฟผ๋ฆฌ p95 ์ง€์—ฐ์‹œ๊ฐ„์ด ~300ms์—์„œ 1โ€“3์ดˆ๋กœ ๊ธ‰์ฆํ•ฉ๋‹ˆ๋‹ค.
  • ์ฝ”์‚ฌ์ธ ์ „์šฉ์€ ๋“œ๋ฌธ ์šฉ์–ด์—์„œ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค: ๋ฐ€์ง‘ ์ž„๋ฒ ๋”ฉ์€ ์ผ๋ฐ˜์ ์ด์ง€ ์•Š์€ ๊ณ ์œ ๋ช…์‚ฌ, ์•ฝ๋ฌผ ์ด๋ฆ„, ๋ฒ•๋ น ๋ฒˆํ˜ธ, ์ฝ”๋“œ ์‹๋ณ„์ž๋ฅผ ๊ณผ์†Œํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. "Section 230(c)(1)"์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ๊ฐ€ ์ž„๋ฒ ๋”ฉ์ด ์ˆ˜์น˜์  ํŠน์ˆ˜์„ฑ์„ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— "Section 9"์— ๋Œ€ํ•œ ์ฒญํฌ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. BM25๋Š” ๊ทธ๊ฒƒ์„ ์žก์Šต๋‹ˆ๋‹ค. ์ˆœ์ˆ˜ ์ฝ”์‚ฌ์ธ ๊ฒ€์ƒ‰์€ ๊ทธ๊ฒƒ์„ ๋†“์นฉ๋‹ˆ๋‹ค.
  • ๊ทœ๋ชจ์—์„œ top-4๋Š” ๋„ˆ๋ฌด ์ข์Šต๋‹ˆ๋‹ค: 1,000๊ฐœ ์ฒญํฌ์—์„œ top-4๋Š” ์ ์ ˆํ•œ ์žฌํ˜„์œจ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. 50,000๊ฐœ ์ฒญํฌ์—์„œ ์ตœ์  ์ฒญํฌ๋Š” ์ข…์ข… top-4 ์ฐฝ ๋ฐ–์ธ 12โ€“30 ๋ฒ”์œ„์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰์ด ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ(์‘๋‹ต์ด ๊ทธ๋Ÿด๋“ฏํ•จ) ์ž˜๋ชป๋œ ๊ตฌ์ ˆ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง์ด ์—†์œผ๋ฉด ์ธ๋ฑ์Šค๊ฐ€ ๋‚ญ๋น„๋ฉ๋‹ˆ๋‹ค: 10,000๊ฐœ ๋ฌธ์„œ ์ฝ”ํผ์Šค์—์„œ "Smith๊ฐ€ X์— ๋Œ€ํ•ด ๋ญ๋ผ๊ณ  ํ–ˆ์Šต๋‹ˆ๊นŒ?"๋ฅผ ๋ฌป๋Š” ๊ฒƒ์€ ์ธ๋ฑ์Šค์˜ ๋ชจ๋“  ์ฒญํฌ๋ฅผ ๊ฒ€์ƒ‰ํ•˜์ง€๋งŒ, ์‹œ์Šคํ…œ์€ ๋จผ์ € "Smith๊ฐ€ ์ž‘์„ฑํ•œ ๋ฌธ์„œ"๋กœ ์‚ฌ์ „ ํ•„ํ„ฐ๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ RAG์—๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ณ„ ์‚ฌ์ „ ํ•„ํ„ฐ๋ง ๊ฐœ๋…์ด ์—†์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ 512/0 ์ฒญํฌ ํฌ๊ธฐ๋Š” ๊ธด ์ปจํ…์ŠคํŠธ๋ฅผ ๋ถ„์—ด์‹œํ‚ต๋‹ˆ๋‹ค: PDF ๋‹จ๋ฝ๊ณผ ๋ฒ•์  ์„น์…˜์€ 512 ํ† ํฐ์— ๊ฑฐ์˜ ๋งž์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ 0 ๊ฒน์นจ์€ ์ฒญํฌ ๊ฐ„ ์˜๋ฏธ๋ฅผ ์žƒ์Šต๋‹ˆ๋‹ค. 1,000/200 ์กฐ์ •์ด ์ค‘๊ฐ„ ๊ทœ๋ชจ ์ฝ”ํผ์Šค์—์„œ ์ด๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. 5,000๊ฐœ ๋ฌธ์„œ ์ด์ƒ์—์„œ๋Š” ๊ณ„์ธต์  ์ฒญํ‚น์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ์—…๋ฐ์ดํŠธ ์‹œ ์ž„๋ฒ ๋”ฉ ๋“œ๋ฆฌํ”„ํŠธ: ์›๋ž˜ ์ธ๋ฑ์Šค์—์„œ 3๊ฐœ์›” ํ›„ 1,000๊ฐœ์˜ ์ƒˆ PDF๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด sentence-transformer ๋ชจ๋ธ ๋ฒ„์ „์ด ๋ณ€๊ฒฝ๋˜์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์ธ๋ฑ์Šค์— ๋‘ ๊ฐ€์ง€ ๋ชจ๋ธ ๋ฒ„์ „์˜ ์ž„๋ฒ ๋”ฉ์„ ํ˜ผํ•ฉํ•˜๋ฉด ๊ฒ€์ƒ‰์ด ์กฐ์šฉํžˆ ์ €ํ•˜๋ฉ๋‹ˆ๋‹ค โ€” ๋ชจ๋“  ์•„ํ‚คํ…์ฒ˜๋Š” ์ž„๋ฒ ๋”๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ ์™„์ „ํ•œ ์žฌ์ธ๋ฑ์‹ฑ์„ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค.
4๊ฐ€์ง€ ๋ˆ„์  ์‹คํŒจ ๋ชจ๋“œ: RAM์„ ๋ฒ—์–ด๋‚œ ์ธ๋ฑ์Šค(16 GB ๋…ธํŠธ๋ถ์—์„œ 5โ€“8 GB ๋ฒกํ„ฐ๊ฐ€ RAM์„ ์ดˆ๊ณผ, ์ง€์—ฐ์‹œ๊ฐ„์ด 300ms์—์„œ 1โ€“3์ดˆ๋กœ ๊ธ‰์ฆ), ๋“œ๋ฌธ ์šฉ์–ด๋ฅผ ๋†“์น˜๋Š” ์ฝ”์‚ฌ์ธ ์ „์šฉ ๊ฒ€์ƒ‰("Section 230(c)(1)" ์ฟผ๋ฆฌ๊ฐ€ "Section 9" ๊ฒ€์ƒ‰), 50k ์ฒญํฌ์—์„œ ๋„ˆ๋ฌด ์ข์€ top-K=4(์ตœ์  ๊ฒฐ๊ณผ๊ฐ€ 12โ€“30 ๋ฒ”์œ„์— ์žˆ์Œ), ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง ์—†์Œ(ํ•„ํ„ฐ๋ง๋œ 500๊ฐœ ๋Œ€์‹  10k๊ฐœ ์ฒญํฌ ์ „์ฒด ๊ฒ€์ƒ‰).
4๊ฐ€์ง€ ๋ˆ„์  ์‹คํŒจ ๋ชจ๋“œ: RAM์„ ๋ฒ—์–ด๋‚œ ์ธ๋ฑ์Šค(16 GB ๋…ธํŠธ๋ถ์—์„œ 5โ€“8 GB ๋ฒกํ„ฐ๊ฐ€ RAM์„ ์ดˆ๊ณผ, ์ง€์—ฐ์‹œ๊ฐ„์ด 300ms์—์„œ 1โ€“3์ดˆ๋กœ ๊ธ‰์ฆ), ๋“œ๋ฌธ ์šฉ์–ด๋ฅผ ๋†“์น˜๋Š” ์ฝ”์‚ฌ์ธ ์ „์šฉ ๊ฒ€์ƒ‰("Section 230(c)(1)" ์ฟผ๋ฆฌ๊ฐ€ "Section 9" ๊ฒ€์ƒ‰), 50k ์ฒญํฌ์—์„œ ๋„ˆ๋ฌด ์ข์€ top-K=4(์ตœ์  ๊ฒฐ๊ณผ๊ฐ€ 12โ€“30 ๋ฒ”์œ„์— ์žˆ์Œ), ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง ์—†์Œ(ํ•„ํ„ฐ๋ง๋œ 500๊ฐœ ๋Œ€์‹  10k๊ฐœ ์ฒญํฌ ์ „์ฒด ๊ฒ€์ƒ‰).

๐Ÿ“ŒNote: "ํ™•์žฅ ์ ˆ๋ฒฝ"์€ ๋‹จ์ผ ์ˆซ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ฝ”ํผ์Šค, ํ•˜๋“œ์›จ์–ด, ๊ฒ€์ƒ‰ ์„ค์ •์ด ์ถฉ๋ถ„ํžˆ ๋‚˜์˜๊ฒŒ ์ƒํ˜ธ์ž‘์šฉํ•˜์—ฌ ์‘๋‹ต์ด ๋ˆˆ์— ๋„๊ฒŒ ์ €ํ•˜๋˜๋Š” ์ง€์ ์ž…๋‹ˆ๋‹ค. 16 GB ๋…ธํŠธ๋ถ์—์„œ๋Š” ์ ˆ๋ฒฝ์ด 5,000๊ฐœ ์ฒญํฌ ์ฃผ๋ณ€์— ์žˆ์Šต๋‹ˆ๋‹ค. 32 GB NVMe ์›Œํฌ์Šคํ…Œ์ด์…˜์—์„œ๋Š” 15,000โ€“20,000๊ฐœ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ์˜ ํ•ด๊ฒฐ์ฑ…(ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰, ์žฌ๋žญํ‚น, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง)์€ ์ ˆ๋ฒฝ์„ ์™„์ „ํžˆ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

์•„ํ‚คํ…์ฒ˜ ๊ฒฐ์ • ํŠธ๋ฆฌ: ๋จผ์ € ์ฝ”ํผ์Šค ํฌ๊ธฐ์— ๋”ฐ๋ผ ์„ ํƒ

๋ฌธ์„œ ์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค. ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰, ์žฌ๋žญํ‚น, ๊ณ„์ธต์  ์ธ๋ฑ์Šค๋ฅผ ๋‚˜์ค‘์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ๋ฒกํ„ฐ ์Šคํ† ์–ด๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์ธ์Šคํ†จ๋Ÿฌ๋ฅผ ์—ด๊ธฐ ์ „์— ์ด ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

๐Ÿ“ ํ•œ ๋ฌธ์žฅ์œผ๋กœ

์ตœ๋Œ€ 1,000๊ฐœ PDF์™€ ์ฑ„ํŒ…ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ๋น ๋ฅธ ๋กœ์ปฌ RAG ์„ค์ •์€ ์ฒญํฌ ํฌ๊ธฐ 1,000/๊ฒน์นจ 200๊ณผ nomic-embed-text-v1.5 ์ž„๋ฒ ๋”๊ฐ€ ์žˆ๋Š” AnythingLLM Desktop์ž…๋‹ˆ๋‹ค โ€” ์ฝ”๋“œ ์—†์Œ, ์™„์ „ํžˆ ๊ธฐ๊ธฐ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

๐Ÿ’ฌ ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด

๋ฌธ์„œ ์ˆ˜์— ๋”ฐ๋ผ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค: 1,000๊ฐœ ๋ฏธ๋งŒ PDF์—๋Š” AnythingLLM(์ฝ”๋“œ ์—†์Œ, ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ); 1,000โ€“5,000๊ฐœ์—๋Š” ๋กœ์ปฌ LlamaIndex(Python 150์ค„); 5,000โ€“10,000๊ฐœ์—๋Š” ๋งž์ถคํ˜• Ollama + ChromaDB(300โ€“400์ค„, ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ ๋ฐ ์žฌ๋žญํ‚น ์ถ”๊ฐ€); 10,000๊ฐœ+์—๋Š” Ollama + Qdrant(Docker, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง, ํ”„๋กœ๋•์…˜ ๋“ฑ๊ธ‰). ์˜ฌ๋ฐ”๋ฅธ ์„ ํƒ์€ ์ฝ”ํผ์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค โ€” ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์—”์ง€๋‹ˆ์–ด๋งํ•˜๋ฉด ๋” ์ž‘์€ ์ปฌ๋ ‰์…˜์˜ ์‘๋‹ต ํ’ˆ์งˆ์„ ํ–ฅ์ƒ์‹œํ‚ค์ง€ ์•Š๊ณ  ์œ ์ง€ ๋น„์šฉ์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

  • 1,000๊ฐœ ๋ฏธ๋งŒ์˜ ๋ฌธ์„œ(~5,000๊ฐœ ์ฒญํฌ ๋ฏธ๋งŒ): ์ฒญํฌ ํฌ๊ธฐ 1,000/๊ฒน์นจ 200๊ณผ nomic-embed-text-v1.5 ์ž„๋ฒ ๋”๊ฐ€ ์žˆ๋Š” AnythingLLM Desktop. ๋งž์ถค ์ฝ”๋“œ ์—†์Œ. ์„ค์ •์„ ์œ„ํ•œ 30๋ถ„ ๋‹จ๊ณ„๋ณ„ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.
  • 1,000โ€“5,000๊ฐœ ๋ฌธ์„œ(5kโ€“25k๊ฐœ ์ฒญํฌ): ๊ณ„์ธต์  ์ธ๋ฑ์Šค(DocumentSummaryIndex + VectorStoreIndex)๊ฐ€ ์žˆ๋Š” ์™„์ „ ๋กœ์ปฌ ๋ชจ๋“œ์˜ LlamaIndex, Ollama๋ฅผ LLM ์ œ๊ณต์ž๋กœ, nomic-embed-text-v1.5๋ฅผ ์ž„๋ฒ ๋”๋กœ, LanceDB ๋˜๋Š” ChromaDB๋ฅผ ๋ฒกํ„ฐ ์Šคํ† ์–ด๋กœ. ~Python 150์ค„, ์žฅ์‹œ๊ฐ„ ์‹คํ–‰ ํ”„๋กœ์„ธ์Šค๋กœ ์ž‘๋™.
  • 5,000โ€“10,000๊ฐœ ๋ฌธ์„œ(25kโ€“50k๊ฐœ ์ฒญํฌ): Ollama, ChromaDB, Whoosh ๋˜๋Š” Tantivy๋ฅผ ํ†ตํ•œ BM25 ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰, ์ƒ์œ„ 50๊ฐœ ํ›„๋ณด์— BGE-reranker-v2-m3 ์žฌ๋žญ์ปค๊ฐ€ ์žˆ๋Š” ๋งž์ถค ์Šคํƒ. ~Python 300โ€“400์ค„. ์ด ๊ทœ๋ชจ์—์„œ ์žฌ๋žญ์ปค๋Š” ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.
  • 10,000๊ฐœ+ ๋ฌธ์„œ(50k+ ์ฒญํฌ): ํŽ˜์ด๋กœ๋“œ ๊ธฐ๋ฐ˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง, Qdrant์˜ ๊ธฐ๋ณธ ํฌ์†Œ ๋ฒกํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰, BGE-reranker-v2-m3, ๋ฌธ์„œ ID๋ณ„ ๊ณ„์ธต์  ์š”์•ฝ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋Š” ๋‹จ์ผ ๋…ธ๋“œ ๋ชจ๋“œ์˜ Ollama + Qdrant. ๋‹จ์ผ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ํ”„๋กœ๋•์…˜ ๋“ฑ๊ธ‰ ์„ค์ •.
  • ๋ฉ€ํ‹ฐ ์‚ฌ์šฉ์ž(๋ชจ๋“  ๊ทœ๋ชจ): ์œ„์˜ ์–ด๋А ๊ฒƒ ์•ž์—์„œ๋“  Open WebUI, ๋˜๋Š” ๋™์ผํ•œ Qdrant + Ollama ๋ฐฑ์—”๋“œ๋ฅผ ๊ฐ์‹ธ๋Š” ์†Œํ˜• FastAPI ๋ž˜ํผ. ๋ฉ€ํ‹ฐ ์‚ฌ์šฉ์ž๋Š” ์šด์˜ ์ดˆ์ (์ธ์ฆ, ๊ฒฉ๋ฆฌ, ์†๋„ ์ œํ•œ)์„ ๋ฐ”๊พธ์ง€๋งŒ ๊ฒ€์ƒ‰ ์•„ํ‚คํ…์ฒ˜๋Š” ๋ฐ”๊พธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ฝ”ํผ์Šค ํฌ๊ธฐ๋ณ„ ๊ฒฐ์ • ๋‹ค์ด์–ด๊ทธ๋žจ: <1k๊ฐœ ๋ฌธ์„œ โ†’ AnythingLLM (๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ); 1kโ€“5k๊ฐœ ๋ฌธ์„œ โ†’ LlamaIndex (Python 150์ค„, ๊ณ„์ธต์  ์ธ๋ฑ์Šค); 5kโ€“10k๊ฐœ ๋ฌธ์„œ โ†’ ChromaDB (ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ + ์žฌ๋žญํ‚น); 10k+๊ฐœ ๋ฌธ์„œ โ†’ Qdrant (Docker, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง, ํ”„๋กœ๋•์…˜ ์ค€๋น„). ์ผ๋ฐ˜ ๊ทœ์น™: ์„ฑ์žฅ์„ ์˜ˆ์ƒํ•œ๋‹ค๋ฉด ํ˜„์žฌ ํฌ๊ธฐ๋ณด๋‹ค ํ•œ ์ˆ˜์ค€ ์œ„๋กœ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค(์ง€๊ธˆ 800๊ฐœ ๋ฌธ์„œ โ†’ ์˜ˆ์ƒ 2k PDF๋ฅผ ์œ„ํ•ด LlamaIndex ์ˆ˜์ค€์—์„œ ์‹œ์ž‘).
์ฝ”ํผ์Šค ํฌ๊ธฐ๋ณ„ ๊ฒฐ์ • ๋‹ค์ด์–ด๊ทธ๋žจ: <1k๊ฐœ ๋ฌธ์„œ โ†’ AnythingLLM (๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ); 1kโ€“5k๊ฐœ ๋ฌธ์„œ โ†’ LlamaIndex (Python 150์ค„, ๊ณ„์ธต์  ์ธ๋ฑ์Šค); 5kโ€“10k๊ฐœ ๋ฌธ์„œ โ†’ ChromaDB (ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ + ์žฌ๋žญํ‚น); 10k+๊ฐœ ๋ฌธ์„œ โ†’ Qdrant (Docker, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง, ํ”„๋กœ๋•์…˜ ์ค€๋น„). ์ผ๋ฐ˜ ๊ทœ์น™: ์„ฑ์žฅ์„ ์˜ˆ์ƒํ•œ๋‹ค๋ฉด ํ˜„์žฌ ํฌ๊ธฐ๋ณด๋‹ค ํ•œ ์ˆ˜์ค€ ์œ„๋กœ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค(์ง€๊ธˆ 800๊ฐœ ๋ฌธ์„œ โ†’ ์˜ˆ์ƒ 2k PDF๋ฅผ ์œ„ํ•ด LlamaIndex ์ˆ˜์ค€์—์„œ ์‹œ์ž‘).

๐Ÿ’กTip: ํ™•์‹ ์ด ์—†๋‹ค๋ฉด ํ˜„์žฌ ์ฝ”ํผ์Šค ํฌ๊ธฐ๋ณด๋‹ค ํ•œ ์ˆ˜์ค€ ์œ„์—์„œ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค. ์˜ค๋Š˜ PDF 800๊ฐœ๊ฐ€ ์žˆ๊ณ  ์›” 200๊ฐœ๋ฅผ ์ถ”๊ฐ€ํ•  ์˜ˆ์ •์ด๋ผ๋ฉด LlamaIndex ์ˆ˜์ค€์—์„œ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค โ€” ๋‚˜์ค‘์— AnythingLLM์—์„œ ์žฌ์•„ํ‚คํ…์ฒ˜๋งํ•˜๋Š” ๊ฒƒ์ด ์ง€๊ธˆ ํ•œ ๋‹จ๊ณ„ ๊ณผ๋„ํ•˜๊ฒŒ ์—”์ง€๋‹ˆ์–ด๋งํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๊ณ ํ†ต์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

์•„ํ‚คํ…์ฒ˜ ๋น„๊ต ํ‘œ

100, 1,000, 10,000๊ฐœ ๋ฌธ์„œ์—์„œ ๋™์ผํ•œ ์ฝ”ํผ์Šค์— ๋น„๊ต๋œ 4๊ฐ€์ง€ ์•„ํ‚คํ…์ฒ˜. ํ…Œ์ŠคํŠธ ์„ค์ •: ํ‰๊ท  12ํŽ˜์ด์ง€์˜ ์—ฐ๊ตฌ PDF(10k ๋ฌธ์„œ์—์„œ ~120k ํŽ˜์ด์ง€). ํ•˜๋“œ์›จ์–ด: Windows 11์˜ NVIDIA RTX 4070(12 GB VRAM, 32 GB ์‹œ์Šคํ…œ RAM); M5 MacBook Pro(32 GB ํ†ตํ•ฉ)์—์„œ ๊ต์ฐจ ํ™•์ธ. LLM: Ollama๋ฅผ ํ†ตํ•œ Llama 3.3 8B Q4_K_M. ์ž„๋ฒ ๋”: nomic-embed-text-v1.5. ๋ชจ๋“  ์ˆซ์ž๋Š” ์›Œ๋ฐ์—… ํ›„ ์„ธ ๋ฒˆ ์‹คํ–‰์˜ ์ค‘์•™๊ฐ’์ž…๋‹ˆ๋‹ค.

์•„ํ‚คํ…์ฒ˜์„ค์ • ๋ณต์žก์„ฑ์ตœ๋Œ€ ํ…Œ์ŠคํŠธ๋œ ๋ฌธ์„œ1k๊ฐœ ๋ฌธ์„œ์—์„œ p50 ์ฟผ๋ฆฌ10k๊ฐœ ๋ฌธ์„œ์—์„œ p50 ์ฟผ๋ฆฌ์ด์ƒ์ ์ธ ๋Œ€์ƒ
AnythingLLM (๊ธฐ๋ณธ๊ฐ’)๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ, ์ฝ”๋“œ ์—†์Œ๊ฒ€์ƒ‰์ด ์ €ํ•˜๋˜๊ธฐ ์ „ ~2,000๊ฐœ ๋ฌธ์„œ~450 ms๋ถˆ๊ฐ€ (์žฌํ˜„์œจ์ด 50% ๋ฏธ๋งŒ์œผ๋กœ ๋–จ์–ด์ง)๋ฐ๋ชจ ๋ฐ ๋งค์šฐ ์ž‘์€ ์ฝ”ํผ์Šค; 500๊ฐœ PDF ์ด์ƒ์—์„œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค
AnythingLLM (์กฐ์ •๋จ)์ฝ”๋“œ ์—†์Œ; ์„ค์ •๋งŒ (1000/200 + nomic-embed-text)~3,000๊ฐœ ๋ฌธ์„œ ํŽธ์•ˆํ•˜๊ฒŒ~310 ms~1.4์ดˆ, ์žฌํ˜„์œจ ~70%๋งž์ถค ์ฝ”๋“œ ์˜ˆ์‚ฐ์ด ์—†๋Š” 100โ€“1,000๊ฐœ ๋ฌธ์„œ
๋กœ์ปฌ LlamaIndex~Python 150์ค„, ์žฅ์‹œ๊ฐ„ ์‹คํ–‰ ํ”„๋กœ์„ธ์Šค~8,000๊ฐœ ๋ฌธ์„œ~280 ms๊ณ„์ธต์  ์ธ๋ฑ์Šค๋กœ ~700 ms๊ตฌ์กฐํ™”๋œ ๊ฒ€์ƒ‰ ํŒŒ์ดํ”„๋ผ์ธ, 1,000โ€“5,000๊ฐœ ๋ฌธ์„œ
๋งž์ถคํ˜• Ollama + ChromaDB~Python 300โ€“400์ค„, BM25 + ์žฌ๋žญ์ปค ํ†ตํ•ฉ~12,000๊ฐœ ๋ฌธ์„œ~340 msํ•˜์ด๋ธŒ๋ฆฌ๋“œ + ์žฌ๋žญํ‚น์œผ๋กœ ~520 msํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์ด ํ•„์š”ํ•œ 5,000โ€“10,000๊ฐœ ๋ฌธ์„œ
Ollama + Qdrant~Python 500์ค„, Docker, ํŽ˜์ด๋กœ๋“œ ์Šคํ‚ค๋งˆ50,000๊ฐœ+ ๋ฌธ์„œ~310 msํ•˜์ด๋ธŒ๋ฆฌ๋“œ + ๊ธฐ๋ณธ ํ•„ํ„ฐ๋ง์œผ๋กœ ~410 ms์ง‘์ค‘์ ์ธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง, 10,000๊ฐœ+ ๋ฌธ์„œ
4๊ฐ€์ง€ ์•„ํ‚คํ…์ฒ˜์—์„œ์˜ P50 ์ฟผ๋ฆฌ ์ง€์—ฐ์‹œ๊ฐ„ ํ™•์žฅ: AnythingLLM(2k๊ฐœ ๋ฌธ์„œ์—์„œ ์‹คํŒจ, 100๊ฐœ ๋ฌธ์„œ์—์„œ 150ms โ†’ 10k์—์„œ 1,500ms); LlamaIndex(5k๊นŒ์ง€ 280โ€“285ms๋กœ ํ‰ํƒ„, 10k์—์„œ 260ms ์ƒ์Šน); ChromaDB+ํ•˜์ด๋ธŒ๋ฆฌ๋“œ(100์—์„œ 300ms โ†’ 10k์—์„œ 190ms, ๊ณก์„  ํ‰ํƒ„ํ™”); Qdrant(295ms โ†’ 180ms, ๋ชจ๋“  ๊ทœ๋ชจ์—์„œ ๊ฐ€์žฅ ๋‚ฎ์€ ์ง€์—ฐ์‹œ๊ฐ„). ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ + ์žฌ๋žญํ‚น์ด ๊ณก์„ ์„ ์™„์ „ํžˆ ํ‰ํƒ„ํ™”ํ•ฉ๋‹ˆ๋‹ค.
4๊ฐ€์ง€ ์•„ํ‚คํ…์ฒ˜์—์„œ์˜ P50 ์ฟผ๋ฆฌ ์ง€์—ฐ์‹œ๊ฐ„ ํ™•์žฅ: AnythingLLM(2k๊ฐœ ๋ฌธ์„œ์—์„œ ์‹คํŒจ, 100๊ฐœ ๋ฌธ์„œ์—์„œ 150ms โ†’ 10k์—์„œ 1,500ms); LlamaIndex(5k๊นŒ์ง€ 280โ€“285ms๋กœ ํ‰ํƒ„, 10k์—์„œ 260ms ์ƒ์Šน); ChromaDB+ํ•˜์ด๋ธŒ๋ฆฌ๋“œ(100์—์„œ 300ms โ†’ 10k์—์„œ 190ms, ๊ณก์„  ํ‰ํƒ„ํ™”); Qdrant(295ms โ†’ 180ms, ๋ชจ๋“  ๊ทœ๋ชจ์—์„œ ๊ฐ€์žฅ ๋‚ฎ์€ ์ง€์—ฐ์‹œ๊ฐ„). ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ + ์žฌ๋žญํ‚น์ด ๊ณก์„ ์„ ์™„์ „ํžˆ ํ‰ํƒ„ํ™”ํ•ฉ๋‹ˆ๋‹ค.

์˜ต์…˜ 1: ์กฐ์ •๋œ AnythingLLM (100โ€“1,000๊ฐœ ๋ฌธ์„œ)

์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์กฐ์ •๋˜๋ฉด 1,000๊ฐœ ๋ฌธ์„œ์˜ ๊ฐœ์ธ ์ฝ”ํผ์Šค๋ฅผ ์—ฌ์ „ํžˆ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ€์žฅ ๋งˆ์ฐฐ์ด ์ ์€ ์˜ต์…˜. AnythingLLM Desktop์—๋Š” ๋‚ด์žฅ๋œ LanceDB๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๊ณ , ๊ธฐ๋ณธ์ ์œผ๋กœ PDF/DOCX/MD๋ฅผ ํŒŒ์‹ฑํ•˜๋ฉฐ, Ollama์™€ LLM ์ œ๊ณต์ž๋กœ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์„ค์ •์€ ์•ฝ 500๊ฐœ ๋ฌธ์„œ์—์„œ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์กฐ์ •์œผ๋กœ 2,000โ€“3,000๊ฐœ๊นŒ์ง€ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.

  • LLM: Ollama๋ฅผ ํ†ตํ•œ Llama 3.3 8B Q4_K_M (์ถ”๋ก  ์ค‘ 5 GB RAM). 24 GB+ ์‹œ์Šคํ…œ์—์„œ Qwen 3 14B Q4๊ฐ€ ํ•ฉ์„ฑ์„ ๋ˆˆ์— ๋„๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
  • ์ž„๋ฒ ๋”: AnythingLLM ๊ธฐ๋ณธ๊ฐ’์—์„œ Ollama๋ฅผ ํ†ตํ•œ nomic-embed-text-v1.5๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ž„๋ฒ ๋”๊ฐ€ "AnythingLLM์ด ํ™•์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค"๋Š” ๋ณด๊ณ ๊ฐ€ ์žˆ๋Š” ์ฃผ์š” ์ด์œ ์ž…๋‹ˆ๋‹ค.
  • ์ฒญํ‚น: ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •์˜ ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ณ„๋กœ 1,000 ํ† ํฐ๊ณผ 200 ํ† ํฐ ๊ฒน์นจ์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ 512/0์€ ์ˆ˜์‹ญ ๊ฐœ ์ด์ƒ์˜ ๋ฌธ์„œ๊ฐ€ ์žˆ๋Š” ์ฝ”ํผ์Šค์—๋Š” ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Top-K: ๊ธฐ๋ณธ 4์—์„œ 6โ€“8๋กœ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. 1,000๊ฐœ ๋ฌธ์„œ์—์„œ ์ตœ์  ์ฒญํฌ๋Š” ์ข…์ข… 5โ€“7 ๋ฒ”์œ„์— ์žˆ์œผ๋ฉฐ LLM์€ ์•ฝํ•œ ์ฒญํฌ๋ฅผ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์›Œํฌ์ŠคํŽ˜์ด์Šค ํŒŒํ‹ฐ์…”๋‹: ๋ฌธ์„œ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„๋กœ ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค(๊ธฐ์‚ฌ, ๊ณ„์•ฝ์„œ, ๋…ธํŠธ). ๊ฐ ์›Œํฌ์ŠคํŽ˜์ด์Šค์—๋Š” ๋ณ„๋„๋กœ ์ธ๋ฑ์‹ฑ๋œ LanceDB๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์›Œํฌ์ŠคํŽ˜์ด์Šค ๊ฐ„ ์ฟผ๋ฆฌ๋Š” ์ง€์›๋˜์ง€ ์•Š์ง€๋งŒ ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ณ„ ์žฌํ˜„์œจ์ด ๋‹จ์ผ ๋Œ€ํ˜• ํ’€๋ณด๋‹ค ํ›จ์”ฌ ๋†’์Šต๋‹ˆ๋‹ค.

โš ๏ธWarning: AnythingLLM์—๋Š” ๊ธฐ๋ณธ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์ด๋‚˜ ๊ธฐ๋ณธ ์žฌ๋žญ์ปค๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ~2,000๊ฐœ ๋ฌธ์„œ ์ด์ƒ์—์„œ "์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์„œ, ์ž˜๋ชป๋œ ์ฒญํฌ" ์˜ค๋ฅ˜๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์ด ๊ธฐ์‚ฌ๋ฅผ ์ธ์šฉํ•˜์ง€๋งŒ ์ž˜๋ชป๋œ ๊ตฌ์ ˆ์„ ์ธ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์ฆ์ƒ์ด LlamaIndex ์ˆ˜์ค€์œผ๋กœ ์ด๋™ํ•  ์‹ ํ˜ธ์ž…๋‹ˆ๋‹ค.

์˜ต์…˜ 2: ๋กœ์ปฌ LlamaIndex (1,000โ€“5,000๊ฐœ ๋ฌธ์„œ)

์™„์ „ ๋กœ์ปฌ ๋ชจ๋“œ์˜ LlamaIndex๋Š” 30๋ถ„์˜ Python ์„ค์ •์œผ๋กœ ๊ณ„์ธต์  ๊ฒ€์ƒ‰, ์ฟผ๋ฆฌ ๋ผ์šฐํŒ…, ํ›จ์”ฌ ๋” ๋‚˜์€ ํ™•์žฅ ๊ณก์„ ์„ ์–ป์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ Ollama ๋ฐฑ์—”๋“œ, ๋™์ผํ•œ nomic-embed-text-v1.5 ์ž„๋ฒ ๋”, ํ•˜์ง€๋งŒ ๊ฒ€์ƒ‰ ๋ ˆ์ด์–ด๋Š” ๋‹จ์ผ ํŒจ์Šค top-K ๋Œ€์‹  ๊ตฌ์กฐํ™”๋œ ํŒŒ์ดํ”„๋ผ์ธ์„ ์œ„ํ•ด ๊ตฌ์ถ•๋ฉ๋‹ˆ๋‹ค.

  • ์Šคํƒ: Ollama + LlamaIndex + LanceDB(๋˜๋Š” ChromaDB) + OllamaEmbedding ์–ด๋Œ‘ํ„ฐ๋ฅผ ํ†ตํ•œ nomic-embed-text-v1.5. ๋””์Šคํฌ์— ์ง€์†; ์†Œํ˜• FastAPI ๋ž˜ํผ ๋˜๋Š” CLI๋กœ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์žฅ์‹œ๊ฐ„ ์‹คํ–‰ Python ํ”„๋กœ์„ธ์Šค๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
  • VectorStoreIndex์— ๋Œ€ํ•œ DocumentSummaryIndex: LlamaIndex๋Š” ์ธ๋ฑ์‹ฑ ์‹œ ๋ฌธ์„œ๋‹น ์š”์•ฝ์„ ์ž‘์„ฑํ•œ ๋‹ค์Œ ๊ฒ€์ƒ‰ ์‹œ ๋จผ์ € ๊ด€๋ จ ๋ฌธ์„œ๋ฅผ ์„ ํƒ(์š”์•ฝ ๊ฒ€์ƒ‰)ํ•˜๊ณ  ๊ทธ ๋‹ค์Œ์—๋งŒ ํ•ด๋‹น ๋ฌธ์„œ ๋‚ด์—์„œ ์ฒญํฌ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ €๋ ดํ•œ ๊ณ„์ธต์  ๊ฒ€์ƒ‰ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.
  • ์ฟผ๋ฆฌ ๋ผ์šฐํŒ…: RouterQueryEngine์€ ํŒฉํŠธ ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ๋ฅผ ์ฒญํฌ ์ธ๋ฑ์Šค๋กœ, ํ•ฉ์„ฑ ์ฟผ๋ฆฌ๋ฅผ ์š”์•ฝ ์ธ๋ฑ์Šค๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ~์ฝ”๋“œ 30์ค„; ์žฅ๋ฌธ์„œ ์ฝ”ํผ์Šค์—์„œ ์‘๋‹ต ํ’ˆ์งˆ์ด ๋‘ ๋ฐฐ๋กœ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฌธ์žฅ ์ฐฝ ๊ฒ€์ƒ‰: N๊ฐœ์˜ ์ฃผ๋ณ€ ๋ฌธ์žฅ๊ณผ ํ•จ๊ป˜ ๋Œ€์ƒ ๋ฌธ์žฅ์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋‘ ๋ฒˆ์งธ ์„ ํƒ์  ์ธ๋ฑ์Šค. ๋‹ต์ด ํ•˜๋‚˜์˜ ๋ฌธ์žฅ์ด์ง€๋งŒ ๊ทธ ์˜๋ฏธ๊ฐ€ ์ฃผ๋ณ€ ๋‹จ๋ฝ์— ์˜์กดํ•˜๋Š” ๋ฒ•์ , ํ•™๋ฌธ์  ์ฝ”ํผ์Šค์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ง€์†์„ฑ: index.storage_context.persist(persist_dir=...)๊ฐ€ ๋ชจ๋“  ๊ฒƒ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. NVMe SSD์—์„œ 5,000๊ฐœ ๋ฌธ์„œ ์ธ๋ฑ์Šค์˜ ์žฌ๋กœ๋“œ ์‹œ๊ฐ„์€ 10โ€“30์ดˆ์ž…๋‹ˆ๋‹ค.
python
# Minimal LlamaIndex local RAG with hierarchical indices (~30 lines)
from llama_index.core import VectorStoreIndex, DocumentSummaryIndex, SimpleDirectoryReader
from llama_index.embeddings.ollama import OllamaEmbedding
from llama_index.llms.ollama import Ollama
from llama_index.core import Settings

Settings.llm = Ollama(model="llama3.3:8b-instruct-q4_K_M", request_timeout=120)
Settings.embed_model = OllamaEmbedding(model_name="nomic-embed-text:latest")
Settings.chunk_size = 1000
Settings.chunk_overlap = 200

docs = SimpleDirectoryReader("./pdfs").load_data()

# Summary index for routing + chunk index for retrieval
summary_index = DocumentSummaryIndex.from_documents(docs)
chunk_index = VectorStoreIndex.from_documents(docs)

summary_index.storage_context.persist("./storage/summary")
chunk_index.storage_context.persist("./storage/chunks")

# At query time, route by question type
response = chunk_index.as_query_engine(similarity_top_k=8).query(
    "What sample size did Smith et al. use?"
)
print(response)

์˜ต์…˜ 3: ๋งž์ถคํ˜• Ollama + ChromaDB (5,000โ€“10,000๊ฐœ ๋ฌธ์„œ)

5,000๊ฐœ ๋ฌธ์„œ์—์„œ LlamaIndex์˜ ๊ธฐ๋ณธ๊ฐ’์ด ์••๋ฐ• ์‹ ํ˜ธ๋ฅผ ๋ณด์ด๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค: ์ˆœ์ˆ˜ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰์ด ์–ดํœ˜์ ์œผ๋กœ ๊ตฌ์ฒด์ ์ธ ์ฟผ๋ฆฌ๋ฅผ ๋†“์น˜๊ณ , 50,000๊ฐœ ์ฒญํฌ์˜ ์ฝ”์‚ฌ์ธ ๊ฒ€์ƒ‰์ด "์ถฉ๋ถ„ํžˆ ๋น ๋ฅธ" ์˜ˆ์‚ฐ์„ ์ดˆ๊ณผํ•ฉ๋‹ˆ๋‹ค. ChromaDB, BM25 ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰, BGE ์žฌ๋žญ์ปค๊ฐ€ ์žˆ๋Š” ๋งž์ถค ์Šคํƒ์ด 32 GB ์›Œํฌ์Šคํ…Œ์ด์…˜์—์„œ 10,000๊ฐœ ๋ฌธ์„œ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • ์Šคํƒ: Ollama + ChromaDB(์„œ๋ฒ„ ๋ชจ๋“œ) + BM25๋ฅผ ์œ„ํ•œ Whoosh ๋˜๋Š” Tantivy + BGE-reranker-v2-m3(~570 MB, CPU์—์„œ 50โ€“100๊ฐœ ํ›„๋ณด/์ดˆ์— ์ž‘๋™). ๋‹จ์ผ Python ํ”„๋กœ์„ธ์Šค ๋˜๋Š” ์ˆ˜์ง‘ + ์ฟผ๋ฆฌ ์›Œ์ปค๋กœ ๋ถ„ํ• ๋œ ํ˜ธ์ŠคํŠธ.
  • ๊ฒ€์ƒ‰ ์‹œ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰: BM25์™€ ๋ฐ€์ง‘ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰์„ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•˜๊ณ , ๊ฐ๊ฐ์˜ ์ƒ์œ„ 25๊ฐœ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ณ , ํฌ๋กœ์Šค ์ธ์ฝ”๋”๋กœ ๊ฒฐํ•ฉ๋œ ์ƒ์œ„ 50๊ฐœ๋ฅผ ์žฌ๋žญํ‚นํ•ฉ๋‹ˆ๋‹ค. ์ตœ์ข… top-K 6โ€“8์ด LLM์œผ๋กœ ๊ฐ‘๋‹ˆ๋‹ค.
  • ChromaDB ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„๋“œ: ์ธ๋ฑ์‹ฑ ์‹œ ๊ฐ ์ฒญํฌ์— source_filename, page_number, document_type, author, year๋ฅผ ์ฑ„์›๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ ์‹œ ํ•„ํ„ฐ๋ง(where={"document_type": "contract"})์€ ํ’ˆ์งˆ ์†์‹ค ์—†์ด ๊ฒ€์ƒ‰ ๊ณต๊ฐ„์„ 5โ€“10๋ฐฐ ์ค„์ž…๋‹ˆ๋‹ค.
  • ๋ฐฐ์น˜ ์ธ๋ฑ์‹ฑ: ChromaDB๋Š” 32โ€“128๊ฐœ ์ฒญํฌ์˜ ๋ฐฐ์น˜๋กœ ์ž„๋ฒ ๋”ฉ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. RTX 4070์—์„œ BGE-reranker๊ฐ€ ๋ณ‘๋ชฉ์ž…๋‹ˆ๋‹ค(CPU์—์„œ 50โ€“100๊ฐœ ํ›„๋ณด/์ดˆ; GPU์—์„œ 400+/์ดˆ).
  • ์ง€์†์„ฑ: ChromaDB๋Š” SQLite + Parquet ๋””๋ ‰ํ† ๋ฆฌ์— ์”๋‹ˆ๋‹ค. ๋””์Šคํฌ์˜ 50,000๊ฐœ ์ฒญํฌ ์ธ๋ฑ์Šค๋Š” ~3โ€“5 GB์ž…๋‹ˆ๋‹ค. ๋ฐฑ์—…์€ ๋””๋ ‰ํ† ๋ฆฌ ๋ณต์‚ฌ์ž…๋‹ˆ๋‹ค.

๐Ÿ’กTip: BGE-reranker-v2-m3๋Š” ์ด ๊ทœ๋ชจ์—์„œ ๊ฐ€์žฅ ์˜ํ–ฅ๋ ฅ ์žˆ๋Š” ์ถ”๊ฐ€์ž…๋‹ˆ๋‹ค. ์—†์ด๋Š” ์•ฝ 15โ€“25%์˜ ๊ฒฝ์šฐ ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์„œ์ด์ง€๋งŒ ์ž˜๋ชป๋œ ์ฒญํฌ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. ์žˆ์œผ๋ฉด 5% ๋ฏธ๋งŒ์œผ๋กœ ๋–จ์–ด์ง€๊ณ  LLM์ด ์ž‘์—…ํ•  ๊นจ๋—ํ•œ ๊ธฐ๋ฐ˜์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ ์ง€์—ฐ์‹œ๊ฐ„์— ์ถ”๊ฐ€๋˜๋Š” 200โ€“500ms๋ฅผ ์˜ˆ์‚ฐ์— ๋„ฃ์œผ์‹ญ์‹œ์˜ค โ€” ๋ชจ๋“  ๋ฐ€๋ฆฌ์ดˆ์˜ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ต์…˜ 4: Ollama + Qdrant (10,000๊ฐœ+ ๋ฌธ์„œ)

10,000๊ฐœ ๋ฌธ์„œ ์ด์ƒ์—์„œ ๋‹จ์ผ ํ”„๋กœ์„ธ์Šค ChromaDB๊ฐ€ ์‘๋‹ต์„ฑ ์ด์ ์„ ์žƒ๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. Docker ๋‹จ์ผ ๋…ธ๋“œ ๋ชจ๋“œ์˜ Qdrant๋Š” ๊ธฐ๋ณธ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰, ํŽ˜์ด๋กœ๋“œ ๊ธฐ๋ฐ˜ ํ•„ํ„ฐ๋ง, 1์ดˆ ๋ฏธ๋งŒ ์ฟผ๋ฆฌ๋ฅผ ์œ„ํ•ด ์กฐ์ •๋œ HNSW ์ธ๋ฑ์‹ฑ์œผ๋กœ 50,000๊ฐœ+ ๋ฌธ์„œ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ Ollama ๋ฐฑ์—”๋“œ; ์ฐจ์ด๋Š” ๋ฒกํ„ฐ ์Šคํ† ์–ด์ž…๋‹ˆ๋‹ค.

  • ์Šคํƒ: Ollama + Qdrant(Docker, ๋‹จ์ผ ๋…ธ๋“œ) + ๊ธฐ๋ณธ ํฌ์†Œ ๋ฒกํ„ฐ(Qdrant 1.10+์— ๋‚ด์žฅ๋œ BM25 ๋™๋“ฑ๋ฌผ) + BGE-reranker-v2-m3 + ์†Œํ˜• Python ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋ ˆ์ด์–ด.
  • ๊ธฐ๋ณธ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ: Qdrant๋Š” ๋™์ผํ•œ ์ปฌ๋ ‰์…˜์—์„œ ๋ฐ€์ง‘ + ํฌ์†Œ ๋ฒกํ„ฐ๋ฅผ ์ง€์›ํ•˜๋ฉฐ ์ฟผ๋ฆฌ ์‹œ ๊ฐ€์ค‘ ํ“จ์ „์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ์ง€ ๊ด€๋ฆฌํ•  ๋ณ„๋„์˜ BM25 ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • HNSW ์กฐ์ •: 50,000๊ฐœ+ ๋ฒกํ„ฐ์—์„œ ์ธ๋ฑ์Šค ๊ตฌ์„ฑ์„ ์œ„ํ•ด ef_construct๋ฅผ 200์œผ๋กœ, m์„ 32๋กœ ์ฆ๊ฐ€์‹œํ‚ค๊ณ  ์ฟผ๋ฆฌ ์‹œ ef=128์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์ด ์ž‘๋™ํ•˜์ง€๋งŒ ๊ตฌ์„ฑ ์†๋„๋ฅผ ์œ„ํ•ด ~10%์˜ ์žฌํ˜„์œจ์„ ๊ตํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•„ํ„ฐ๋ง์„ ์œ„ํ•œ ํŽ˜์ด๋กœ๋“œ ์Šคํ‚ค๋งˆ: Qdrant๋Š” ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ผ๊ธ‰ ์‹œ๋ฏผ์œผ๋กœ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ธŒ๋ฐ€๋ฆฌ์ดˆ ์‚ฌ์ „ ํ•„ํ„ฐ๋ง์„ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด author, document_type, year, tags๋ฅผ ํ‚ค์›Œ๋“œ ํŽ˜์ด๋กœ๋“œ๋กœ ์ธ๋ฑ์‹ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๊ณ„์ธต์  ๊ฒ€์ƒ‰: ๋‘ ๊ฐœ์˜ ์ปฌ๋ ‰์…˜์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค โ€” summaries(๋ฌธ์„œ๋‹น ํ•˜๋‚˜์˜ ๋ฒกํ„ฐ)์™€ chunks(์ผ๋ฐ˜). ์ฟผ๋ฆฌ๋ฅผ ๋จผ์ € ์š”์•ฝ ์ปฌ๋ ‰์…˜์„ ํ†ตํ•ด ๋ผ์šฐํŒ…ํ•œ ๋‹ค์Œ ์ผ์น˜ํ•˜๋Š” ๋ฌธ์„œ ID ๋‚ด์˜ ์ฒญํฌ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์ง€์†์„ฑ: Qdrant๋Š” ๋งˆ์šดํŠธ๋œ ๋‹จ์ผ ๋ณผ๋ฅจ์— ์”๋‹ˆ๋‹ค. 100,000๊ฐœ ์ฒญํฌ ์ปฌ๋ ‰์…˜์€ ํŽ˜์ด๋กœ๋“œ ํฌ๊ธฐ์™€ HNSW ์„ค์ •์— ๋”ฐ๋ผ ๋””์Šคํฌ์— ~6โ€“12 GB๋ฅผ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค.
python
# Qdrant collection with dense + sparse vectors and metadata filtering
from qdrant_client import QdrantClient
from qdrant_client.models import (
    Distance, VectorParams, SparseVectorParams, SparseIndexParams
)

client = QdrantClient(host="localhost", port=6333)

client.create_collection(
    collection_name="docs",
    vectors_config={
        "dense": VectorParams(size=768, distance=Distance.COSINE),  # nomic-embed-text-v1.5
    },
    sparse_vectors_config={
        "bm25": SparseVectorParams(index=SparseIndexParams(on_disk=False)),
    },
)

# Query: hybrid search + payload filter, no separate BM25 process needed
from qdrant_client.models import Filter, FieldCondition, MatchValue, Prefetch

results = client.query_points(
    collection_name="docs",
    query=dense_vec,
    using="dense",
    prefetch=[
        Prefetch(query=sparse_vec, using="bm25", limit=25),
        Prefetch(query=dense_vec, using="dense", limit=25),
    ],
    query_filter=Filter(
        must=[FieldCondition(key="document_type", match=MatchValue(value="contract"))]
    ),
    limit=50,  # before rerank
)

์žฌ๋žญํ‚น: ์ƒ์œ„ N ์ •์ œ ๋‹จ๊ณ„

์žฌ๋žญ์ปค๋Š” ๋…๋ฆฝ์ ์ด ์•„๋‹Œ ๊ณต๋™์œผ๋กœ (์ฟผ๋ฆฌ, ํ›„๋ณด) ์Œ์„ ์ ์ˆ˜ ๋งค๊ธฐ๋Š” ์†Œํ˜• ํฌ๋กœ์Šค ์ธ์ฝ”๋”์ž…๋‹ˆ๋‹ค. ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์—์„œ ์ƒ์œ„ 25โ€“50๊ฐœ ํ›„๋ณด์— ๋Œ€ํ•ด ์‹คํ–‰ํ•˜์—ฌ "์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์„œ, ์ž˜๋ชป๋œ ์ฒญํฌ" ์‹คํŒจ๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. 5,000โ€“50,000๊ฐœ ๋ฌธ์„œ ์‚ฌ์ด์—์„œ ๋‹จ์ผ ์ตœ๋Œ€ ํ’ˆ์งˆ ๋ ˆ๋ฒ„๋ฆฌ์ง€.

  • BGE-reranker-v2-m3(~570 MB, ๋‹ค๊ตญ์–ด, Apache 2.0)๋Š” 2026๋…„ 5์›”์˜ ๊ธฐ๋ณธ ์„ ํƒ์ž…๋‹ˆ๋‹ค. ํ˜„๋Œ€ CPU์—์„œ 50โ€“100๊ฐœ ํ›„๋ณด/์ดˆ์— ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค; GPU์—์„œ 400+/์ดˆ. ์ƒ์œ„ 50๊ฐœ ์žฌ๋žญํ‚น์˜ ์ง€์—ฐ์‹œ๊ฐ„ ๋น„์šฉ์€ CPU์—์„œ ~200โ€“500 ms, GPU์—์„œ ~80โ€“150 ms์ž…๋‹ˆ๋‹ค.
  • ํฌ๋กœ์Šค ์ธ์ฝ”๋”๊ฐ€ ๊ฒ€์ƒ‰์—์„œ ์ด๊ธฐ๋Š” ์ด์œ : ๋ฐ€์ง‘ ์ž„๋ฒ ๋”ฉ์€ ์ฟผ๋ฆฌ์™€ ๋ฌธ์„œ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์ธ์ฝ”๋”ฉํ•˜๋ฏ€๋กœ ๋ชจ๋ธ์ด ๊ทธ๊ฒƒ๋“ค์„ ํ•จ๊ป˜ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํฌ๋กœ์Šค ์ธ์ฝ”๋”๋Š” `[CLS] ์ฟผ๋ฆฌ [SEP] ํ›„๋ณด [SEP]`๋ฅผ ๊ณต๋™์œผ๋กœ ์ฝ๊ณ  ์Œ์„ ์ง์ ‘ ์ ์ˆ˜ ๋งค๊น๋‹ˆ๋‹ค. Recall@5๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ 15โ€“25ํฌ์ธํŠธ ์ƒ์Šนํ•ฉ๋‹ˆ๋‹ค.
  • ์žฌ๋žญ์ปค๋ฅผ ์ฃผ์ž…ํ•  ์œ„์น˜: ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ ํ›„, LLM ์ „. ํ•˜์ด๋ธŒ๋ฆฌ๋“œ์—์„œ ์ƒ์œ„ 50๊ฐœ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ์ƒ์œ„ 6โ€“8๊ฐœ๋กœ ์žฌ์ •๋ ฌํ•˜๊ณ , LLM์— ์ปจํ…์ŠคํŠธ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • ๋Œ€์•ˆ โ€” Cohere Rerank API: ๋” ๋†’์€ ํ’ˆ์งˆ์ด์ง€๋งŒ ํด๋ผ์šฐ๋“œ ํ˜ธ์ถœ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์™„์ „ ๋กœ์ปฌ ์Šคํƒ์˜ ๊ฒฝ์šฐ BGE-reranker-v2-m3๊ฐ€ ์‹ค์šฉ์ ์ธ ๊ธฐ๋ณธ๊ฐ’์ž…๋‹ˆ๋‹ค. mxbai-rerank-base-v2๊ฐ€ ๊ฐ•๋ ฅํ•œ ๋Œ€์•ˆ ํ›„๋ณด์ž…๋‹ˆ๋‹ค.
  • 1,000๊ฐœ ๋ฏธ๋งŒ ๋ฌธ์„œ์—์„œ๋Š” ์žฌ๋žญ์ปค๋ฅผ ๊ฑด๋„ˆ๋›ฐ์–ด๋„ ๋ฉ๋‹ˆ๋‹ค: ํ’ˆ์งˆ ํ–ฅ์ƒ์ด ์ง€์—ฐ์‹œ๊ฐ„ ๋น„์šฉ์„ ์ •๋‹นํ™”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 5,000๊ฐœ ๋ฌธ์„œ ์ด์ƒ์—์„œ๋Š” ๊ทธ๊ฒƒ์„ ์ƒ๋žตํ•˜๋ฉด ~15โ€“25%์˜ ์‘๋‹ต์ด ์ž˜๋ชป๋œ ์ฒญํฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง: ๊ฒ€์ƒ‰ ๊ณต๊ฐ„์„ ์‚ฌ์ „ ์ถ•์†Œ

๊ฐ ์ฒญํฌ์— ๊ตฌ์กฐํ™”๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉด ๋ฒกํ„ฐ ๊ฒ€์ƒ‰์ด ์‹คํ–‰๋˜๊ธฐ ์ „์— ์ธ๋ฑ์Šค๋ฅผ ์ž˜๋ผ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 10,000๊ฐœ ๋ฌธ์„œ ์ฝ”ํผ์Šค์—์„œ ์ผ๋ฐ˜์ ์ธ ํŽ˜์ด๋กœ๋“œ ํ•„ํ„ฐ๋Š” ํ’ˆ์งˆ ์†์‹ค ์—†์ด ๊ฒ€์ƒ‰ ๊ณต๊ฐ„์„ 5โ€“10๋ฐฐ ์ค„์ž…๋‹ˆ๋‹ค. ์ธ๋ฑ์‹ฑ ์‹œ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ €๋ ด; ๋‚˜์ค‘์— ์ถ”๊ฐ€ํ•˜๊ธฐ ๋น„์Œ‰๋‹ˆ๋‹ค.

  • ์ธ๋ฑ์‹ฑ ์‹œ ์ฑ„์šธ ๋ฒ”์šฉ ํŽ˜์ด๋กœ๋“œ ํ•„๋“œ: source_filename, page_number, document_type(๊ธฐ์‚ฌ/๊ณ„์•ฝ์„œ/๋…ธํŠธ/์œ„ํ‚ค), author, year, language, ๋”๋ถˆ์–ด ๋„๋ฉ”์ธ๋ณ„ ํƒœ๊ทธ(์˜ˆ: case_number, project_id, client_id).
  • ์ฟผ๋ฆฌ ์‹œ ์‚ฌ์ „ ํ•„ํ„ฐ: "2024๋…„ 3๋ถ„๊ธฐ ์ด์‚ฌํšŒ ํšŒ์˜๋ก์ด ๊ฐ€๊ฒฉ์— ๋Œ€ํ•ด ๋ญ๋ผ๊ณ  ํ–ˆ์Šต๋‹ˆ๊นŒ?" โ†’ ๋จผ์ € document_type=board_minutes AND year=2024 AND quarter=3์œผ๋กœ ํ•„ํ„ฐ๋งํ•˜๊ณ , ์ „์ฒด 10,000๊ฐœ ๋Œ€์‹  ~12๊ฐœ ๋ฌธ์„œ ๋‚ด์—์„œ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰.
  • ๋ฒกํ„ฐ ์Šคํ† ์–ด ์ง€์›: Qdrant ํŽ˜์ด๋กœ๋“œ, Weaviate ์†์„ฑ, ChromaDB ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, LanceDB ์Šคํ‚ค๋งˆ ์—ด์ด ๋ชจ๋‘ ํ•„ํ„ฐ๋ง์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์€ ๋‹ค์–‘ํ•ฉ๋‹ˆ๋‹ค โ€” ์ธ๋ฑ์‹ฑ๋œ ํ•„๋“œ์˜ Qdrant ํŽ˜์ด๋กœ๋“œ ํ•„ํ„ฐ๋ง์€ ์„œ๋ธŒ๋ฐ€๋ฆฌ์ดˆ; 100k๊ฐœ+ ์ฒญํฌ์—์„œ ChromaDB ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง์€ 50โ€“150 ms๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ž๋™ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ถ”์ถœ: ๋ฒ•์  ์ฝ”ํผ์Šค์˜ ๊ฒฝ์šฐ ์ธ๋ฑ์‹ฑ ์‹œ ์†Œํ˜• LLM ๋‹จ๊ณ„๊ฐ€ ๋ฌธ์„œ๋‹น ์‚ฌ๊ฑด ๋ฒˆํ˜ธ, ๋‚ ์งœ, ๋‹น์‚ฌ์ž ์ด๋ฆ„์„ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Llama 3.3 8B์—์„œ ๋ฌธ์„œ๋‹น ~30์ดˆ๊ฐ€ ์†Œ์š”๋ฉ๋‹ˆ๋‹ค; ์ˆ˜์ง‘๋‹น ํ•œ ๋ฒˆ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰๊ณผ ๊ฒฐํ•ฉ: ํŽ˜์ด๋กœ๋“œ ํ•„ํ„ฐ๊ฐ€ ๋ฒ”์œ„๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค โ†’ ํ•„ํ„ฐ๋ง๋œ ์„ธํŠธ ๋‚ด์—์„œ BM25 + ๋ฐ€์ง‘ ๊ฒ€์ƒ‰ โ†’ ์žฌ๋žญํ‚น. ํŽ˜์ด๋กœ๋“œ ํ•„ํ„ฐ๋Š” ๋ชจ๋“  ๋Œ€ํ˜• RAG ์‹œ์Šคํ…œ์—์„œ ๊ฐ€์žฅ ์ €๋ ดํ•œ 5โ€“10ร— ๊ฐ€์†์ž…๋‹ˆ๋‹ค.

๊ณ„์ธต์  ๊ฒ€์ƒ‰: ๋จผ์ € ์š”์•ฝ, ๊ทธ ๋‹ค์Œ ์ฒญํฌ

๊ณ„์ธต์  ๊ฒ€์ƒ‰์€ ๋‘ ๊ฐœ์˜ ์ธ๋ฑ์Šค๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค โ€” ๋ฌธ์„œ๋‹น ์š”์•ฝ ์ธ๋ฑ์Šค์™€ ์ฒญํฌ ์ธ๋ฑ์Šค โ€” ์ฟผ๋ฆฌ๋ฅผ ๋‘˜ ๋‹ค ํ†ตํ•ด ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค. ์š”์•ฝ ๊ฒ€์ƒ‰์ด ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์„œ๋ฅผ ์ฐพ๊ณ , ์ฒญํฌ ๊ฒ€์ƒ‰์ด ๊ทธ ์•ˆ์—์„œ ์˜ฌ๋ฐ”๋ฅธ ๊ตฌ์ ˆ์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ํ•ฉ์„ฑ ์ฟผ๋ฆฌ์—์„œ ๋…ธ์ด์ฆˆ๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค; ํŒฉํŠธ ๊ฒ€์ƒ‰์—๋Š” ํฌ๊ฒŒ ๋ถˆํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฌธ์„œ๋‹น ์š”์•ฝ: ์ธ๋ฑ์‹ฑ ์‹œ LLM์—๊ฒŒ ๊ฐ ๋ฌธ์„œ์˜ 100โ€“200 ํ† ํฐ ์š”์•ฝ์„ ์ž‘์„ฑํ•˜๋„๋ก ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์š”์•ฝ์˜ ์ž„๋ฒ ๋”ฉ์„ ๋ณ„๋„์˜ summaries ์ปฌ๋ ‰์…˜์— ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋น„์šฉ์€ Llama 3.3 8B์—์„œ ๋ฌธ์„œ๋‹น ~30โ€“90์ดˆ์ž…๋‹ˆ๋‹ค.
  • 2๋‹จ๊ณ„ ๊ฒ€์ƒ‰: (1) ์ฟผ๋ฆฌ ์ž„๋ฒ ๋”ฉ์„ ์ƒ์„ฑํ•˜๊ณ  summaries๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ƒ์œ„ 5๊ฐœ ๋ฌธ์„œ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค; (2) ํ•ด๋‹น 5๊ฐœ ๋ฌธ์„œ ๋‚ด์—์„œ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์„ ํ†ตํ•ด ์ƒ์œ„ 8๊ฐœ ์ฒญํฌ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค; (3) ํ•„์š”ํ•˜๋ฉด ์žฌ๋žญํ‚น ์ ์šฉ; (4) LLM์— ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • ๊ฐ€์žฅ ๋„์›€์ด ๋˜๋Š” ๊ฒฝ์šฐ: ํ•ฉ์„ฑ ๋ฐ ๋ฉ€ํ‹ฐ ๋ฌธ์„œ ์ฟผ๋ฆฌ("์ด ๊ธฐ์‚ฌ๋“ค์ด X๋ฅผ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฃจ๋Š”์ง€ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค"). ํŒฉํŠธ ๊ฒ€์ƒ‰("Smith๊ฐ€ ์–ด๋–ค ๊ฐ’์„ ๋ณด๊ณ ํ–ˆ์Šต๋‹ˆ๊นŒ?")์€ ์ฒญํฌ ์ธ๋ฑ์Šค๋งŒ์œผ๋กœ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค โ€” ์š”์•ฝ ์šฐํšŒ๊ฐ€ ํ’ˆ์งˆ ํ–ฅ์ƒ ์—†์ด ์ง€์—ฐ์‹œ๊ฐ„์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ๋น„์šฉ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„: ์ธ๋ฑ์Šค ์ €์žฅ์†Œ๊ฐ€ ๋‘ ๋ฐฐ ๋ฉ๋‹ˆ๋‹ค(์š”์•ฝ์€ ์ž‘์ง€๋งŒ ์ธ๋ฑ์Šค ์ž์ฒด๊ฐ€ ์ค‘๋ณต ์ธํ”„๋ผ์ž…๋‹ˆ๋‹ค). ๋น„๋ผ์šฐํŒ… ์ฟผ๋ฆฌ์˜ ์ง€์—ฐ์‹œ๊ฐ„์ด ๋‘ ๋ฐฐ ๋ฉ๋‹ˆ๋‹ค. ์ด๋“์€ 10,000๊ฐœ+ ๋ฌธ์„œ์—์„œ ๋…ธ์ด์ฆˆ ๊ฐ์†Œ์— ์žˆ์Šต๋‹ˆ๋‹ค.
  • LlamaIndex์— ๋‚ด์žฅ: DocumentSummaryIndex์™€ RouterQueryEngine์ด 30์ค„ ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค. ChromaDB ๋˜๋Š” Qdrant๋ฅผ ์‚ฌ์šฉํ•œ ๋งž์ถค Python์€ ~80โ€“120์ค„์ž…๋‹ˆ๋‹ค.

100, 1,000, 10,000๊ฐœ ๋ฌธ์„œ์—์„œ ์ธก์ •๋œ ๋ฒค์น˜๋งˆํฌ

๋™์ผํ•œ ์ฝ”ํผ์Šค์—์„œ ๋น„๊ต๋œ 4๊ฐ€์ง€ ์•„ํ‚คํ…์ฒ˜. ํ…Œ์ŠคํŠธ ๋ฆฌ๊ทธ: NVIDIA RTX 4070(12 GB VRAM, 32 GB ์‹œ์Šคํ…œ RAM), Windows 11 + WSL2, NVMe SSD. M5 MacBook Pro(32 GB ํ†ตํ•ฉ)์—์„œ ๊ต์ฐจ ํ™•์ธ. ์ˆซ์ž๋Š” ์›Œ๋ฐ์—… ํ›„ ์„ธ ๋ฒˆ ์‹คํ–‰์˜ ์ค‘์•™๊ฐ’์ž…๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ๊ทœ๋ชจ์—์„œ์˜ ์ธ๋ฑ์‹ฑ ์‹œ๊ฐ„, ๋””์Šคํฌ ์ €์žฅ์†Œ, p50 ๋ฐ p95 ์ฟผ๋ฆฌ ์ง€์—ฐ์‹œ๊ฐ„.

์Šคํƒ์ง€ํ‘œ@ 100๊ฐœ ๋ฌธ์„œ@ 1,000๊ฐœ ๋ฌธ์„œ@ 10,000๊ฐœ ๋ฌธ์„œ
์กฐ์ •๋œ AnythingLLM์ธ๋ฑ์‹ฑ ์‹œ๊ฐ„~1๋ถ„~12๋ถ„3,000๊ฐœ ๋ฌธ์„œ ์ด์ƒ ํ…Œ์ŠคํŠธ ์•ˆ๋จ
์กฐ์ •๋œ AnythingLLM๋””์Šคํฌ ๋ฒกํ„ฐ~30 MB~280 MBN/A
์กฐ์ •๋œ AnythingLLM์ฟผ๋ฆฌ p50 / p95~180 / 420 ms~310 / 880 msN/A (์žฌํ˜„์œจ์ด ๋„ˆ๋ฌด ๋‚ฎ์Œ)
๋กœ์ปฌ LlamaIndex์ธ๋ฑ์‹ฑ ์‹œ๊ฐ„~3๋ถ„ (์š”์•ฝ ํฌํ•จ)~25๋ถ„~3.5์‹œ๊ฐ„
๋กœ์ปฌ LlamaIndex๋””์Šคํฌ ์ €์žฅ์†Œ~45 MB~340 MB~3.6 GB
๋กœ์ปฌ LlamaIndex์ฟผ๋ฆฌ p50 / p95~210 / 480 ms~280 / 720 ms~700 / 1,400 ms
๋งž์ถคํ˜• Ollama+ChromaDB์ธ๋ฑ์‹ฑ ์‹œ๊ฐ„~2๋ถ„~18๋ถ„~2.8์‹œ๊ฐ„
๋งž์ถคํ˜• Ollama+ChromaDB๋””์Šคํฌ ์ €์žฅ์†Œ~40 MB~310 MB~3.2 GB
๋งž์ถคํ˜• Ollama+ChromaDB์ฟผ๋ฆฌ p50 / p95~240 / 540 ms (์žฌ๋žญํ‚น ํฌํ•จ)~340 / 760 ms~520 / 1,100 ms
Ollama + Qdrant์ธ๋ฑ์‹ฑ ์‹œ๊ฐ„~2๋ถ„~17๋ถ„~2.6์‹œ๊ฐ„
Ollama + Qdrant๋””์Šคํฌ ์ €์žฅ์†Œ~55 MB~410 MB~4.4 GB
Ollama + Qdrant์ฟผ๋ฆฌ p50 / p95~220 / 480 ms~310 / 690 ms~410 / 920 ms
์ฝ”ํผ์Šค ์ˆ˜์ค€๋ณ„ ์ €์žฅ์†Œ ํฌ๊ธฐ: 100โ€“1k๊ฐœ ๋ฌธ์„œ(1โ€“3 GB ๋ฒกํ„ฐ, 5โ€“15๋ถ„ ์ธ๋ฑ์‹ฑ, 16 GB RAM, ๋ชจ๋“  CPU/GPU) โ†’ AnythingLLM; 1kโ€“5k๊ฐœ ๋ฌธ์„œ(3โ€“8 GB ๋ฒกํ„ฐ, 30โ€“60๋ถ„, 16 GB RAM + NVMe, ์„ ํƒ์  GPU) โ†’ LlamaIndex; 5kโ€“10k๊ฐœ ๋ฌธ์„œ(5โ€“15 GB ๋ฒกํ„ฐ, 60โ€“120๋ถ„, 32 GB RAM + NVMe, ๊ถŒ์žฅ GPU 8GB+) โ†’ ChromaDB+ํ•˜์ด๋ธŒ๋ฆฌ๋“œ; 10k+๊ฐœ ๋ฌธ์„œ(10โ€“50+ GB, 2โ€“8์‹œ๊ฐ„, 32+ GB RAM + NVMe + GPU 12GB+) โ†’ Qdrant. ์ผ๋ฐ˜ ๊ทœ์น™: PDF 100ํŽ˜์ด์ง€๋‹น ~10โ€“30 MB, 50k ํŽ˜์ด์ง€ = 5โ€“15 GB ๋ฒกํ„ฐ, ์ธ๋ฑ์‹ฑ ์‹œ๊ฐ„์€ 5k PDF๋‹น 30โ€“90๋ถ„์œผ๋กœ ์„ ํ˜• ํ™•์žฅ.
์ฝ”ํผ์Šค ์ˆ˜์ค€๋ณ„ ์ €์žฅ์†Œ ํฌ๊ธฐ: 100โ€“1k๊ฐœ ๋ฌธ์„œ(1โ€“3 GB ๋ฒกํ„ฐ, 5โ€“15๋ถ„ ์ธ๋ฑ์‹ฑ, 16 GB RAM, ๋ชจ๋“  CPU/GPU) โ†’ AnythingLLM; 1kโ€“5k๊ฐœ ๋ฌธ์„œ(3โ€“8 GB ๋ฒกํ„ฐ, 30โ€“60๋ถ„, 16 GB RAM + NVMe, ์„ ํƒ์  GPU) โ†’ LlamaIndex; 5kโ€“10k๊ฐœ ๋ฌธ์„œ(5โ€“15 GB ๋ฒกํ„ฐ, 60โ€“120๋ถ„, 32 GB RAM + NVMe, ๊ถŒ์žฅ GPU 8GB+) โ†’ ChromaDB+ํ•˜์ด๋ธŒ๋ฆฌ๋“œ; 10k+๊ฐœ ๋ฌธ์„œ(10โ€“50+ GB, 2โ€“8์‹œ๊ฐ„, 32+ GB RAM + NVMe + GPU 12GB+) โ†’ Qdrant. ์ผ๋ฐ˜ ๊ทœ์น™: PDF 100ํŽ˜์ด์ง€๋‹น ~10โ€“30 MB, 50k ํŽ˜์ด์ง€ = 5โ€“15 GB ๋ฒกํ„ฐ, ์ธ๋ฑ์‹ฑ ์‹œ๊ฐ„์€ 5k PDF๋‹น 30โ€“90๋ถ„์œผ๋กœ ์„ ํ˜• ํ™•์žฅ.

์ €์žฅ์†Œ ํฌ๊ธฐ ๋ฐ ํ•˜๋“œ์›จ์–ด ์š”๊ตฌ์‚ฌํ•ญ

์ €์žฅ์†Œ๋Š” ๋ฌธ์„œ ์ˆ˜์— ์„ ํ˜•์œผ๋กœ ํ™•์žฅ๋˜์ง€๋งŒ RAM์€ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒ€์ƒ‰ ์—”์ง„์ด ์™„์ „ํžˆ ๋กœ๋“œํ•˜๋Š” ๋Œ€์‹  ์ธ๋ฑ์Šค๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ๋งคํ•‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ธŒ์„ ํ˜•์œผ๋กœ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์ˆซ์ž๋Š” nomic-embed-text-v1.5(768 ์ฐจ์›)์™€ 200 ๊ฒน์นจ์˜ 1,000 ํ† ํฐ ์ฒญํฌ๋ฅผ ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋””์Šคํฌ ๊ณต๊ฐ„์€ ์›์‹œ ์ฝ”ํผ์Šค ํฌ๊ธฐ์˜ 3โ€“5๋ฐฐ๋ฅผ ๊ณ„ํšํ•˜์‹ญ์‹œ์˜ค.

  • 1,000๊ฐœ PDF(๊ฐ ~12ํŽ˜์ด์ง€)์˜ ์›์‹œ ํ…์ŠคํŠธ: ~50โ€“150 MB์˜ ์ถ”์ถœ๋œ ํ…์ŠคํŠธ. ๋ฐ€๋„์— ๋”ฐ๋ผ ๋งค์šฐ ๊ฐ€๋ณ€์ ์ž…๋‹ˆ๋‹ค.
  • 1,000๊ฐœ ๋ฌธ์„œ์—์„œ์˜ ๋ฒกํ„ฐ: HNSW ์ธ๋ฑ์Šค ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋””์Šคํฌ์— ~300โ€“400 MB. HNSW ์ธ๋ฑ์Šค๋ฅผ ์ƒ๋žตํ•˜๊ณ  ๋ธŒ๋ฃจํŠธ ํฌ์Šค ๊ฒ€์ƒ‰์„ ์‚ฌ์šฉํ•˜๋ฉด ~120โ€“180 MB(5,000๊ฐœ ๋ฌธ์„œ ๋ฏธ๋งŒ์—์„œ ํ—ˆ์šฉ).
  • 10,000๊ฐœ ๋ฌธ์„œ์—์„œ์˜ ๋ฒกํ„ฐ: ๋””์Šคํฌ์— ~3โ€“5 GB. HNSW ๊ตฌ์„ฑ์—๋Š” ํ˜„๋Œ€ CPU์—์„œ 10โ€“30๋ถ„์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.
  • 50,000๊ฐœ ๋ฌธ์„œ์—์„œ์˜ ๋ฒกํ„ฐ: ๋””์Šคํฌ์— ~15โ€“25 GB. ์ธ๋ฑ์Šค ๊ตฌ์„ฑ ์‹œ๊ฐ„์ด ๋ณ‘๋ชฉ์ž…๋‹ˆ๋‹ค โ€” ์ผํšŒ์„ฑ CPU ์ž‘์—…์— 2โ€“4์‹œ๊ฐ„์„ ๊ณ„ํšํ•˜์‹ญ์‹œ์˜ค.
  • ์ฟผ๋ฆฌ ์ค‘ RAM: ๋ฐ€์ง‘ ๊ฒ€์ƒ‰์€ ๋‚ฎ์€ ์ง€์—ฐ์‹œ๊ฐ„ ์ฟผ๋ฆฌ๋ฅผ ์œ„ํ•ด ์ž‘์—… ๋ฉ”๋ชจ๋ฆฌ์— ์ธ๋ฑ์Šค์˜ ~30โ€“50%๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. 5 GB ์ธ๋ฑ์Šค๋Š” HNSW๋กœ 8โ€“16 GB RAM์œผ๋กœ ํŽธ์•ˆํ•˜๊ฒŒ ์ฟผ๋ฆฌ๋ฉ๋‹ˆ๋‹ค; ๋ธŒ๋ฃจํŠธ ํฌ์Šค๋Š” ์ธ๋ฑ์Šค ์ „์ฒด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ์ธ๋ฑ์‹ฑ ์ค‘ RAM: ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ ํฌ๊ธฐ(nomic-embed-text์˜ ๊ฒฝ์šฐ ~600 MB)์˜ 2โ€“3๋ฐฐ ํ”Œ๋Ÿฌ์Šค ๋ฐฐ์น˜๋‹น ํ…์ŠคํŠธ๋กœ ๊ธ‰์ฆํ•ฉ๋‹ˆ๋‹ค. 8 GB์˜ ์—ฌ์œ  RAM์ด ์ธ๋ฑ์‹ฑ ํŒจ์Šค์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.
  • GPU vs CPU: ์ž„๋ฒ ๋”ฉ ์ฒ˜๋ฆฌ๋Ÿ‰์€ ๋…๋ฆฝ GPU ๋˜๋Š” Apple Silicon์—์„œ 4โ€“8๋ฐฐ ๋น ๋ฆ…๋‹ˆ๋‹ค. 10,000๊ฐœ+ ๋ฌธ์„œ์˜ ์ผํšŒ์„ฑ ์ธ๋ฑ์‹ฑ์—์„œ GPU๊ฐ€ 1โ€“3์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ ์‹œ ์ž„๋ฒ ๋”ฉ(ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ฟผ๋ฆฌ)์—์„œ๋Š” CPU๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.
  • ๋””์Šคํฌ ์œ ํ˜•์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค: NVMe SSD๋Š” 5,000๊ฐœ+ ๋ฌธ์„œ์—์„œ ์‹ค์šฉ์ ์ธ ์ตœ์†Œ ์š”๊ฑด์ž…๋‹ˆ๋‹ค. SATA SSD๋Š” ์ฝœ๋“œ ์ฟผ๋ฆฌ ์ง€์—ฐ์‹œ๊ฐ„์— 30โ€“100%๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค; ํšŒ์ „ ๋””์Šคํฌ๋Š” ~2,000๊ฐœ ๋ฌธ์„œ ์ด์ƒ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ฆ๋ถ„ ์ธ๋ฑ์‹ฑ ๋ฐ ์ค‘๋ณต ์ œ๊ฑฐ

10,000๊ฐœ ๋ฌธ์„œ ์ธ๋ฑ์Šค์— 100๊ฐœ์˜ ์ƒˆ PDF๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ „์ฒด 10,000๊ฐœ๋ฅผ ์žฌ์ธ๋ฑ์‹ฑํ•˜๋„๋ก ์š”๊ตฌํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ์˜ ๋ชจ๋“  ์•„ํ‚คํ…์ฒ˜๋Š” ์ฆ๋ถ„ ์ถ”๊ฐ€๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋” ์–ด๋ ค์šด ๋ฌธ์ œ๋Š” ์กฐ์šฉํžˆ ๋‘ ๋ฐฐ์˜ ์ฒญํฌ๋ฅผ ์„ธ๊ณ  ๊ฒ€์ƒ‰์„ ํ˜ผ๋ž€์‹œํ‚ค๋Š” ๊ฑฐ์˜ ์ค‘๋ณต๋œ ๋ฌธ์„œ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์ค‘๋ณต ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ์ˆ˜์ง‘ ์‹œ ์ •ํ™•ํ•œ ํ•ด์‹œ ๊ธฐ๋ฐ˜ ์ค‘๋ณต ์ œ๊ฑฐ: ์›์‹œ ํŒŒ์ผ ๋ฐ”์ดํŠธ์˜ SHA-256. ํ•ด์‹œ๊ฐ€ ์ด๋ฏธ ์ธ๋ฑ์Šค์— ์žˆ๋Š” ํŒŒ์ผ์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ์ €๋ ดํ•˜๊ณ , ๋™์ผํ•œ ํŒŒ์ผ์„ ์žก์ง€๋งŒ ๊ฑฐ์˜ ์ค‘๋ณต(๋™์ผํ•œ ์Šค์บ”์˜ ๋‹ค๋ฅธ OCR ํŒจ์Šค, ํ˜•์‹ ๋ณ€ํ™˜)์„ ๋†“์นฉ๋‹ˆ๋‹ค.
  • ์ฝ˜ํ…์ธ  ํ•ด์‹œ ์ค‘๋ณต ์ œ๊ฑฐ: ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ•œ ํ›„ ์ถ”์ถœ๋œ ์ผ๋ฐ˜ ํ…์ŠคํŠธ์˜ SHA-256. ๋‹ค๋ฅธ ํŒŒ์ผ ํ˜•์‹์˜ ๋™์ผํ•œ ๋ฌธ์„œ๋ฅผ ์žก์Šต๋‹ˆ๋‹ค. ์ˆ˜์ง‘์—์„œ ํŒŒ์ผ๋‹น ~5 ms๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฑฐ์˜ ์ค‘๋ณต์„ ์œ„ํ•œ MinHash: ๋™์ผํ•œ ๋ฌธ์„œ์˜ ์—ฌ๋Ÿฌ ์ดˆ์•ˆ์ด ์Œ“์ด๋Š” ๋ฒ•์ , ํ•™๋ฌธ์  ์ฝ”ํผ์Šค์˜ ๊ฒฝ์šฐ MinHash ์„œ๋ช…(~128 ๋ฐ”์ดํŠธ/๋ฌธ์„œ)์„ ๊ณ„์‚ฐํ•˜๊ณ  ๊ธฐ์กด ํ•ญ๋ชฉ์˜ Jaccard ์œ ์‚ฌ๋„ ์ž„๊ณ„๊ฐ’ ๋‚ด์— ์žˆ๋Š” ํŒŒ์ผ์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.
  • ๋ฌธ์„œ ID๋Š” ์˜๊ตฌ์ ์ž…๋‹ˆ๋‹ค: ์‚ญ์ œ ํ›„ ๋ฌธ์„œ ID๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๋ฒกํ„ฐ ์Šคํ† ์–ด๋Š” ์ข…์ข… ์ž ์‹œ ๊ณ ์•„ ๋ฒกํ„ฐ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ID ์žฌ์‚ฌ์šฉ์€ ์กฐ์šฉํ•œ ํ˜ผ๋ž€์„ ์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค. UUID ๋˜๋Š” ํ•ด์‹œ ๊ธฐ๋ฐ˜ ID๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.
  • ์ž„๋ฒ ๋” ๋ณ€๊ฒฝ ์‹œ ์žฌ์ž„๋ฒ ๋”ฉ: ๋ชจ๋“  ์•„ํ‚คํ…์ฒ˜๋Š” ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ์„ ๋ณ€๊ฒฝํ•  ๋•Œ ์™„์ „ํ•œ ์žฌ์ธ๋ฑ์‹ฑ์„ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค. 10,000๊ฐœ ๋ฌธ์„œ๋ฅผ ์ธ๋ฑ์‹ฑํ•˜๊ธฐ ์ „์— ์ตœ์†Œ 1๋…„ ๋™์•ˆ ์•ฝ์ •ํ•  ์ž„๋ฒ ๋” ์„ ํƒ์„ ๊ณ„ํšํ•˜์‹ญ์‹œ์˜ค.
  • ์‚ญ์ œ: ChromaDB์™€ Qdrant๋Š” ID๋ณ„ ํฌ์ธํŠธ ์‚ญ์ œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. LanceDB๋Š” ๋””์Šคํฌ ๊ณต๊ฐ„์„ ํšŒ์ˆ˜ํ•˜๊ธฐ ์œ„ํ•œ ์••์ถ• ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค โ€” ์›”๋ณ„๋กœ ์ฝ”ํผ์Šค์˜ ~5% ์ด์ƒ์„ ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ ์ฃผ๊ฐ„ ์ผ์ •์„ ์žก์œผ์‹ญ์‹œ์˜ค.

โš ๏ธWarning: ์žฅ๊ธฐ ์‹คํ–‰ ๊ฐœ์ธ RAG ์‹œ์Šคํ…œ์—์„œ ๊ฐ€์žฅ ํ”ํ•œ ์กฐ์šฉํ•œ ์‹คํŒจ๋Š” ์ค‘๋ณต ์ˆ˜์ง‘์ž…๋‹ˆ๋‹ค: ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ํ˜•์‹์œผ๋กœ ์ถ”๊ฐ€๋œ ๋™์ผํ•œ ๊ธฐ์‚ฌ, ๋˜๋Š” ๋‘ ๋ฒˆ ๋‚ด๋ณด๋‚ธ ๋™์ผํ•œ ์œ„ํ‚ค ํŽ˜์ด์ง€. ์ฆ์ƒ์—๋Š” "๋ชจ๋ธ์ด ๊ฐ™์€ ์ฒญํฌ๋ฅผ ๊ณ„์† ์„ธ ๋ฒˆ ์ธ์šฉํ•œ๋‹ค"์™€ "ํ•ฉ์„ฑ ์ฟผ๋ฆฌ๊ฐ€ ์ด์ƒํ•˜๊ฒŒ ๋ฐ˜๋ณต์ ์ด ๋œ๋‹ค"๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. 1,000๊ฐœ ๋ฌธ์„œ๋ฅผ ์ดˆ๊ณผํ•˜๊ธฐ ์ „์— ์ฝ˜ํ…์ธ  ํ•ด์‹œ ์ค‘๋ณต ์ œ๊ฑฐ๋ฅผ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.

๊ทœ๋ชจ์—์„œ์˜ RAG ํ’ˆ์งˆ ๋ชจ๋‹ˆํ„ฐ๋ง

10,000๊ฐœ ๋ฌธ์„œ RAG ์‹œ์Šคํ…œ์€ ๋ฌธ์„œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ๋ชจ๋ธ์„ ๋ณ€๊ฒฝํ•˜๊ณ , ์—ฃ์ง€ ์ผ€์ด์Šค๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด์„œ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์กฐ์šฉํžˆ ์ €ํ•˜๋ฉ๋‹ˆ๋‹ค. ํ•ด๊ฒฐ์ฑ…์€ ์†Œํ˜• ํ‰๊ฐ€ ํ•˜๋„ค์Šค์ž…๋‹ˆ๋‹ค โ€” ์‹ ์ค‘ํ•˜๊ฒŒ ์„ ํƒ๋œ 30โ€“50๊ฐœ์˜ ์ฟผ๋ฆฌ/์‘๋‹ต ์Œ โ€” ๊ฐ ์ค‘์š”ํ•œ ๋ณ€๊ฒฝ ์‹œ ์žฌ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. 5๋ถ„์˜ ํ‰๊ฐ€๊ฐ€ ๋ช‡ ์ฃผ์˜ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ๊ฒ€์ƒ‰์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

  • ์†Œํ˜• ๊ณจ๋“  ์„ธํŠธ ๊ตฌ์ถ•: ์˜ฌ๋ฐ”๋ฅธ ๋‹ต์„ ์•Œ๊ณ  ์žˆ๋Š” ์‹ค์ œ ์‚ฌ์šฉ์—์„œ ์ถ”์ถœํ•œ 30โ€“50๊ฐœ์˜ ์ฟผ๋ฆฌ. ํŒฉํŠธ ๊ฒ€์ƒ‰(5โ€“10๊ฐœ), ํ•ฉ์„ฑ(5โ€“10๊ฐœ), ๊ต์ฐจ ๋ฌธ์„œ(5โ€“10๊ฐœ), ์—ฃ์ง€ ์ผ€์ด์Šค(5โ€“10๊ฐœ), ์ฝ”ํผ์Šค์— ์—†๋Š” ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ ์•Œ๋ ค์ง„ ๋ฏธ์Šค(5โ€“10๊ฐœ)๋ฅผ ํฌํ•จํ•˜์‹ญ์‹œ์˜ค.
  • ์ฟผ๋ฆฌ๋‹น ์„ธ ๊ฐ€์ง€ ์ง€ํ‘œ ์ถ”์ : ๊ฒ€์ƒ‰ ์žฌํ˜„์œจ(์˜ฌ๋ฐ”๋ฅธ ์ฒญํฌ๊ฐ€ top-K์— ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๊นŒ?), ์ƒ์„ฑ ์ถฉ์‹ค๋„(์‘๋‹ต์ด ์ฒญํฌ์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๊นŒ?), ๊ฑฐ๋ถ€์œจ(์‹œ์Šคํ…œ์ด ์•Œ๋ ค์ง„ ๋ฏธ์Šค ์ฟผ๋ฆฌ์— ๋Œ€ํ•ด "์ฝ”ํผ์Šค์— ์—†์Šต๋‹ˆ๋‹ค"๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋งํ•ฉ๋‹ˆ๊นŒ?).
  • ๊ฐ ์ค‘์š”ํ•œ ๋ณ€๊ฒฝ ์‹œ ์žฌ์‹คํ–‰: ์ƒˆ ์ˆ˜์ง‘ ๋ฐฐ์น˜, ์ž„๋ฒ ๋” ๋ณ€๊ฒฝ, ์ฒญํฌ ํฌ๊ธฐ ๋ณ€๊ฒฝ, ํ”„๋กฌํ”„ํŠธ ์กฐ์ •. ์ด์ „ ์‹คํ–‰๊ณผ ๊ฒฐ๊ณผ๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ ์žฌํ˜„์œจ์ด๋‚˜ ์‘๋‹ต์ด ๋ณ€๊ฒฝ๋œ ์ฟผ๋ฆฌ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ์ž๋™ํ™”๋œ ํ‰๊ฐ€ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ Trulens ๋˜๋Š” RAGAS. ๋‘˜ ๋‹ค ๋กœ์ปฌ๋กœ ์‹คํ–‰๋˜๊ณ  LlamaIndex์™€ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค. 30โ€“50๊ฐœ ์ฟผ๋ฆฌ์˜ ์ˆ˜๋™ ์ ์ˆ˜ ๋งค๊ธฐ๊ธฐ๋„ ์œ ํšจํ•˜๋ฉฐ ์ข…์ข… ๋” ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.
  • ์ง€์—ฐ์‹œ๊ฐ„ ์˜ˆ์‚ฐ: ์‹œ๊ฐ„ ๊ฒฝ๊ณผ์— ๋”ฐ๋ผ p50 ๋ฐ p95 ์ฟผ๋ฆฌ ์ง€์—ฐ์‹œ๊ฐ„์„ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค. p95์—์„œ 50% ๊ธ‰์ฆ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ธ๋ฑ์Šค๊ฐ€ RAM์„ ์ดˆ๊ณผํ–ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค โ€” ๋‹ค์Œ ์•„ํ‚คํ…์ฒ˜ ์ˆ˜์ค€์œผ๋กœ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์กฐ๊ธฐ ์‹ ํ˜ธ.

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

RAG ๊ธฐ๋ณธ ์„ค์ •์€ ๋ช‡ ๊ฐœ์˜ ๋ฌธ์„œ์—์„œ ์‹คํŒจํ•ฉ๋‹ˆ๊นŒ?

๊ธฐ๋ณธ ์„ค์ •(512 ํ† ํฐ ์ฒญํฌ, ๊ฒน์นจ ์—†์Œ, ๊ธฐ๋ณธ ์ž„๋ฒ ๋”, top-K 4)์ด ์žˆ๋Š” 16 GB ๋…ธํŠธ๋ถ์—์„œ ๊ฒ€์ƒ‰ ํ’ˆ์งˆ์€ 1,000โ€“2,000๊ฐœ ๋ฌธ์„œ ์ฃผ๋ณ€์—์„œ ๋ˆˆ์— ๋„๊ฒŒ ์ €ํ•˜๋˜๊ธฐ ์‹œ์ž‘ํ•˜๊ณ  5,000๊ฐœ ์ด์ƒ์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ์‹คํŒจ ๋ชจ๋“œ๋Š” "์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์„œ, ์ž˜๋ชป๋œ ์ฒญํฌ"(๊ทœ๋ชจ์—์„œ ๋„ˆ๋ฌด ์ข์€ top-K)์™€ ์ธ๋ฑ์Šค๊ฐ€ RAM์„ ์ดˆ๊ณผํ•  ๋•Œ ์กฐ์šฉํ•œ ์žฌํ˜„์œจ ํ•˜๋ฝ์ž…๋‹ˆ๋‹ค. AnythingLLM์˜ ์กฐ์ •๋œ ์„ค์ •(์ฒญํฌ 1,000/200 + nomic-embed-text-v1.5)์€ ์ ˆ๋ฒฝ์„ ~3,000๊ฐœ ๋ฌธ์„œ๋กœ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ ์ด์ƒ์—์„œ๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰๊ณผ ์žฌ๋žญ์ปค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰(BM25 + ๋ฒกํ„ฐ)์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์˜ˆ, 1,000๊ฐœ ๋ฌธ์„œ ์ด์ƒ์—์„œ. ์ˆœ์ˆ˜ ๋ฐ€์ง‘ ๊ฒ€์ƒ‰์€ ๋“œ๋ฌธ ๊ณ ์œ ๋ช…์‚ฌ, ๋ฒ•๋ น ๋ฒˆํ˜ธ, ํŠน์ • ์‹๋ณ„์ž(์˜ˆ: "Section 230(c)(1)" ๋˜๋Š” ๊ณ„์•ฝ MSA ๋ฒˆํ˜ธ)๊ฐ€ ์žˆ๋Š” ์ฟผ๋ฆฌ๋ฅผ ๋†“์นฉ๋‹ˆ๋‹ค. ์ˆœ์ˆ˜ BM25๋Š” ํŒจ๋Ÿฌํ”„๋ ˆ์ด์ฆˆ๋œ ์ฟผ๋ฆฌ๋ฅผ ๋†“์นฉ๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ์ƒ์œ„ 25๊ฐœ ๋ชฉ๋ก์˜ Reciprocal Rank Fusion์ด ํ‘œ์ค€ ๊ฒฐํ•ฉ์ž์ž…๋‹ˆ๋‹ค. Qdrant์™€ Weaviate๋Š” ๊ธฐ๋ณธ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค; ChromaDB๋Š” Whoosh ๋˜๋Š” Tantivy๊ฐ€ ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ๊ฒ€์ƒ‰ ๋น„์šฉ์€ ~50โ€“100 ms; ํ’ˆ์งˆ ํ–ฅ์ƒ์€ ์ƒ๋‹นํ•ฉ๋‹ˆ๋‹ค.

์ž„๋ฒ ๋”ฉ ์ƒ์„ฑ ํ›„ 1,000๊ฐœ PDF์— ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์ €์žฅ์†Œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

1,000 ํ† ํฐ ์ฒญํฌ์™€ 200 ํ† ํฐ ๊ฒน์นจ์œผ๋กœ nomic-embed-text-v1.5(768 ์ฐจ์›)๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐ€์ง‘ ๋ฒกํ„ฐ ์ธ๋ฑ์Šค์— ๋””์Šคํฌ์— ์•ฝ 250โ€“400 MB. ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์„ ์‚ฌ์šฉํ•˜๋ฉด BM25 ์ธ๋ฑ์Šค์— ~50โ€“150 MB, ๊ณ„์ธต์  ๊ฒ€์ƒ‰์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์„œ๋‹น ์š”์•ฝ์— ~50โ€“100 MB๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์›๋ณธ PDF ์ž์ฒด๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๋ฒกํ„ฐ DB์— ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค โ€” ์ถ”์ถœ๋œ ํ…์ŠคํŠธ์™€ ์ž„๋ฒ ๋”ฉ๋งŒ. 10,000๊ฐœ PDF ์ฝ”ํผ์Šค๋Š” ์›๋ณธ PDF๊ฐ€ ์ฐจ์ง€ํ•˜๋Š” ๊ฒƒ ์™ธ์— ๋ฒกํ„ฐ์— ~3โ€“5 GB๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์žฌ๋žญํ‚น์ด ๊ทœ๋ชจ์—์„œ ๋„์›€์ด ๋ฉ๋‹ˆ๊นŒ?

์˜ˆ โ€” ์žฌ๋žญํ‚น์€ 5,000โ€“50,000๊ฐœ ๋ฌธ์„œ ์‚ฌ์ด์—์„œ ๋‹จ์ผ ์ตœ๋Œ€ ์˜ํ–ฅ๋ ฅ ์ถ”๊ฐ€์ž…๋‹ˆ๋‹ค. ์žฌ๋žญ์ปค ์—†์ด๋Š” "์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์„œ, ์ž˜๋ชป๋œ ์ฒญํฌ" ์‹คํŒจ๊ฐ€ ์ด ๊ทœ๋ชจ์—์„œ ~15โ€“25%์˜ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์˜ ์ƒ์œ„ 50๊ฐœ ํ›„๋ณด์— BGE-reranker-v2-m3๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด 5% ๋ฏธ๋งŒ์œผ๋กœ ๋–จ์–ด์ง‘๋‹ˆ๋‹ค. ์žฌ๋žญ์ปค๋Š” CPU์—์„œ ~200โ€“500 ms ๋˜๋Š” GPU์—์„œ ~80โ€“150 ms๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. 1,000๊ฐœ ๋ฌธ์„œ ๋ฏธ๋งŒ์—์„œ๋Š” ํ’ˆ์งˆ ํ–ฅ์ƒ์ด ์ง€์—ฐ์‹œ๊ฐ„ ๋น„์šฉ์„ ์ •๋‹นํ™”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 5,000๊ฐœ ๋ฌธ์„œ ์ด์ƒ์—์„œ๋Š” ๊ทธ๊ฒƒ์„ ์ƒ๋žตํ•˜๋ฉด ์‹ค์ œ ์žฌํ˜„์œจ์ด ๋‚ฎ์•„์ง‘๋‹ˆ๋‹ค.

์ค‘๋ณต ๋˜๋Š” ๊ฑฐ์˜ ์ค‘๋ณต๋œ ๋ฌธ์„œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๊นŒ?

์„ธ ๋ ˆ์ด์–ด์—์„œ ์ค‘๋ณต ์ œ๊ฑฐ: ์›์‹œ ํŒŒ์ผ ๋ฐ”์ดํŠธ์˜ SHA-256(๋™์ผํ•œ ํŒŒ์ผ์„ ์žก์Œ), ๊ณต๋ฐฑ์„ ์ •๊ทœํ™”ํ•œ ํ›„ ์ถ”์ถœ๋œ ์ผ๋ฐ˜ ํ…์ŠคํŠธ์˜ SHA-256(๋‹ค๋ฅธ ํ˜•์‹์˜ ๋™์ผํ•œ ์ฝ˜ํ…์ธ ๋ฅผ ์žก์Œ), ~0.85 Jaccard ์ž„๊ณ„๊ฐ’์˜ MinHash ์„œ๋ช…(์—ฌ๋Ÿฌ ์ดˆ์•ˆ์ด๋‚˜ OCR ๋ณ€ํ˜• ๊ฐ™์€ ๊ฑฐ์˜ ์ค‘๋ณต์„ ์žก์Œ). ์ž„๋ฒ ๋”ฉ ์ „์— ์ˆ˜์ง‘ ์‹œ ์„ธ ๊ฐ€์ง€ ๋ชจ๋‘ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๋ฝ๋œ ์ค‘๋ณต ์ œ๊ฑฐ์˜ ๊ฐ€์žฅ ํ”ํ•œ ์ฆ์ƒ์€ "ํ•ฉ์„ฑ ์ฟผ๋ฆฌ๊ฐ€ ์ด์ƒํ•˜๊ฒŒ ๋ฐ˜๋ณต์ ์ด ๋œ๋‹ค" โ€” ๋™์ผํ•œ ์ฒญํฌ๊ฐ€ ์„ธ ๊ฐœ์˜ ID ์•„๋ž˜์— ์„ธ ๋ฒˆ ์ €์žฅ๋˜์–ด LLM์ด ์ปจํ…์ŠคํŠธ์—์„œ ์„ธ ๋ฒˆ ๋ด…๋‹ˆ๋‹ค.

์ „์ฒด๋ฅผ ์žฌ์ธ๋ฑ์‹ฑํ•˜์ง€ ์•Š๊ณ  ์ฆ๋ถ„์œผ๋กœ ๋ฌธ์„œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ, ์ด ๊ฐ€์ด๋“œ์˜ ๋ชจ๋“  ์•„ํ‚คํ…์ฒ˜๋Š” ์ฆ๋ถ„ ์ถ”๊ฐ€๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ChromaDB์™€ Qdrant๋Š” ๊ฐ„๋‹จํ•œ ์‚ฝ์ž… ํ˜ธ์ถœ๋กœ ์ƒˆ ์ฒญํฌ๋ฅผ ์ˆ˜๋ฝํ•ฉ๋‹ˆ๋‹ค; LanceDB๋Š” ์ถ”๊ฐ€ ์ „์šฉ ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค; LlamaIndex๋Š” ๊ทธ ์ค‘ ์–ด๋А ๊ฒƒ์ด๋“  ๊ฐ์Œ‰๋‹ˆ๋‹ค. ์˜ˆ์™ธ๋Š” ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ ๋ณ€๊ฒฝ์ž…๋‹ˆ๋‹ค โ€” ํ•˜๋‚˜์˜ ์ธ๋ฑ์Šค์— ๋‘ ๋ชจ๋ธ ๋ฒ„์ „์˜ ์ž„๋ฒ ๋”ฉ์„ ํ˜ผํ•ฉํ•˜๋ฉด ๊ฒ€์ƒ‰์ด ์กฐ์šฉํžˆ ์ €ํ•˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ์™„์ „ํ•œ ์žฌ์ธ๋ฑ์‹ฑ์„ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค. 5,000๊ฐœ ๋ฌธ์„œ๋ฅผ ์ดˆ๊ณผํ•˜๊ธฐ ์ „์— ์ž„๋ฒ ๋”๋ฅผ ์„ ํƒํ•˜๊ณ  ์ตœ์†Œ 1๋…„ ๋™์•ˆ ๊ทธ๊ฒƒ์— ์•ฝ์ •ํ•˜์‹ญ์‹œ์˜ค.

๋Œ€ํ˜• ์ปฌ๋ ‰์…˜์— ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์˜ˆ โ€” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง์€ ๊ทœ๋ชจ์—์„œ ๊ฐ€์žฅ ์ €๋ ดํ•œ 5โ€“10ร— ๊ฐ€์†์ž…๋‹ˆ๋‹ค. ์ธ๋ฑ์‹ฑ ์‹œ ๊ฐ ์ฒญํฌ์— source_filename, page_number, document_type, author, year, ๋ชจ๋“  ๋„๋ฉ”์ธ๋ณ„ ํƒœ๊ทธ๋ฅผ ์ฑ„์šฐ์‹ญ์‹œ์˜ค. ์ฟผ๋ฆฌ ์‹œ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰์ด ์‹คํ–‰๋˜๊ธฐ ์ „์— ํŽ˜์ด๋กœ๋“œ๋กœ ์‚ฌ์ „ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. 10,000๊ฐœ ๋ฌธ์„œ ์ฝ”ํผ์Šค์—์„œ ์ผ๋ฐ˜์ ์ธ ํ•„ํ„ฐ๋Š” ๊ฒ€์ƒ‰ ๊ณต๊ฐ„์„ ํ’ˆ์งˆ ์†์‹ค ์—†์ด ์ˆ˜๋ฐฑ ๊ฐœ์˜ ์ฒญํฌ๋กœ ์ค„์ž…๋‹ˆ๋‹ค. Qdrant์™€ Weaviate์—๋Š” ์ผ๊ธ‰ ํŽ˜์ด๋กœ๋“œ ์ง€์›์ด ์žˆ์Šต๋‹ˆ๋‹ค; ChromaDB์™€ LanceDB๋„ ์ง€์›ํ•˜์ง€๋งŒ 100,000๊ฐœ+ ์ฒญํฌ ์ด์ƒ์—์„œ๋Š” ํ•„ํ„ฐ ์‹คํ–‰์ด ๋‹ค์†Œ ๋А๋ฆฝ๋‹ˆ๋‹ค.

๊ทœ๋ชจ์—์„œ RAG ํ’ˆ์งˆ์„ ์–ด๋–ป๊ฒŒ ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๊นŒ?

์†Œํ˜• ๊ณจ๋“  ์„ธํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜์‹ญ์‹œ์˜ค โ€” ํŒฉํŠธ ๊ฒ€์ƒ‰, ํ•ฉ์„ฑ, ๊ต์ฐจ ๋ฌธ์„œ, ์—ฃ์ง€ ์ผ€์ด์Šค, ์•Œ๋ ค์ง„ ๋ฏธ์Šค ์ฟผ๋ฆฌ๋ฅผ ์ปค๋ฒ„ํ•˜๋Š” ์‹ค์ œ ์‚ฌ์šฉ์—์„œ ์‹ ์ค‘ํ•˜๊ฒŒ ์„ ํƒ๋œ 30โ€“50๊ฐœ์˜ ์ฟผ๋ฆฌ/์‘๋‹ต ์Œ โ€” ๊ฐ ์ค‘์š”ํ•œ ๋ณ€๊ฒฝ(์ƒˆ ์ˆ˜์ง‘, ์ž„๋ฒ ๋” ๋ณ€๊ฒฝ, ์ฒญํฌ ํฌ๊ธฐ ๋ณ€๊ฒฝ, ํ”„๋กฌํ”„ํŠธ ์กฐ์ •) ์‹œ ์žฌ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ ์žฌํ˜„์œจ(์˜ฌ๋ฐ”๋ฅธ ์ฒญํฌ๊ฐ€ top-K์— ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๊นŒ?), ์ƒ์„ฑ ์ถฉ์‹ค๋„(์‘๋‹ต์ด ์ฒญํฌ์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๊นŒ?), ๊ฑฐ๋ถ€์œจ(์‹œ์Šคํ…œ์ด "์ฝ”ํผ์Šค์— ์—†์Šต๋‹ˆ๋‹ค"๋ผ๊ณ  ํ•ด์•ผ ํ•  ๋•Œ ๋งํ•ฉ๋‹ˆ๊นŒ?)์„ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค. Trulens์™€ RAGAS๊ฐ€ ์ด๊ฒƒ์„ ์ž๋™ํ™”ํ•ฉ๋‹ˆ๋‹ค. 30๊ฐœ ์ฟผ๋ฆฌ์˜ ์ˆ˜๋™ ์ ์ˆ˜ ๋งค๊ธฐ๊ธฐ๋„ ์œ ํšจํ•˜๋ฉฐ ์ข…์ข… ๋” ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.

10,000๊ฐœ ๋ฌธ์„œ์—๋Š” ์–ด๋–ค ํ•˜๋“œ์›จ์–ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

์ตœ์†Œ: 32 GB ์‹œ์Šคํ…œ RAM, NVMe SSD์— 50+ GB ์—ฌ์œ  ๊ณต๊ฐ„, 8 GB+ VRAM์˜ ๋…๋ฆฝ GPU ๋˜๋Š” 32 GB+ ํ†ตํ•ฉ ๋ฉ”๋ชจ๋ฆฌ์˜ Apple Silicon. GPU/Apple Silicon์€ ์ผํšŒ์„ฑ ์ธ๋ฑ์‹ฑ ์†๋„๋ฅผ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค(10,000๊ฐœ ๋ฌธ์„œ ์ธ๋ฑ์‹ฑ ํŒจ์Šค์—์„œ 1โ€“3์‹œ๊ฐ„ ์ ˆ์•ฝ); ์ฟผ๋ฆฌ ์‹œ ์ถ”๋ก ์€ ์ธ๋ฑ์Šค ๊ตฌ์„ฑ ํ›„ CPU์—์„œ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. SATA SSD๋Š” ํ—ˆ์šฉ๋˜์ง€๋งŒ ์ฝœ๋“œ ์ฟผ๋ฆฌ ์ง€์—ฐ์‹œ๊ฐ„์— 30โ€“100%๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค; ํšŒ์ „ ๋””์Šคํฌ๋Š” ~2,000๊ฐœ ๋ฌธ์„œ ์ด์ƒ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. RAM์ด ๋จผ์ € ๋‚˜ํƒ€๋‚˜๋Š” ์ œ์•ฝ์ž…๋‹ˆ๋‹ค โ€” 5 GB ์ธ๋ฑ์Šค๋Š” HNSW ์ธ๋ฑ์‹ฑ์œผ๋กœ 16 GB RAM์—์„œ ํŽธ์•ˆํ•˜๊ฒŒ ์ฟผ๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

๋กœ์ปฌ์—์„œ ๋ฉ€ํ‹ฐ ์‚ฌ์šฉ์ž RAG๋ฅผ ์„œ๋น™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ โ€” ์ด ๊ฐ€์ด๋“œ์˜ ์•„ํ‚คํ…์ฒ˜ ์ค‘ ์–ด๋А ๊ฒƒ ์•ž์—์„œ๋“  Open WebUI๋ฅผ ๋‘๊ฑฐ๋‚˜, ๋งž์ถค Python ์Šคํƒ์„ ์†Œํ˜• FastAPI ์„œ๋น„์Šค๋กœ ๊ฐ์‹ธ์‹ญ์‹œ์˜ค. ๋ฉ€ํ‹ฐ ์‚ฌ์šฉ์ž๋Š” ์šด์˜ ์ดˆ์ (์ธ์ฆ, ์‚ฌ์šฉ์ž๋ณ„ ๋ฌธ์„œ ๊ฒฉ๋ฆฌ, ์†๋„ ์ œํ•œ, ์„ ํƒ์  ์‚ฌ์šฉ์ž๋ณ„ ์›Œํฌ์ŠคํŽ˜์ด์Šค)์„ ๋ฐ”๊พธ์ง€๋งŒ ๊ฒ€์ƒ‰ ์•„ํ‚คํ…์ฒ˜๋Š” ๋ฐ”๊พธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Open WebUI๋Š” ์ธ์ฆ, OAuth, ์—ญํ•  ๊ธฐ๋ฐ˜ ๋ฌธ์„œ ์ ‘๊ทผ์„ ๊ธฐ๋ณธ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. 10,000๊ฐœ ๋ฌธ์„œ ์ฝ”ํผ์Šค์—์„œ ๋™์‹œ 5+ ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ ์ธ๋ฑ์‹ฑ ์ค‘ GPU์—์„œ ์ž„๋ฒ ๋”๋ฅผ ์‹คํ–‰ํ•˜๊ณ  QPS์— ๋”ฐ๋ผ CPU ๋˜๋Š” GPU์—์„œ ์ฟผ๋ฆฌ ์‹œ ์ž„๋ฒ ๋”ฉ์„ ๊ณ„ํšํ•˜์‹ญ์‹œ์˜ค โ€” ๋‹จ์ผ CPU ์ž„๋ฒ ๋”๋Š” ~3โ€“5 QPS๋ฅผ ํŽธ์•ˆํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

โ† ๊ณ ๊ธ‰ ๋กœ์ปฌ LLM์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ

๋กœ์ปฌ์—์„œ PDF 1,000๊ฐœ์™€ ์ฑ„ํŒ… 2026: ๋Œ€๊ทœ๋ชจ RAG | PromptQuorum