kwmin_probin / README.md
cksleigen's picture
edit readme.md
40038b3
metadata
title: kwmin_probin
emoji: πŸ₯Έ
colorFrom: indigo
colorTo: purple
sdk: docker
app_file: app.py
pinned: false

πŸ“š TEAM EA - RFP λ¬Έμ„œ 뢄석 μ‹œμŠ€ν…œ (MVP)

Andrew Ng 원칙 기반으둜 μ„€κ³„λœ RAG μ‹œμŠ€ν…œ

🎯 ν”„λ‘œμ νŠΈ λͺ©ν‘œ

"Start Simple, Then Iterate" - Andrew Ng

  1. βœ… Week 1: MVP μž‘λ™ (PDF μ—…λ‘œλ“œ, 질문-λ‹΅λ³€, 좜처 ν‘œμ‹œ)
  2. πŸ“ˆ Week 2: 정확도 70%+ (ν•˜μ΄λΈŒλ¦¬λ“œ 검색, λ¦¬λž­ν‚Ή)
  3. πŸš€ Week 3: ν”„λ‘œλ•μ…˜ 레벨 (90%+ 정확도, μ•ˆμ •μ„±)

πŸ—οΈ μ•„ν‚€ν…μ²˜

PDF μ—…λ‘œλ“œ
    ↓
ν…μŠ€νŠΈ μΆ”μΆœ (pymupdf4llm)
    ↓
μ²­ν‚Ή (800자, μ˜€λ²„λž© 150)
    ↓
μž„λ² λ”© (text-embedding-3-small)
    ↓
ChromaDB μ €μž₯
    ↓
질문 μž…λ ₯
    ↓
벑터 검색 (top-10)
    ↓
Grok λ‹΅λ³€ 생성
    ↓
좜처 ν‘œμ‹œ

πŸ“ 디렉토리 ꡬ쑰

TEAM_EA_V2/
β”‚
β”œβ”€β”€ app.py                    # Streamlit 메인
β”‚
β”œβ”€β”€ config/
β”‚   └── settings.py           # API keys, μ„€μ •
β”‚
β”œβ”€β”€ core/
β”‚   β”œβ”€β”€ pdf_loader.py         # PDF ν…μŠ€νŠΈ μΆ”μΆœ
β”‚   β”œβ”€β”€ chunker.py            # μ²­ν‚Ή
β”‚   β”œβ”€β”€ embedder.py           # μž„λ² λ”©
β”‚   β”œβ”€β”€ vectordb.py           # ChromaDB 관리
β”‚   β”œβ”€β”€ retriever.py          # 검색
β”‚   └── generator.py          # Grok λ‹΅λ³€ 생성
β”‚
β”œβ”€β”€ utils/
β”‚   β”œβ”€β”€ logger.py             # λ‘œκΉ…
β”‚   └── helpers.py            # μœ ν‹Έλ¦¬ν‹°
β”‚
β”œβ”€β”€ ui/
β”‚   β”œβ”€β”€ components.py         # Streamlit μ»΄ν¬λ„ŒνŠΈ
β”‚   └── styles.py             # CSS
β”‚
β”œβ”€β”€ data/
β”‚   β”œβ”€β”€ uploads/              # μ—…λ‘œλ“œλœ PDF
β”‚   └── chroma_db/            # ChromaDB μ €μž₯μ†Œ
β”‚
β”œβ”€β”€ requirements.txt
β”œβ”€β”€ .env                      # API keys (gitignore)
└── README.md

πŸš€ λΉ λ₯Έ μ‹œμž‘

1. μ„€μΉ˜

# κ°€μƒν™˜κ²½ 생성
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# νŒ¨ν‚€μ§€ μ„€μΉ˜
pip install -r requirements.txt

2. ν™˜κ²½ μ„€μ •

.env 파일 생성:

OPENAI_API_KEY=your_openai_api_key_here
XAI_API_KEY=your_grok_api_key_here

3. μ‹€ν–‰

streamlit run app.py

λΈŒλΌμš°μ €μ—μ„œ http://localhost:8501 접속


πŸ’‘ μ‚¬μš© 방법

1단계: PDF μ—…λ‘œλ“œ

  • μ‚¬μ΄λ“œλ°” λ˜λŠ” 메인 ν™”λ©΄μ—μ„œ PDF 파일 μ—…λ‘œλ“œ
  • "λ¬Έμ„œ 처리 μ‹œμž‘" λ²„νŠΌ 클릭

2단계: μ§ˆλ¬Έν•˜κΈ°

  • μ²˜λ¦¬κ°€ μ™„λ£Œλ˜λ©΄ 질문 μž…λ ₯창이 ν™œμ„±ν™”
  • 질문 μž…λ ₯ ν›„ Enter

3단계: λ‹΅λ³€ 확인

  • Grok이 μƒμ„±ν•œ λ‹΅λ³€ 확인
  • 좜처 νŽ˜μ΄μ§€ 및 원문 확인

πŸ”§ 기술 μŠ€νƒ

ꡬ성 μš”μ†Œ 기술 이유
PDF μ „μ²˜λ¦¬ pymupdf4llm + PyMuPDF ν…Œλ””λ…ΈνŠΈ μŠ€νƒ€μΌ, μ•ˆμ •μ 
μž„λ² λ”© text-embedding-3-small μ €λ ΄($0.00002/1K tokens), 빠름
Vector DB ChromaDB 둜컬 μ‹€ν–‰, Python native
LLM Grok (xAI) ν•œκ΅­μ–΄ μ„±λŠ₯ 우수
UI Streamlit λΉ λ₯Έ ν”„λ‘œν† νƒ€μ΄ν•‘

βš™οΈ μ„€μ •

config/settings.py

# μž„λ² λ”© μ„€μ •
EMBEDDING_MODEL = "text-embedding-3-small"
EMBEDDING_DIMENSION = 1536

# μ²­ν‚Ή μ„€μ •
CHUNK_SIZE = 800        # 문자 λ‹¨μœ„
CHUNK_OVERLAP = 150     # μ˜€λ²„λž©

# 검색 μ„€μ •
TOP_K = 10              # μƒμœ„ K개 검색

# Grok μ„€μ •
GROK_MODEL = "grok-beta"

πŸ“Š μ„±λŠ₯ μ§€ν‘œ

MVP λͺ©ν‘œ (Week 1)

  • βœ… PDF μ—…λ‘œλ“œ κ°€λŠ₯
  • βœ… 질문-λ‹΅λ³€ μž‘λ™
  • βœ… 좜처 ν‘œμ‹œ
  • βœ… κΈ°λ³Έ UI

Phase 2 λͺ©ν‘œ (Week 2)

  • ⏳ ν•˜μ΄λΈŒλ¦¬λ“œ 검색 (BM25 + Vector)
  • ⏳ λ¦¬λž­ν‚Ή (Cohere Rerank)
  • ⏳ ν•˜μ΄λΌμ΄νŒ…
  • ⏳ 정확도 70%+

Phase 3 λͺ©ν‘œ (Week 3)

  • ⏳ PDF μΆ”κ°€ μ—…λ‘œλ“œ
  • ⏳ 메타데이터 λ‘œκΉ…
  • ⏳ μ—λŸ¬ 핸듀링
  • ⏳ 정확도 90%+

πŸ› νŠΈλŸ¬λΈ”μŠˆνŒ…

1. API Key 였λ₯˜

# .env 파일 확인
OPENAI_API_KEY=sk-...
XAI_API_KEY=xai-...

2. νŒ¨ν‚€μ§€ μ„€μΉ˜ 였λ₯˜

# κ°œλ³„ μ„€μΉ˜ μ‹œλ„
pip install streamlit
pip install chromadb
pip install openai
pip install pymupdf4llm

3. ChromaDB 였λ₯˜

# λ°μ΄ν„°λ² μ΄μŠ€ μ΄ˆκΈ°ν™”
rm -rf data/chroma_db/*

πŸ“ 개발 둜그

v1.0 (MVP)

  • PDF μ—…λ‘œλ“œ 및 ν…μŠ€νŠΈ μΆ”μΆœ
  • μ²­ν‚Ή 및 μž„λ² λ”©
  • ChromaDB μ €μž₯
  • 벑터 검색
  • Grok λ‹΅λ³€ 생성
  • Streamlit UI
  • 좜처 ν‘œμ‹œ

v2.0 (μ˜ˆμ •)

  • ν•˜μ΄λΈŒλ¦¬λ“œ 검색
  • λ¦¬λž­ν‚Ή
  • ν•˜μ΄λΌμ΄νŒ…
  • 정확도 μΈ‘μ •

πŸ‘¨β€πŸ’» 개발자

TEAM EA


πŸ“„ λΌμ΄μ„ μŠ€

MIT License


πŸ™ κ°μ‚¬μ˜ 말

  • Andrew Ng: ML μ‹œμŠ€ν…œ 섀계 원칙
  • ν…Œλ””λ…ΈνŠΈ: PDF 처리 방법둠
  • OpenAI: μž„λ² λ”© λͺ¨λΈ
  • xAI: Grok LLM

πŸ“ž 문의

μ΄μŠˆκ°€ μžˆμœΌμ‹œλ©΄ GitHub Issues에 λ“±λ‘ν•΄μ£Όμ„Έμš”.