songminkyu/rag-beginner

This repository is a comprehensive learning platform designed to systematically train Retrieval-Augmented Generation (RAG) technology. It is based on the latest technology stack for 2025 and supports the EXAONE 4.0 model, which is specifically optimized for Korean language processing.

Python

1

43 commits

updated Aug 14, 2025

See the code

README

๐Ÿš€ LLM RAG Learning Repository

2025๋…„ ์ตœ์‹  LLM RAG ๊ธฐ์ˆ  ํ•™์Šต์„ ์œ„ํ•œ ์ข…ํ•ฉ ์ €์žฅ์†Œ

Python Version License LangChain LlamaIndex EXAONE

๐Ÿ“– ๊ฐœ์š”

์ด ์ €์žฅ์†Œ๋Š” Retrieval-Augmented Generation (RAG) ๊ธฐ์ˆ ์„ ์ฒด๊ณ„์ ์œผ๋กœ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ์ข…ํ•ฉ ํ•™์Šต ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. 2025๋…„ ์ตœ์‹  ๊ธฐ์ˆ  ์Šคํƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ, ํŠนํžˆ ํ•œ๊ตญ์–ด ์ฒ˜๋ฆฌ์— ์ตœ์ ํ™”๋œ EXAONE 4.0 ๋ชจ๋ธ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

โœจ ์ฃผ์š” ํŠน์ง•

  • ๐Ÿ”ฅ 2025๋…„ ์ตœ์‹  ๊ธฐ์ˆ : LangChain 0.2+, LlamaIndex 0.12+, Gradio 4.0+
  • ๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด ํŠนํ™”: EXAONE 4.0 ๋ชจ๋ธ๊ณผ ํ•œ๊ตญ์–ด ๋ฌธ์„œ ์ฒ˜๋ฆฌ ์ตœ์ ํ™”
  • ๐Ÿ› ๏ธ ๋‹ค์–‘ํ•œ LLM ์ง€์›: OpenAI GPT-4, Claude-3.5, ๋กœ์ปฌ EXAONE ๋ชจ๋ธ
  • ๐Ÿ“š ์ฒด๊ณ„์  ํ•™์Šต: ๊ธฐ์ดˆ๋ถ€ํ„ฐ ๊ณ ๊ธ‰๊นŒ์ง€ 6๋‹จ๊ณ„ ํŠœํ† ๋ฆฌ์–ผ
  • ๐ŸŽฏ ์‹ค๋ฌด ์ค‘์‹ฌ: 4๊ฐ€์ง€ ์‹ค์ œ ํ”„๋กœ์ ํŠธ ์˜ˆ์ œ
  • ๐Ÿ“Š ํฌ๊ด„์  ํ‰๊ฐ€: RAGAS, BLEU, BERTScore ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฉ”ํŠธ๋ฆญ

๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘

1. ์ €์žฅ์†Œ ํด๋ก  ๋ฐ ์„ค์น˜

# ์ €์žฅ์†Œ ํด๋ก 
git clone https://github.com/your-username/llm-rag-learning.git
cd llm-rag-learning

# ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ ๋ฐ ํ™œ์„ฑํ™”
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# ํŒจํ‚ค์ง€ ์„ค์น˜
pip install -r requirements.txt
pip install -e .

2. ํ™˜๊ฒฝ ์„ค์ •

# ํ™˜๊ฒฝ๋ณ€์ˆ˜ ํŒŒ์ผ ์ƒ์„ฑ
cp .env.example .env

# .env ํŒŒ์ผ์—์„œ API ํ‚ค ์„ค์ •
# OPENAI_API_KEY=your-openai-key
# ANTHROPIC_API_KEY=your-claude-key

3. EXAONE ๋กœ์ปฌ ๋ชจ๋ธ ์„ค์ • (์„ ํƒ์‚ฌํ•ญ)

# Ollama ๋ฐ EXAONE ๋ชจ๋ธ ์„ค์ •
chmod +x scripts/setup_ollama.sh
./scripts/setup_ollama.sh

4. ์ฒซ ๋ฒˆ์งธ RAG ์‹คํ–‰

# Hello RAG ์˜ˆ์ œ ์‹คํ–‰
python tutorials/01_getting_started/hello_rag.py

๐Ÿ“ ์ €์žฅ์†Œ ๊ตฌ์กฐ

llm-rag-learning/
โ”œโ”€โ”€ ๐Ÿ”ง core/                    # ํ•ต์‹ฌ ๊ธฐ๋Šฅ ๋ชจ๋“ˆ
โ”‚   โ”œโ”€โ”€ llm_providers/          # LLM ์ œ๊ณต์ž (OpenAI, Claude, EXAONE)
โ”‚   โ”œโ”€โ”€ data_processing/        # ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐ ์ž„๋ฒ ๋”ฉ
โ”‚   โ”œโ”€โ”€ retrieval/              # ๊ฒ€์ƒ‰ ์—”์ง„
โ”‚   โ””โ”€โ”€ evaluation/             # ํ‰๊ฐ€ ์‹œ์Šคํ…œ
โ”œโ”€โ”€ ๐ŸŽ“ tutorials/               # ๋‹จ๊ณ„๋ณ„ ํ•™์Šต ํŠœํ† ๋ฆฌ์–ผ
โ”‚   โ”œโ”€โ”€ 01_getting_started/     # ์‹œ์ž‘ํ•˜๊ธฐ
โ”‚   โ”œโ”€โ”€ 02_data_preparation/    # ๋ฐ์ดํ„ฐ ์ค€๋น„
โ”‚   โ”œโ”€โ”€ 03_basic_rag/          # ๊ธฐ๋ณธ RAG
โ”‚   โ”œโ”€โ”€ 04_advanced_rag/       # ๊ณ ๊ธ‰ RAG
โ”‚   โ”œโ”€โ”€ 05_local_models/       # ๋กœ์ปฌ ๋ชจ๋ธ
โ”‚   โ””โ”€โ”€ 06_production_ready/   # ํ”„๋กœ๋•์…˜ ์ค€๋น„
โ”œโ”€โ”€ ๐Ÿ—๏ธ frameworks/             # ํ”„๋ ˆ์ž„์›Œํฌ๋ณ„ ๊ตฌํ˜„
โ”‚   โ”œโ”€โ”€ langchain_examples/     # LangChain ์˜ˆ์ œ
โ”‚   โ””โ”€โ”€ llamaindex_examples/    # LlamaIndex ์˜ˆ์ œ
โ”œโ”€โ”€ ๐Ÿš€ projects/               # ์‹ค์Šต ํ”„๋กœ์ ํŠธ
โ”‚   โ”œโ”€โ”€ chatbot/               # ์ฑ—๋ด‡ ํ”„๋กœ์ ํŠธ
โ”‚   โ”œโ”€โ”€ document_qa/           # ๋ฌธ์„œ Q&A
โ”‚   โ”œโ”€โ”€ knowledge_base/        # ์ง€์‹๋ฒ ์ด์Šค
โ”‚   โ””โ”€โ”€ multi_agent_rag/       # ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ RAG
โ””โ”€โ”€ ๐Ÿ“Š data/                   # ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ ๋ฐ ๋ฒกํ„ฐ ์Šคํ† ์–ด

๐ŸŽ“ ํ•™์Šต ๋กœ๋“œ๋งต

๐Ÿ“š ๋‹จ๊ณ„๋ณ„ ํŠœํ† ๋ฆฌ์–ผ

๋‹จ๊ณ„๋‚ด์šฉ์˜ˆ์ƒ ์‹œ๊ฐ„๋‚œ์ด๋„
1๋‹จ๊ณ„์‹œ์ž‘ํ•˜๊ธฐ30๋ถ„โญ
2๋‹จ๊ณ„๋ฐ์ดํ„ฐ ์ค€๋น„1์‹œ๊ฐ„โญโญ
3๋‹จ๊ณ„๊ธฐ๋ณธ RAG2์‹œ๊ฐ„โญโญ
4๋‹จ๊ณ„๊ณ ๊ธ‰ RAG3์‹œ๊ฐ„โญโญโญ
5๋‹จ๊ณ„๋กœ์ปฌ ๋ชจ๋ธ2์‹œ๊ฐ„โญโญโญ
6๋‹จ๊ณ„ํ”„๋กœ๋•์…˜4์‹œ๊ฐ„โญโญโญโญ

๐Ÿ—๏ธ ์‹ค์Šต ํ”„๋กœ์ ํŠธ

  1. ๐Ÿ’ฌ RAG ์ฑ—๋ด‡: Gradio ๊ธฐ๋ฐ˜ ๋Œ€ํ™”ํ˜• ์ธํ„ฐํŽ˜์ด์Šค
  2. ๐Ÿ“„ ๋ฌธ์„œ Q&A: PDF/DOCX ๋ฌธ์„œ ๊ธฐ๋ฐ˜ ์งˆ์˜์‘๋‹ต ์‹œ์Šคํ…œ
  3. ๐Ÿง  ์ง€์‹๋ฒ ์ด์Šค: ๊ธฐ์—… ๋‚ด๋ถ€ ์ง€์‹ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ
  4. ๐Ÿค– ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ: ํ˜‘์—…ํ•˜๋Š” AI ์—์ด์ „ํŠธ ์‹œ์Šคํ…œ

๐Ÿ› ๏ธ ์ง€์› ๊ธฐ์ˆ 

๐Ÿค– LLM ์ œ๊ณต์ž

์ œ๊ณต์ž๋ชจ๋ธํŠน์ง•
OpenAIGPT-4o, GPT-4 Turbo๋†’์€ ์„ฑ๋Šฅ, ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ
AnthropicClaude-3.5 Sonnet์•ˆ์ „์„ฑ, ๊ธด ์ปจํ…์ŠคํŠธ
LG AIEXAONE 4.0 (32B/7.8B/2.4B)ํ•œ๊ตญ์–ด ํŠนํ™”, ๋กœ์ปฌ ์‹คํ–‰

๐Ÿ“Š ๋ฒกํ„ฐ ์Šคํ† ์–ด

  • ChromaDB: ๋กœ์ปฌ ๊ฐœ๋ฐœ์šฉ
  • FAISS: ๊ณ ์„ฑ๋Šฅ ๊ฒ€์ƒ‰
  • Pinecone: ํด๋ผ์šฐ๋“œ ๋ฒกํ„ฐ DB

๐Ÿ”ง ํ”„๋ ˆ์ž„์›Œํฌ

  • LangChain: ๋ณต์žกํ•œ ์›Œํฌํ”Œ๋กœ์šฐ์™€ ์—์ด์ „ํŠธ
  • LlamaIndex: ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ์ธ๋ฑ์‹ฑ
  • Gradio: ํ˜„๋Œ€์ ์ธ ์›น ์ธํ„ฐํŽ˜์ด์Šค

๐Ÿ’ก ์‚ฌ์šฉ ์˜ˆ์ œ

๊ธฐ๋ณธ RAG ์‹œ์Šคํ…œ

from core.llm_providers.local_provider import LocalLLMProvider
from tutorials.hello_rag import SimpleRAG

# EXAONE ๋ชจ๋ธ๋กœ RAG ์‹œ์Šคํ…œ ์ดˆ๊ธฐํ™”
rag = SimpleRAG("local")

# ๋ฌธ์„œ ์ถ”๊ฐ€
documents = [
    "์ธ๊ณต์ง€๋Šฅ์€ ์ธ๊ฐ„์˜ ์ง€๋Šฅ์„ ๋ชจ๋ฐฉํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.",
    "๋จธ์‹ ๋Ÿฌ๋‹์€ AI์˜ ํ•œ ๋ถ„์•ผ๋กœ ๋ฐ์ดํ„ฐ๋กœ๋ถ€ํ„ฐ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค."
]
rag.add_documents(documents)

# ์งˆ๋ฌธํ•˜๊ธฐ
result = rag.query("์ธ๊ณต์ง€๋Šฅ์ด ๋ฌด์—‡์ธ๊ฐ€์š”?")
print(f"๋‹ต๋ณ€: {result['answer']}")

LangChain ๊ธฐ๋ฐ˜ ๊ณ ๊ธ‰ RAG

from langchain.chains import RetrievalQA
from frameworks.langchain_examples.advanced_rag import ConversationalRAG

# ๋Œ€ํ™”ํ˜• RAG ์‹œ์Šคํ…œ
conv_rag = ConversationalRAG(
    llm_provider="local",
    vector_store="chroma"
)

# ์—ฐ์† ๋Œ€ํ™”
response1 = conv_rag.chat("RAG๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”?")
response2 = conv_rag.chat("๊ทธ๋Ÿผ ์–ด๋–ค ์žฅ์ ์ด ์žˆ๋‚˜์š”?")  # ์ด์ „ ๋Œ€ํ™” ๊ธฐ์–ต

๐Ÿ”ง ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ

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

  • ์˜๋ฏธ์  ๊ฒ€์ƒ‰ + ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰
  • ์žฌ์ˆœ์œ„ ๋งค๊ธฐ๊ธฐ (Reranking)
  • ์ฟผ๋ฆฌ ํ™•์žฅ ๋ฐ ๊ฐœ์„ 

๐Ÿง  ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

  • ๋Œ€ํ™” ํžˆ์Šคํ† ๋ฆฌ ์œ ์ง€
  • ์ปจํ…์ŠคํŠธ ์••์ถ•
  • ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น

๐Ÿ“Š ์„ฑ๋Šฅ ์ตœ์ ํ™”

  • ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ
  • ์บ์‹ฑ ์‹œ์Šคํ…œ
  • GPU ๊ฐ€์†

๐Ÿ” ํ‰๊ฐ€ ์‹œ์Šคํ…œ

from core.evaluation import RAGEvaluator

evaluator = RAGEvaluator()
results = evaluator.evaluate(
    questions=test_questions,
    answers=generated_answers,
    ground_truth=expected_answers,
    metrics=["ragas", "bleu", "bertscore"]
)

๐ŸŒŸ EXAONE 4.0 ํŠน๋ณ„ ๊ธฐ๋Šฅ

๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด ์ตœ์ ํ™”

  • ํ•œ๊ตญ์–ด ๋ฌธ์„œ ์ฒ˜๋ฆฌ์— ํŠนํ™”
  • ํ•œ๊ตญ ๋ฌธํ™” ์ปจํ…์ŠคํŠธ ์ดํ•ด
  • ํ•œ๊ธ€ ํ† ํฌ๋‚˜์ด์ € ์ง€์›

๐Ÿง  ์ถ”๋ก  ๋ชจ๋“œ

# EXAONE Deep ๋ชจ๋ธ์˜ ๋‹จ๊ณ„๋ณ„ ์ถ”๋ก 
prompt = "<thought>\n์ˆ˜ํ•™ ๋ฌธ์ œ๋ฅผ ๋‹จ๊ณ„๋ณ„๋กœ ํ’€์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.\n</thought>\n\n2x + 5 = 15๋ฅผ ํ’€์–ด์ฃผ์„ธ์š”."
response = exaone_provider.generate(prompt)

โšก ์„ฑ๋Šฅ ์ตœ์ ํ™”

  • Hybrid Attention ๊ตฌ์กฐ
  • QK-Reorder-Norm ๊ธฐ๋ฒ•
  • ํšจ์œจ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ

๐Ÿ“Š ์„ฑ๋Šฅ ๋ฒค์น˜๋งˆํฌ

๋ชจ๋ธ๋ณ„ ์„ฑ๋Šฅ ๋น„๊ต

๋ชจ๋ธํ•œ๊ตญ์–ด ์„ฑ๋Šฅ์˜์–ด ์„ฑ๋Šฅ์ถ”๋ก  ์†๋„๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ
EXAONE-32Bโญโญโญโญโญโญโญโญโญโญโญ32GB
EXAONE-7.8Bโญโญโญโญโญโญโญโญโญโญ8GB
GPT-4โญโญโญโญโญโญโญโญโญโญโญโญAPI
Claude-3.5โญโญโญโญโญโญโญโญโญโญโญโญAPI

๐Ÿค ๊ธฐ์—ฌํ•˜๊ธฐ

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

๐Ÿ“š ์ฐธ๊ณ  ์ž๋ฃŒ

๊ณต์‹ ๋ฌธ์„œ

์œ ์šฉํ•œ ๋งํฌ

โ“ FAQ

Q: EXAONE ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด GPU๊ฐ€ ํ•„์š”ํ•œ๊ฐ€์š”?

A: ํ•„์ˆ˜๋Š” ์•„๋‹ˆ์ง€๋งŒ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. CPU์—์„œ๋„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, GPU๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ›จ์”ฌ ๋น ๋ฅธ ์ถ”๋ก ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • EXAONE-2.4B: CPU๋กœ๋„ ์ถฉ๋ถ„
  • EXAONE-7.8B: GPU ๊ถŒ์žฅ
  • EXAONE-32B: GPU ํ•„์ˆ˜
Q: ์–ด๋–ค ๋ชจ๋ธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‚˜์š”?

A: ํ•™์Šต ๋ชฉ์ ์ด๋ผ๋ฉด ๋‹ค์Œ ์ˆœ์„œ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค:

  1. OpenAI GPT-4 (API๊ฐ€ ์žˆ๋‹ค๋ฉด)
  2. EXAONE-7.8B (๋กœ์ปฌ ํ™˜๊ฒฝ)
  3. EXAONE-32B (๊ณ ์„ฑ๋Šฅ ํ•„์š”์‹œ)
Q: ์ƒ์—…์  ์šฉ๋„๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ๊ฐ€์š”?

A: MIT ๋ผ์ด์„ผ์Šค๋กœ ์ƒ์—…์  ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, ๊ฐ LLM ๋ชจ๋ธ์˜ ๋ผ์ด์„ผ์Šค๋ฅผ ๋ณ„๋„๋กœ ํ™•์ธํ•ด์ฃผ์„ธ์š”.

๐Ÿ“„ ๋ผ์ด์„ผ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” MIT License ํ•˜์— ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ™ ๊ฐ์‚ฌ์˜ ๋ง


๐ŸŒŸ Star this repository if you find it helpful! ๐ŸŒŸ

Made with โค๏ธ for the Korean AI Community

llm
rag

Similar repos

songminkyu/rag-beginner

This repository is a comprehensive learning platform designed to systematically train Retrieval-Augmented Generation (RAG) technology. It is based on the latest technology stack for 2025 and supports the EXAONE 4.0 model, which is specifically optimized for Korean language processing.

Python

1

43 commits

updated Aug 14, 2025

See the code

README

๐Ÿš€ LLM RAG Learning Repository

2025๋…„ ์ตœ์‹  LLM RAG ๊ธฐ์ˆ  ํ•™์Šต์„ ์œ„ํ•œ ์ข…ํ•ฉ ์ €์žฅ์†Œ

Python Version License LangChain LlamaIndex EXAONE

๐Ÿ“– ๊ฐœ์š”

์ด ์ €์žฅ์†Œ๋Š” Retrieval-Augmented Generation (RAG) ๊ธฐ์ˆ ์„ ์ฒด๊ณ„์ ์œผ๋กœ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ์ข…ํ•ฉ ํ•™์Šต ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. 2025๋…„ ์ตœ์‹  ๊ธฐ์ˆ  ์Šคํƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ, ํŠนํžˆ ํ•œ๊ตญ์–ด ์ฒ˜๋ฆฌ์— ์ตœ์ ํ™”๋œ EXAONE 4.0 ๋ชจ๋ธ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

โœจ ์ฃผ์š” ํŠน์ง•

  • ๐Ÿ”ฅ 2025๋…„ ์ตœ์‹  ๊ธฐ์ˆ : LangChain 0.2+, LlamaIndex 0.12+, Gradio 4.0+
  • ๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด ํŠนํ™”: EXAONE 4.0 ๋ชจ๋ธ๊ณผ ํ•œ๊ตญ์–ด ๋ฌธ์„œ ์ฒ˜๋ฆฌ ์ตœ์ ํ™”
  • ๐Ÿ› ๏ธ ๋‹ค์–‘ํ•œ LLM ์ง€์›: OpenAI GPT-4, Claude-3.5, ๋กœ์ปฌ EXAONE ๋ชจ๋ธ
  • ๐Ÿ“š ์ฒด๊ณ„์  ํ•™์Šต: ๊ธฐ์ดˆ๋ถ€ํ„ฐ ๊ณ ๊ธ‰๊นŒ์ง€ 6๋‹จ๊ณ„ ํŠœํ† ๋ฆฌ์–ผ
  • ๐ŸŽฏ ์‹ค๋ฌด ์ค‘์‹ฌ: 4๊ฐ€์ง€ ์‹ค์ œ ํ”„๋กœ์ ํŠธ ์˜ˆ์ œ
  • ๐Ÿ“Š ํฌ๊ด„์  ํ‰๊ฐ€: RAGAS, BLEU, BERTScore ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฉ”ํŠธ๋ฆญ

๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘

1. ์ €์žฅ์†Œ ํด๋ก  ๋ฐ ์„ค์น˜

# ์ €์žฅ์†Œ ํด๋ก 
git clone https://github.com/your-username/llm-rag-learning.git
cd llm-rag-learning

# ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ ๋ฐ ํ™œ์„ฑํ™”
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# ํŒจํ‚ค์ง€ ์„ค์น˜
pip install -r requirements.txt
pip install -e .

2. ํ™˜๊ฒฝ ์„ค์ •

# ํ™˜๊ฒฝ๋ณ€์ˆ˜ ํŒŒ์ผ ์ƒ์„ฑ
cp .env.example .env

# .env ํŒŒ์ผ์—์„œ API ํ‚ค ์„ค์ •
# OPENAI_API_KEY=your-openai-key
# ANTHROPIC_API_KEY=your-claude-key

3. EXAONE ๋กœ์ปฌ ๋ชจ๋ธ ์„ค์ • (์„ ํƒ์‚ฌํ•ญ)

# Ollama ๋ฐ EXAONE ๋ชจ๋ธ ์„ค์ •
chmod +x scripts/setup_ollama.sh
./scripts/setup_ollama.sh

4. ์ฒซ ๋ฒˆ์งธ RAG ์‹คํ–‰

# Hello RAG ์˜ˆ์ œ ์‹คํ–‰
python tutorials/01_getting_started/hello_rag.py

๐Ÿ“ ์ €์žฅ์†Œ ๊ตฌ์กฐ

llm-rag-learning/
โ”œโ”€โ”€ ๐Ÿ”ง core/                    # ํ•ต์‹ฌ ๊ธฐ๋Šฅ ๋ชจ๋“ˆ
โ”‚   โ”œโ”€โ”€ llm_providers/          # LLM ์ œ๊ณต์ž (OpenAI, Claude, EXAONE)
โ”‚   โ”œโ”€โ”€ data_processing/        # ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐ ์ž„๋ฒ ๋”ฉ
โ”‚   โ”œโ”€โ”€ retrieval/              # ๊ฒ€์ƒ‰ ์—”์ง„
โ”‚   โ””โ”€โ”€ evaluation/             # ํ‰๊ฐ€ ์‹œ์Šคํ…œ
โ”œโ”€โ”€ ๐ŸŽ“ tutorials/               # ๋‹จ๊ณ„๋ณ„ ํ•™์Šต ํŠœํ† ๋ฆฌ์–ผ
โ”‚   โ”œโ”€โ”€ 01_getting_started/     # ์‹œ์ž‘ํ•˜๊ธฐ
โ”‚   โ”œโ”€โ”€ 02_data_preparation/    # ๋ฐ์ดํ„ฐ ์ค€๋น„
โ”‚   โ”œโ”€โ”€ 03_basic_rag/          # ๊ธฐ๋ณธ RAG
โ”‚   โ”œโ”€โ”€ 04_advanced_rag/       # ๊ณ ๊ธ‰ RAG
โ”‚   โ”œโ”€โ”€ 05_local_models/       # ๋กœ์ปฌ ๋ชจ๋ธ
โ”‚   โ””โ”€โ”€ 06_production_ready/   # ํ”„๋กœ๋•์…˜ ์ค€๋น„
โ”œโ”€โ”€ ๐Ÿ—๏ธ frameworks/             # ํ”„๋ ˆ์ž„์›Œํฌ๋ณ„ ๊ตฌํ˜„
โ”‚   โ”œโ”€โ”€ langchain_examples/     # LangChain ์˜ˆ์ œ
โ”‚   โ””โ”€โ”€ llamaindex_examples/    # LlamaIndex ์˜ˆ์ œ
โ”œโ”€โ”€ ๐Ÿš€ projects/               # ์‹ค์Šต ํ”„๋กœ์ ํŠธ
โ”‚   โ”œโ”€โ”€ chatbot/               # ์ฑ—๋ด‡ ํ”„๋กœ์ ํŠธ
โ”‚   โ”œโ”€โ”€ document_qa/           # ๋ฌธ์„œ Q&A
โ”‚   โ”œโ”€โ”€ knowledge_base/        # ์ง€์‹๋ฒ ์ด์Šค
โ”‚   โ””โ”€โ”€ multi_agent_rag/       # ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ RAG
โ””โ”€โ”€ ๐Ÿ“Š data/                   # ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ ๋ฐ ๋ฒกํ„ฐ ์Šคํ† ์–ด

๐ŸŽ“ ํ•™์Šต ๋กœ๋“œ๋งต

๐Ÿ“š ๋‹จ๊ณ„๋ณ„ ํŠœํ† ๋ฆฌ์–ผ

๋‹จ๊ณ„๋‚ด์šฉ์˜ˆ์ƒ ์‹œ๊ฐ„๋‚œ์ด๋„
1๋‹จ๊ณ„์‹œ์ž‘ํ•˜๊ธฐ30๋ถ„โญ
2๋‹จ๊ณ„๋ฐ์ดํ„ฐ ์ค€๋น„1์‹œ๊ฐ„โญโญ
3๋‹จ๊ณ„๊ธฐ๋ณธ RAG2์‹œ๊ฐ„โญโญ
4๋‹จ๊ณ„๊ณ ๊ธ‰ RAG3์‹œ๊ฐ„โญโญโญ
5๋‹จ๊ณ„๋กœ์ปฌ ๋ชจ๋ธ2์‹œ๊ฐ„โญโญโญ
6๋‹จ๊ณ„ํ”„๋กœ๋•์…˜4์‹œ๊ฐ„โญโญโญโญ

๐Ÿ—๏ธ ์‹ค์Šต ํ”„๋กœ์ ํŠธ

  1. ๐Ÿ’ฌ RAG ์ฑ—๋ด‡: Gradio ๊ธฐ๋ฐ˜ ๋Œ€ํ™”ํ˜• ์ธํ„ฐํŽ˜์ด์Šค
  2. ๐Ÿ“„ ๋ฌธ์„œ Q&A: PDF/DOCX ๋ฌธ์„œ ๊ธฐ๋ฐ˜ ์งˆ์˜์‘๋‹ต ์‹œ์Šคํ…œ
  3. ๐Ÿง  ์ง€์‹๋ฒ ์ด์Šค: ๊ธฐ์—… ๋‚ด๋ถ€ ์ง€์‹ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ
  4. ๐Ÿค– ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ: ํ˜‘์—…ํ•˜๋Š” AI ์—์ด์ „ํŠธ ์‹œ์Šคํ…œ

๐Ÿ› ๏ธ ์ง€์› ๊ธฐ์ˆ 

๐Ÿค– LLM ์ œ๊ณต์ž

์ œ๊ณต์ž๋ชจ๋ธํŠน์ง•
OpenAIGPT-4o, GPT-4 Turbo๋†’์€ ์„ฑ๋Šฅ, ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ
AnthropicClaude-3.5 Sonnet์•ˆ์ „์„ฑ, ๊ธด ์ปจํ…์ŠคํŠธ
LG AIEXAONE 4.0 (32B/7.8B/2.4B)ํ•œ๊ตญ์–ด ํŠนํ™”, ๋กœ์ปฌ ์‹คํ–‰

๐Ÿ“Š ๋ฒกํ„ฐ ์Šคํ† ์–ด

  • ChromaDB: ๋กœ์ปฌ ๊ฐœ๋ฐœ์šฉ
  • FAISS: ๊ณ ์„ฑ๋Šฅ ๊ฒ€์ƒ‰
  • Pinecone: ํด๋ผ์šฐ๋“œ ๋ฒกํ„ฐ DB

๐Ÿ”ง ํ”„๋ ˆ์ž„์›Œํฌ

  • LangChain: ๋ณต์žกํ•œ ์›Œํฌํ”Œ๋กœ์šฐ์™€ ์—์ด์ „ํŠธ
  • LlamaIndex: ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ์ธ๋ฑ์‹ฑ
  • Gradio: ํ˜„๋Œ€์ ์ธ ์›น ์ธํ„ฐํŽ˜์ด์Šค

๐Ÿ’ก ์‚ฌ์šฉ ์˜ˆ์ œ

๊ธฐ๋ณธ RAG ์‹œ์Šคํ…œ

from core.llm_providers.local_provider import LocalLLMProvider
from tutorials.hello_rag import SimpleRAG

# EXAONE ๋ชจ๋ธ๋กœ RAG ์‹œ์Šคํ…œ ์ดˆ๊ธฐํ™”
rag = SimpleRAG("local")

# ๋ฌธ์„œ ์ถ”๊ฐ€
documents = [
    "์ธ๊ณต์ง€๋Šฅ์€ ์ธ๊ฐ„์˜ ์ง€๋Šฅ์„ ๋ชจ๋ฐฉํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.",
    "๋จธ์‹ ๋Ÿฌ๋‹์€ AI์˜ ํ•œ ๋ถ„์•ผ๋กœ ๋ฐ์ดํ„ฐ๋กœ๋ถ€ํ„ฐ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค."
]
rag.add_documents(documents)

# ์งˆ๋ฌธํ•˜๊ธฐ
result = rag.query("์ธ๊ณต์ง€๋Šฅ์ด ๋ฌด์—‡์ธ๊ฐ€์š”?")
print(f"๋‹ต๋ณ€: {result['answer']}")

LangChain ๊ธฐ๋ฐ˜ ๊ณ ๊ธ‰ RAG

from langchain.chains import RetrievalQA
from frameworks.langchain_examples.advanced_rag import ConversationalRAG

# ๋Œ€ํ™”ํ˜• RAG ์‹œ์Šคํ…œ
conv_rag = ConversationalRAG(
    llm_provider="local",
    vector_store="chroma"
)

# ์—ฐ์† ๋Œ€ํ™”
response1 = conv_rag.chat("RAG๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”?")
response2 = conv_rag.chat("๊ทธ๋Ÿผ ์–ด๋–ค ์žฅ์ ์ด ์žˆ๋‚˜์š”?")  # ์ด์ „ ๋Œ€ํ™” ๊ธฐ์–ต

๐Ÿ”ง ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ

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

  • ์˜๋ฏธ์  ๊ฒ€์ƒ‰ + ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰
  • ์žฌ์ˆœ์œ„ ๋งค๊ธฐ๊ธฐ (Reranking)
  • ์ฟผ๋ฆฌ ํ™•์žฅ ๋ฐ ๊ฐœ์„ 

๐Ÿง  ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

  • ๋Œ€ํ™” ํžˆ์Šคํ† ๋ฆฌ ์œ ์ง€
  • ์ปจํ…์ŠคํŠธ ์••์ถ•
  • ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น

๐Ÿ“Š ์„ฑ๋Šฅ ์ตœ์ ํ™”

  • ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ
  • ์บ์‹ฑ ์‹œ์Šคํ…œ
  • GPU ๊ฐ€์†

๐Ÿ” ํ‰๊ฐ€ ์‹œ์Šคํ…œ

from core.evaluation import RAGEvaluator

evaluator = RAGEvaluator()
results = evaluator.evaluate(
    questions=test_questions,
    answers=generated_answers,
    ground_truth=expected_answers,
    metrics=["ragas", "bleu", "bertscore"]
)

๐ŸŒŸ EXAONE 4.0 ํŠน๋ณ„ ๊ธฐ๋Šฅ

๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด ์ตœ์ ํ™”

  • ํ•œ๊ตญ์–ด ๋ฌธ์„œ ์ฒ˜๋ฆฌ์— ํŠนํ™”
  • ํ•œ๊ตญ ๋ฌธํ™” ์ปจํ…์ŠคํŠธ ์ดํ•ด
  • ํ•œ๊ธ€ ํ† ํฌ๋‚˜์ด์ € ์ง€์›

๐Ÿง  ์ถ”๋ก  ๋ชจ๋“œ

# EXAONE Deep ๋ชจ๋ธ์˜ ๋‹จ๊ณ„๋ณ„ ์ถ”๋ก 
prompt = "<thought>\n์ˆ˜ํ•™ ๋ฌธ์ œ๋ฅผ ๋‹จ๊ณ„๋ณ„๋กœ ํ’€์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.\n</thought>\n\n2x + 5 = 15๋ฅผ ํ’€์–ด์ฃผ์„ธ์š”."
response = exaone_provider.generate(prompt)

โšก ์„ฑ๋Šฅ ์ตœ์ ํ™”

  • Hybrid Attention ๊ตฌ์กฐ
  • QK-Reorder-Norm ๊ธฐ๋ฒ•
  • ํšจ์œจ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ

๐Ÿ“Š ์„ฑ๋Šฅ ๋ฒค์น˜๋งˆํฌ

๋ชจ๋ธ๋ณ„ ์„ฑ๋Šฅ ๋น„๊ต

๋ชจ๋ธํ•œ๊ตญ์–ด ์„ฑ๋Šฅ์˜์–ด ์„ฑ๋Šฅ์ถ”๋ก  ์†๋„๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ
EXAONE-32Bโญโญโญโญโญโญโญโญโญโญโญ32GB
EXAONE-7.8Bโญโญโญโญโญโญโญโญโญโญ8GB
GPT-4โญโญโญโญโญโญโญโญโญโญโญโญAPI
Claude-3.5โญโญโญโญโญโญโญโญโญโญโญโญAPI

๐Ÿค ๊ธฐ์—ฌํ•˜๊ธฐ

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

๐Ÿ“š ์ฐธ๊ณ  ์ž๋ฃŒ

๊ณต์‹ ๋ฌธ์„œ

์œ ์šฉํ•œ ๋งํฌ

โ“ FAQ

Q: EXAONE ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด GPU๊ฐ€ ํ•„์š”ํ•œ๊ฐ€์š”?

A: ํ•„์ˆ˜๋Š” ์•„๋‹ˆ์ง€๋งŒ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. CPU์—์„œ๋„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, GPU๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ›จ์”ฌ ๋น ๋ฅธ ์ถ”๋ก ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • EXAONE-2.4B: CPU๋กœ๋„ ์ถฉ๋ถ„
  • EXAONE-7.8B: GPU ๊ถŒ์žฅ
  • EXAONE-32B: GPU ํ•„์ˆ˜
Q: ์–ด๋–ค ๋ชจ๋ธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‚˜์š”?

A: ํ•™์Šต ๋ชฉ์ ์ด๋ผ๋ฉด ๋‹ค์Œ ์ˆœ์„œ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค:

  1. OpenAI GPT-4 (API๊ฐ€ ์žˆ๋‹ค๋ฉด)
  2. EXAONE-7.8B (๋กœ์ปฌ ํ™˜๊ฒฝ)
  3. EXAONE-32B (๊ณ ์„ฑ๋Šฅ ํ•„์š”์‹œ)
Q: ์ƒ์—…์  ์šฉ๋„๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ๊ฐ€์š”?

A: MIT ๋ผ์ด์„ผ์Šค๋กœ ์ƒ์—…์  ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, ๊ฐ LLM ๋ชจ๋ธ์˜ ๋ผ์ด์„ผ์Šค๋ฅผ ๋ณ„๋„๋กœ ํ™•์ธํ•ด์ฃผ์„ธ์š”.

๐Ÿ“„ ๋ผ์ด์„ผ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” MIT License ํ•˜์— ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ™ ๊ฐ์‚ฌ์˜ ๋ง


๐ŸŒŸ Star this repository if you find it helpful! ๐ŸŒŸ

Made with โค๏ธ for the Korean AI Community

llm
rag

Similar repos