Skip to content

dkqpeo/obsidian

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

8 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

EduMentor AI - ν•™μŠ΅μžλ£Œ 기반 QA 및 μ‹€μŠ΅ 문제 생성 μ‹œμŠ€ν…œ

ν”„λ‘œμ νŠΈ κΈ°κ°„: 2μ£Ό (10 working days) νŒ€ ꡬ성: 4λͺ… (νŒ€1: QA μ‹œμŠ€ν…œ 2λͺ…, νŒ€2: 문제 생성 2λͺ…) λͺ©ν‘œ: ν•™μŠ΅μžλ£Œ(PDF/PPT) 기반 1-2초 응닡 QA + λ‚œμ΄λ„λ³„ μ‹€μŠ΅ 문제 μžλ™ 생성


🎯 ν”„λ‘œμ νŠΈ κ°œμš”

핡심 κΈ°λŠ₯

  1. ν•™μŠ΅μžλ£Œ μ—…λ‘œλ“œ 및 νŒŒμ‹± (Upstage Document Parse)
  2. 즉각 응닡 QA μ‹œμŠ€ν…œ (1-2초 응닡, LangChain RAG)
  3. λ‚œμ΄λ„λ³„ μ‹€μŠ΅ 문제 생성 (μ΄ˆκΈ‰/쀑급/κ³ κΈ‰, LangGraph Agent)
  4. ν•™μŠ΅ 관리 및 좔적 (Spring Boot Backend)

ν•„μˆ˜ μš”κ΅¬μ‚¬ν•­

μš”κ΅¬μ‚¬ν•­ κ΅¬ν˜„ 방법
βœ… LangChain Framework RAG νŒŒμ΄ν”„λΌμΈ ꡬ좕
βœ… Upstage API Parse, Embeddings, Chat
βœ… ChromaDB Vector Database
βœ… 1-2초 응닡 μ΅œμ ν™”λœ Retrieve + Generate
βœ… LangGraph Agent Workflow ꡬ좕
βœ… RAG μ•„ν‚€ν…μ²˜ λ‹€μ΄μ–΄κ·Έλž¨ μž‘μ„±

πŸ“š λ¬Έμ„œ ꡬ성

  • λ‹΄λ‹Ή: 개발자 A, B (2λͺ…)
  • λ‚΄μš©: 자료 μ—…λ‘œλ“œ, Upstage Parse, μž„λ² λ”©, ChromaDB μ €μž₯, QA RAG νŒŒμ΄ν”„λΌμΈ
  • λͺ©ν‘œ: Retrieve 포함 1-2초 응닡

μ£Όμš” κ΅¬ν˜„ λ‚΄μš©:

  • Upstage Document Parse둜 PDF/PPT νŒŒμ‹±
  • Upstage Embeddings둜 벑터화
  • ChromaDB μ €μž₯ 및 검색
  • LangGraph QA Agent (Retrieve β†’ Generate)
  • 응닡 속도 μ΅œμ ν™” (캐싱, λ©€ν‹° 쿼리)
  • λ‹΄λ‹Ή: 개발자 C, D (2λͺ…)
  • λ‚΄μš©: ν•™μŠ΅ λ‚΄μš© 뢄석, λ‚œμ΄λ„λ³„ 문제 생성, 검증
  • λͺ©ν‘œ: λ‚œμ΄λ„λ³„(μ΄ˆκΈ‰/쀑급/κ³ κΈ‰) μ‹€μŠ΅ 문제 μžλ™ 생성

μ£Όμš” κ΅¬ν˜„ λ‚΄μš©:

  • ν•™μŠ΅ λ‚΄μš© 뢄석 (ChromaDB 검색)
  • λ‚œμ΄λ„λ³„ Generator (Beginner/Intermediate/Advanced)
  • 문제 검증 μ‹œμŠ€ν…œ (μ΅œμ†Œ 길이, λ‚œμ΄λ„ 점수, ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€)
  • LangGraph Problem Agent (Analyze β†’ Generate β†’ Validate)
  • μž¬μƒμ„± 둜직
  • λ‹΄λ‹Ή: 곡톡 (톡합 단계)
  • λ‚΄μš©: Python AI Engine ↔ Spring Boot Backend 연동
  • 기술: Java 21, Spring Boot 3.2.0, WebClient

μ£Όμš” κ΅¬ν˜„ λ‚΄μš©:

  • WebClient μ„€μ • (Python μ„œλ²„ 톡신)
  • 도메인 μ—”ν‹°ν‹° (User, Material, QASession, Problem)
  • PythonClient κ΅¬ν˜„
  • REST API Controller
  • PostgreSQL 연동
  • λ‚΄μš©: 전체 μ‹œμŠ€ν…œ κ°œμš”, 데이터 흐름, API λͺ…μ„Έ
  • λ‹€μ΄μ–΄κ·Έλž¨: Mermaid 기반 μ•„ν‚€ν…μ²˜ λ‹€μ΄μ–΄κ·Έλž¨

μ£Όμš” λ‚΄μš©:

  • μ‹œμŠ€ν…œ ꡬ쑰도
  • 데이터 흐름도 (μ—…λ‘œλ“œ, QA, 문제 생성)
  • λ°μ΄ν„°λ² μ΄μŠ€ μŠ€ν‚€λ§ˆ
  • API λͺ…μ„Έμ„œ
  • Docker Compose μ„€μ •
  • λ‹΄λ‹Ή: 곡톡 (인프라)
  • λ‚΄μš©: Dockerλ₯Ό ν™œμš©ν•œ λ°μ΄ν„°λ² μ΄μŠ€ 및 μ‹œμŠ€ν…œ 관리
  • 기술: Docker, Docker Compose, PostgreSQL, ChromaDB

μ£Όμš” κ΅¬ν˜„ λ‚΄μš©:

  • PostgreSQL Docker μ„€μ • 및 μ΄ˆκΈ°ν™”
  • ChromaDB Docker μ„€μ •
  • 데이터 μ˜μ†μ„± 관리 (Volumes)
  • λ°±μ—… 및 볡원 μ „λž΅
  • νŠΈλŸ¬λΈ”μŠˆνŒ… κ°€μ΄λ“œ
  • λ‹΄λ‹Ή: 곡톡 (μ•„ν‚€ν…μ²˜)
  • λ‚΄μš©: νŒ€λ³„ RAG νŒŒμ΄ν”„λΌμΈ 상세 ꡬ쑰 및 데이터 흐름
  • λ‹€μ΄μ–΄κ·Έλž¨: Mermaid 기반 νŒŒμ΄ν”„λΌμΈ μ‹œκ°ν™”

μ£Όμš” λ‚΄μš©:

  • 전체 μ‹œμŠ€ν…œ RAG μ•„ν‚€ν…μ²˜
  • νŒ€1 QA RAG νŒŒμ΄ν”„λΌμΈ (자료 νŒŒμ‹± β†’ μž„λ² λ”© β†’ 검색 β†’ 생성)
  • νŒ€2 문제 생성 RAG νŒŒμ΄ν”„λΌμΈ (λ‚΄μš© 뢄석 β†’ 생성 β†’ 검증)
  • λ‚œμ΄λ„λ³„ Generator 상세 흐름
  • μ„±λŠ₯ μ΅œμ ν™” μ „λž΅

πŸ› οΈ 기술 μŠ€νƒ

Backend

  • Spring Boot: 3.2.0 (Java 21)
  • Database: PostgreSQL 15
  • Security: Spring Security + JWT
  • HTTP Client: WebClient (WebFlux)

AI Engine

  • Framework: FastAPI
  • LLM: Upstage Solar API
  • Orchestration: LangChain + LangGraph
  • Vector DB: ChromaDB
  • PDF/PPT Parsing: PyMuPDF, python-pptx

Infrastructure

  • Container: Docker + Docker Compose
  • Version Control: Git

πŸ“… 2μ£Ό 개발 일정

Week 1: 기반 ꡬ좕 + 핡심 κΈ°λŠ₯

λ‚ μ§œ νŒ€1 (QA) νŒ€2 (문제 생성) 곡톡
Day 1 ν™˜κ²½ μ„€μ •, ChromaDB 연동 ν™˜κ²½ μ„€μ •, Upstage API ν…ŒμŠ€νŠΈ DB 섀계, Spring Boot ν”„λ‘œμ νŠΈ
Day 2 자료 μ—…λ‘œλ“œ + Upstage Parse λ‚œμ΄λ„ λΆ„λ₯˜ 둜직 섀계 Python FastAPI μ„œλ²„ ꡬ좕
Day 3 μž„λ² λ”© + ChromaDB μ €μž₯ 문제 생성 Agent ꡬ쑰 섀계 Spring ↔ Python 연동
Day 4 QA RAG νŒŒμ΄ν”„λΌμΈ κ΅¬ν˜„ μ΄ˆκΈ‰ 문제 생성 κ΅¬ν˜„ -
Day 5 응닡 속도 μ΅œμ ν™” (1-2초) 쀑급/κ³ κΈ‰ 문제 생성 κ΅¬ν˜„ 톡합 ν…ŒμŠ€νŠΈ

Week 2: 톡합 + μ΅œμ ν™” + λ¬Έμ„œν™”

λ‚ μ§œ νŒ€1 (QA) νŒ€2 (문제 생성) 곡톡
Day 6 LangGraph Agent μ›Œν¬ν”Œλ‘œμš° LangGraph Agent μ›Œν¬ν”Œλ‘œμš° -
Day 7 좜처 ν‘œμ‹œ κΈ°λŠ₯ 문제 검증 둜직 -
Day 8 캐싱 및 μ„±λŠ₯ κ°œμ„  λ‚œμ΄λ„ μžλ™ μ‘°μ • 톡합 ν…ŒμŠ€νŠΈ
Day 9 전체 QA ν…ŒμŠ€νŠΈ 전체 문제 생성 ν…ŒμŠ€νŠΈ UI 연동
Day 10 버그 μˆ˜μ •, λ¬Έμ„œν™” 버그 μˆ˜μ •, λ¬Έμ„œν™” RAG μ•„ν‚€ν…μ²˜ λ‹€μ΄μ–΄κ·Έλž¨

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

1. μ €μž₯μ†Œ 클둠

git clone https://github.com/your-team/edumentor.git
cd edumentor

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

# Python μ„œλ²„ λ””λ ‰ν† λ¦¬λ‘œ 이동
cd python-server

# .env 파일 생성
cp .env.example .env

# ν•„μˆ˜ ν™˜κ²½ λ³€μˆ˜ μž…λ ₯
vim .env  # λ˜λŠ” μ„ ν˜Έν•˜λŠ” 에디터 μ‚¬μš©

ν•„μˆ˜ μ„€μ •:

UPSTAGE_API_KEY=your_upstage_api_key    # Upstage API ν‚€
POSTGRES_PASSWORD=your_password         # PostgreSQL λΉ„λ°€λ²ˆν˜Έ (운영 ν™˜κ²½μ—μ„œλŠ” κ°•λ ₯ν•œ λΉ„λ°€λ²ˆν˜Έ μ‚¬μš©)
JWT_SECRET=your_jwt_secret              # JWT μ„œλͺ… ν‚€

3. λ°μ΄ν„°λ² μ΄μŠ€ Docker μ‹€ν–‰

μ€‘μš”: PostgreSQLκ³Ό ChromaDBλŠ” Docker둜 κ΄€λ¦¬λ©λ‹ˆλ‹€.

# PostgreSQL + ChromaDB μ‹œμž‘
docker-compose up -d postgres chromadb

# λ°μ΄ν„°λ² μ΄μŠ€ μ΄ˆκΈ°ν™” 확인 (졜초 μ‹€ν–‰ μ‹œ μžλ™ μ΄ˆκΈ°ν™”)
docker-compose logs postgres | grep "database system is ready"

# μƒ˜ν”Œ 데이터 확인
docker exec -it edumentor-postgres psql -U admin -d edumentor -c "SELECT * FROM users;"

μžλ™ μ΄ˆκΈ°ν™” λ‚΄μš©:

  • ν…Œμ΄λΈ” 생성 (users, learning_materials, qa_sessions, practice_problems)
  • 인덱슀 생성 (μ„±λŠ₯ μ΅œμ ν™”)
  • μƒ˜ν”Œ μ‚¬μš©μž 생성 (instructor1, student1 / password: password123)

4. Docker둜 전체 μ‹€ν–‰

# 전체 μ‹œμŠ€ν…œ λΉŒλ“œ 및 μ‹€ν–‰
docker-compose up --build

# λ°±κ·ΈλΌμš΄λ“œ μ‹€ν–‰
docker-compose up -d

# μƒνƒœ 확인
docker-compose ps

5. κ°œλ³„ μ„œλΉ„μŠ€ μ‹€ν–‰ (둜컬 개발)

# PostgreSQL & ChromaDB
docker-compose up -d postgres chromadb

# Python 톡합 μ„œλ²„ (Port 8000)
cd python-server
pip install -r requirements.txt
python main.py

# Spring Boot (Port 8080)
cd spring-backend
./gradlew bootRun

6. 접속 확인


πŸ“– API μ‚¬μš© μ˜ˆμ‹œ

1. ν•™μŠ΅μžλ£Œ μ—…λ‘œλ“œ

curl -X POST http://localhost:8080/api/materials/upload \
  -H "Authorization: Bearer {token}" \
  -F "file=@spring_guide.pdf" \
  -F "title=Spring Boot μž…λ¬Έ"

2. μ§ˆλ¬Έν•˜κΈ° (QA)

curl -X POST http://localhost:8080/api/qa/ask \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "materialId": 1,
    "question": "JPA Entityλž€ λ¬΄μ—‡μΈκ°€μš”?"
  }'

응닡 μ˜ˆμ‹œ:

{
  "answer": "JPA EntityλŠ” λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ”κ³Ό λ§€ν•‘λ˜λŠ” Java ν΄λž˜μŠ€μž…λ‹ˆλ‹€. @Entity μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜μ—¬ μ •μ˜ν•˜λ©°...",
  "sources": [
    {
      "page": 23,
      "excerpt": "JPA EntityλŠ” λ°μ΄ν„°λ² μ΄μŠ€..."
    }
  ],
  "responseTimeMs": 1230
}

3. μ‹€μŠ΅ 문제 생성

curl -X POST http://localhost:8080/api/problems/generate \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "materialId": 1,
    "difficulty": "BEGINNER",
    "problemCount": 3
  }'

응닡 μ˜ˆμ‹œ:

{
  "problems": [
    {
      "question": "User μ—”ν‹°ν‹° 클래슀λ₯Ό μž‘μ„±ν•˜μ„Έμš”...",
      "answer": "@Entity\npublic class User {...}",
      "hints": ["@Entity μ–΄λ…Έν…Œμ΄μ…˜ μ‚¬μš©", "@Id둜 κΈ°λ³Έν‚€ μ§€μ •"],
      "difficultyScore": 2,
      "problemType": "CODING",
      "testCases": [
        {"input": "...", "expected": "..."}
      ]
    }
  ],
  "difficulty": "BEGINNER",
  "generatedCount": 3,
  "rejectedCount": 0
}

πŸ§ͺ ν…ŒμŠ€νŠΈ

μ„±λŠ₯ ν…ŒμŠ€νŠΈ (QA 응닡 μ‹œκ°„)

# νŒ€1 μ„±λŠ₯ ν…ŒμŠ€νŠΈ
cd python-ai/paper_qa
python tests/test_performance.py

κΈ°λŒ€ κ²°κ³Ό:

Question: JPA Entityλž€ λ¬΄μ—‡μΈκ°€μš”?
응닡 μ‹œκ°„: 1.234s - βœ… PASS

Question: @Transactional은 μ–Έμ œ μ‚¬μš©ν•˜λ‚˜μš”?
응닡 μ‹œκ°„: 1.567s - βœ… PASS

총 ν…ŒμŠ€νŠΈ: 3
톡과: 3/3
평균 응닡 μ‹œκ°„: 1.401s

문제 생성 ν…ŒμŠ€νŠΈ

# νŒ€2 문제 생성 ν…ŒμŠ€νŠΈ
cd python-ai/paper_problem
python tests/test_problem_generation.py

πŸ“Š μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Frontend   β”‚
β”‚ (React/Vue) β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
       β”‚ REST API
       ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Spring Boot β”‚
β”‚  (Java 21)  β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
       β”‚ HTTP Client
       ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Python QA  β”‚  Python     β”‚
β”‚  (Port 8000)β”‚  Problem    β”‚
β”‚             β”‚  (Port 8001)β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
       β”‚             β”‚
       ↓             ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ChromaDB  β”‚ PostgreSQL  β”‚
β”‚(Vector)  β”‚ (Metadata)  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

βœ… μ™„μ„± 체크리슀트

핡심 κΈ°λŠ₯

  • Upstage API 연동 (Parse, Embeddings, Chat)
  • ChromaDB 벑터 μ €μž₯ 및 검색
  • LangGraph QA Agent (1-2초 응닡)
  • LangGraph Problem Agent (λ‚œμ΄λ„λ³„ 생성)
  • Spring Boot Backend (Java 21)
  • REST API κ΅¬ν˜„

μ„±λŠ₯ λͺ©ν‘œ

  • QA 응닡 μ‹œκ°„ < 2초
  • 문제 생성 μ‹œκ°„ < 30초
  • νŒŒμ‹± 성곡λ₯  > 95%
  • 문제 검증 ν†΅κ³Όμœ¨ > 80%

λ¬Έμ„œν™”

  • RAG μ•„ν‚€ν…μ²˜ λ‹€μ΄μ–΄κ·Έλž¨
  • API λ¬Έμ„œ (Swagger)
  • νŒ€λ³„ κ΅¬ν˜„ κ°€μ΄λ“œ
  • README.md

ν…ŒμŠ€νŠΈ

  • λ‹¨μœ„ ν…ŒμŠ€νŠΈ
  • 톡합 ν…ŒμŠ€νŠΈ
  • μ„±λŠ₯ ν…ŒμŠ€νŠΈ
  • E2E ν…ŒμŠ€νŠΈ

🀝 νŒ€ μ—­ν• 

νŒ€1: QA μ‹œμŠ€ν…œ (2λͺ…)

  • 개발자 A: 자료 μ—…λ‘œλ“œ, Upstage Parse, μž„λ² λ”©, ChromaDB μ €μž₯
  • 개발자 B: QA RAG νŒŒμ΄ν”„λΌμΈ, LangGraph Agent, 응닡 속도 μ΅œμ ν™”

νŒ€2: 문제 생성 (2λͺ…)

  • 개발자 C: λ‚œμ΄λ„ 뢄석, ν•™μŠ΅ λ‚΄μš© μΆ”μΆœ, LangGraph Agent ꡬ쑰
  • 개발자 D: 문제 생성 둜직, 검증, λ‹΅μ•ˆ 생성

곡톡 μž‘μ—…

  • Spring Boot 톡합 (전체)
  • 톡합 ν…ŒμŠ€νŠΈ (전체)
  • λ¬Έμ„œν™” (전체)

πŸ“ž 문의 및 지원


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

MIT License


ν”„λ‘œμ νŠΈ μ‹œμž‘: 2025-10-28 λͺ©ν‘œ μ™„λ£Œ: 2025-11-08 (2μ£Ό) νŒ€: 4λͺ… (2 + 2)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published