Skip to content

ldmrepo/iosys-generative

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

39 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

IOSYS ItemBank AI

AI 기반 μ°¨μ„ΈλŒ€ 문항은행 μ‹œμŠ€ν…œ

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

ꡐ윑 μ½˜ν…μΈ (λ¬Έν•­)의 λ©€ν‹°λͺ¨λ‹¬ μž„λ² λ”© 기반 검색, μžλ™ λΆ„λ₯˜, 이미지 μ°Έμ‘°ν˜• λ¬Έν•­ 생성을 μœ„ν•œ AI μ‹œμŠ€ν…œ

핡심 κΈ°λŠ₯

κΈ°λŠ₯ μ„€λͺ… μƒνƒœ
μžμ—°μ–΄ λ¬Έν•­ 검색 Qwen3-VL 기반 의미 검색 API μ™„λ£Œ
μœ μ‚¬ λ¬Έν•­ μΆ”μ²œ λ©€ν‹°λͺ¨λ‹¬ μž„λ² λ”© 기반 μΆ”μ²œ API μ™„λ£Œ
RAG μ§ˆμ˜μ‘λ‹΅ LangChain 기반 λ¬Έν•­ Q&A API μ™„λ£Œ
μžλ™ λΆ„λ₯˜ κ΅μœ‘κ³Όμ •/μ„±μ·¨κΈ°μ€€/λ‚œμ΄λ„ λΆ„λ₯˜ μ˜ˆμ •
이미지 λ¬Έν•­ 생성 Fact Graph 기반 ν™˜κ° λ°©μ§€ 생성 μ˜ˆμ •

μ•„ν‚€ν…μ²˜

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      Client Applications                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                          β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  itembank-api (FastAPI)                      β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                β”‚
β”‚  β”‚ /search/*   β”‚ /rag/*      β”‚ /health     β”‚                β”‚
β”‚  β”‚ μžμ—°μ–΄ 검색  β”‚ RAG 응닡    β”‚ ν—¬μŠ€μ²΄ν¬    β”‚                β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
          β”‚             β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Service Layer                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚ Qwen3VLService  β”‚  β”‚ EmbeddingServiceβ”‚  β”‚ LLMService   β”‚ β”‚
β”‚  β”‚ (μžμ—°μ–΄ 인코딩)  β”‚  β”‚ (벑터 검색)     β”‚  β”‚ (LangChain)  β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            β”‚                    β”‚                  β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Qwen3-VL-Embedding β”‚  β”‚ In-Memory NPZ   β”‚  β”‚ OpenAI API    β”‚
β”‚ (GPU ~4.3GB)       β”‚  β”‚ (176K vectors)  β”‚  β”‚               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                 β”‚
                        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”
                        β”‚   PostgreSQL    β”‚
                        β”‚   + pgvector    β”‚
                        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

디렉토리 ꡬ쑰

iosys-generative/
β”œβ”€β”€ itembank-api/              # πŸ†• REST API μ„œλ²„
β”‚   β”œβ”€β”€ api/
β”‚   β”‚   β”œβ”€β”€ core/              # μ„€μ •, μ˜μ‘΄μ„±
β”‚   β”‚   β”œβ”€β”€ models/            # Pydantic μŠ€ν‚€λ§ˆ
β”‚   β”‚   β”œβ”€β”€ routers/           # API μ—”λ“œν¬μΈνŠΈ
β”‚   β”‚   β”œβ”€β”€ services/          # λΉ„μ¦ˆλ‹ˆμŠ€ 둜직
β”‚   β”‚   β”‚   β”œβ”€β”€ qwen3vl.py     # μžμ—°μ–΄ μž„λ² λ”© (Qwen3-VL)
β”‚   β”‚   β”‚   β”œβ”€β”€ embedding.py   # 벑터 검색
β”‚   β”‚   β”‚   β”œβ”€β”€ database.py    # DB 연동
β”‚   β”‚   β”‚   └── llm.py         # LLM μ„œλΉ„μŠ€
β”‚   β”‚   └── main.py
β”‚   β”œβ”€β”€ API.md                 # API λ¬Έμ„œ
β”‚   β”œβ”€β”€ HANDOVER.md            # μΈμˆ˜μΈκ³„ λ¬Έμ„œ
β”‚   └── README.md              # API μ„œλ²„ κ°€μ΄λ“œ
β”œβ”€β”€ poc/                       # POC κ΅¬ν˜„ (μ‹€ν—˜/평가)
β”‚   β”œβ”€β”€ models/                # λ‹€μš΄λ‘œλ“œλœ λͺ¨λΈ
β”‚   β”œβ”€β”€ results/               # μž„λ² λ”© κ²°κ³Ό (npz)
β”‚   β”œβ”€β”€ scripts/               # μ‹€ν—˜ 슀크립트
β”‚   β”œβ”€β”€ POC-Report.md          # POC μ΅œμ’… λ³΄κ³ μ„œ
β”‚   └── HANDOVER.md            # POC μΈμˆ˜μΈκ³„
β”œβ”€β”€ preprocessing/             # μ „μ²˜λ¦¬ νŒŒμ΄ν”„λΌμΈ
β”œβ”€β”€ data/                      # 원본 데이터
β”œβ”€β”€ docs/                      # ν”„λ‘œμ νŠΈ λ¬Έμ„œ
β”‚   β”œβ”€β”€ 01 IOSYS-ITEMBANK-AI-001.md  # λ§ˆμŠ€ν„° ν”Œλžœ
β”‚   β”œβ”€β”€ 05 ...-R02.md                # Qwen3-VL λ¦¬μ„œμΉ˜
β”‚   └── 06 ...-POC.md                # POC κ³„νšμ„œ
└── CLAUDE.md                  # AI μ–΄μ‹œμŠ€ν„΄νŠΈ μ§€μΉ¨

기술 μŠ€νƒ

AI λͺ¨λΈ

λͺ¨λΈ μš©λ„ 크기 차원
Qwen3-VL-Embedding-2B λ©€ν‹°λͺ¨λ‹¬ μž„λ² λ”© (Primary) 4.3GB 2048
Qwen3-VL-Reranker-2B μž¬μˆœμœ„ν™” (μ˜ˆμ •) 4GB -
KURE-v1 ν•œκ΅­μ–΄ ν…μŠ€νŠΈ μž„λ² λ”© (Fallback) 2.2GB 1024

인프라

κ΅¬μ„±μš”μ†Œ 기술 버전
API Framework FastAPI 0.128.0
Vector DB PostgreSQL + pgvector 16 + 0.7
LLM Framework LangChain 1.2.7
Runtime Python 3.12.3
Deep Learning PyTorch + CUDA 2.5.1 + 12.1
ML Library Transformers 5.0.0
Container Docker Compose -

λΉ λ₯Έ μ‹œμž‘

μš”κ΅¬μ‚¬ν•­

  • GPU: NVIDIA RTX 2070 8GB 이상
  • RAM: 32GB 이상
  • Storage: 50GB 이상
  • Python: 3.12+

API μ„œλ²„ μ‹€ν–‰

# itembank-api λ””λ ‰ν† λ¦¬λ‘œ 이동
cd itembank-api

# κ°€μƒν™˜κ²½ ν™œμ„±ν™”
source .venv/bin/activate

# μ„œλ²„ μ‹œμž‘
uvicorn api.main:app --host 0.0.0.0 --port 8000

# API ν…ŒμŠ€νŠΈ
curl http://localhost:8000/health

μžμ—°μ–΄ 검색 ν…ŒμŠ€νŠΈ

# μžμ—°μ–΄λ‘œ μœ μ‚¬ λ¬Έν•­ 검색
curl -X POST http://localhost:8000/search/text \
  -H "Content-Type: application/json" \
  -d '{"query_text": "μ‚Όκ°ν˜•μ˜ 넓이λ₯Ό κ΅¬ν•˜μ‹œμ˜€", "top_k": 5}'

POC μ‹€ν—˜ μ‹€ν–‰

# POC λ””λ ‰ν† λ¦¬λ‘œ 이동
cd poc
source .venv/bin/activate

# μž„λ² λ”© 생성
python scripts/generate_qwen_embeddings.py

# 검색 평가
python scripts/evaluate_search.py --model all

API μ—”λ“œν¬μΈνŠΈ

검색 API

Method Endpoint μ„€λͺ…
POST /search/text μžμ—°μ–΄ 검색 (Qwen3VL λͺ¨λΈ)
POST /search/similar μœ μ‚¬ λ¬Έν•­ 검색 (item_id λ˜λŠ” μžμ—°μ–΄)
GET /search/items/{id} λ¬Έν•­ 상세 쑰회

RAG API

Method Endpoint μ„€λͺ…
POST /rag/query RAG 기반 μ§ˆμ˜μ‘λ‹΅
POST /rag/generate μœ μ‚¬ λ¬Έν•­ 생성

상세 API λ¬Έμ„œ: itembank-api/API.md

μ„±λŠ₯

API μ„œλ²„ (itembank-api)

μ§€ν‘œ κ°’ λΉ„κ³ 
μžμ—°μ–΄ 검색 (첫 쿼리) ~25초 λͺ¨λΈ λ‘œλ”© 포함
μžμ—°μ–΄ 검색 (이후) 0.8-1.0초 λͺ©ν‘œ 달성
μž„λ² λ”© 수 176,443개 μ „κ³Όλͺ© λ¬Έν•­
GPU λ©”λͺ¨λ¦¬ ~4.3GB RTX 2070 SUPER

POC 평가 κ²°κ³Ό

μ§€ν‘œ λͺ©ν‘œ κ²°κ³Ό μƒνƒœ
P95 Latency ≀200ms 30.5ms βœ…
VRAM Usage ≀8GB 4.3GB βœ…
MRR β‰₯0.65 0.74 βœ…
Top-5 Recall β‰₯80% 40.4% ⚠️

Top-K Recall 미달은 μžλ™ μƒμ„±λœ Ground Truth의 ν•œκ³„λ‘œ νŒλ‹¨λ¨

λ‘œλ“œλ§΅

Phase 1: λ¬Έν•­ 벑터화 및 검색 βœ… μ™„λ£Œ

  • Qwen3-VL-Embedding POC
  • pgvector 연동
  • REST API 개발 (itembank-api)
  • μžμ—°μ–΄ 검색 톡합 (Qwen3-VL)
  • 전체 데이터(176,443건) μž„λ² λ”©

Phase 2: μžλ™ λΆ„λ₯˜ μ‹œμŠ€ν…œ (μ˜ˆμ •)

  • κ΅μœ‘κ³Όμ • λΆ„λ₯˜ λͺ¨λΈ
  • μ„±μ·¨κΈ°μ€€ λ§€ν•‘
  • λ‚œμ΄λ„ 예츑

Phase 3: 이미지 λ¬Έν•­ 생성 (μ˜ˆμ •)

  • Fact Graph μΆ”μΆœ νŒŒμ΄ν”„λΌμΈ
  • λ¬Έν•­ 생성 λͺ¨λΈ
  • Integrity Gate 검증

Phase 4: 톡합 ν”Œλž«νΌ

  • REST API 개발
  • Qwen3-VL-Reranker 톡합
  • κ΄€λ¦¬μž UI
  • λͺ¨λ‹ˆν„°λ§ λŒ€μ‹œλ³΄λ“œ

λ¬Έμ„œ

API μ„œλ²„ (itembank-api)

λ¬Έμ„œ μ„€λͺ…
API λ¬Έμ„œ REST API λͺ…μ„Έ
μΈμˆ˜μΈκ³„ μž‘μ—… 이λ ₯ 및 ν™˜κ²½ 정보
README μ„œλ²„ μ‹œμž‘ κ°€μ΄λ“œ

POC

λ¬Έμ„œ μ„€λͺ…
POC λ³΄κ³ μ„œ POC μ΅œμ’… κ²°κ³Ό
μΈμˆ˜μΈκ³„ POC μž‘μ—… 이λ ₯

ν”„λ‘œμ νŠΈ 전체

λ¬Έμ„œ μ„€λͺ…
λ§ˆμŠ€ν„° ν”Œλžœ ν”„λ‘œμ νŠΈ 전체 κ³„νš
Qwen3-VL λ¦¬μ„œμΉ˜ λͺ¨λΈ λ¦¬μ„œμΉ˜ κ²°κ³Ό

λ³€κ²½ 이λ ₯

λ‚ μ§œ λ³€κ²½ λ‚΄μš©
2026-01-29 itembank-api: Qwen3-VL μžμ—°μ–΄ 검색 톡합, Python 3.12 μ—…κ·Έλ ˆμ΄λ“œ
2026-01-29 itembank-api: FastAPI μ„œλ²„ ꡬ좕, λ¬Έμ„œν™”
2026-01-27 POC: Qwen3-VL-Embedding 평가 μ™„λ£Œ

λΌμ΄μ„ μŠ€

Private - IOSYS Internal Use Only

About

IOSYS ItemBank AI Generative Project

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors