DeepNexus Quick Start
Initial Idea는 RAG, Fine-tuning, and more. 공인 중개사 시험 문제 생성기로 발전하여 (Idea Expansion and Development), 다양한 공인 시험의 문제 생성기로 범용화
A. 지능형 RAG with Small FTed LLM — 최적 흐름
1. q = 사용자 입력
2. refined_q = 질의 정제 (Query Rewriting: LLM or rule-based)
3. argumented_q = DB 검색 (Vector DB → 관련 문서 추출)
4. reranked_docs = 관련성 재정렬 (Reranker 모델)
5. final_prompt = Prompt 구성 (문서 + 지시어 + q 포함)
6. output = Small FTed LLM 문제 생성
🔁 각 단계 요약
단계 | 설명 | 추천 도구 |
---|---|---|
1. q | 사용자 원질문 | - |
2. refined_q | LLM 기반 질의 정제 or keyword 추출 | ko-mt5 , tinyllama , or 룰 기반 |
3. argumented_q | 벡터 DB 문서 검색 | Chroma , Qdrant , bge-m3 |
4. reranked_docs | 문서 중요도 재정렬 | bge-reranker , cross-encoder |
5. final_prompt | 문서 + 스타일 템플릿으로 구성 | 템플릿 엔진 (jinja2 등) |
6. output | 작은 FTed LLM이 문제 생성 | Llama 3 8B FTed or TinyLlama FTed |
B. 예시 (공인중개사 문제 생성)
q:
"간판 철거 요건 관련 문제 만들어줘"
refined_q:
"공인중개사법에서 중개업자의 간판 철거 요건이 명시된 조항은 무엇인가?"
argumented_q:
→ Chroma DB 검색 결과 (예: 법 제18조 제2항
, 시행규칙 제X조
등)
reranked_docs:
→ bge-reranker
로 법 조항 우선순위 정렬
final_prompt:
[법령 발췌]
공인중개사법 제18조 제2항: 중개업자가 폐업신고를 한 경우, 간판을 지체 없이 철거해야 한다.
아래 조건에 맞게 객관식 문제를 생성하라:
- 문제 유형: basic
- 보기 5개, 정답 1~2개 가능
- 해설 포함
- 형식: JSON
output:
→ FTed LLM이 문제 JSON 출력
💡 포인트
- Small FTed LLM을 쓰기 때문에 입력 prompt가 핵심
→ prompt 품질만 높으면 성능 매우 우수 - LLM에 맡기는 건 "스타일 재현"
→ 지식은 전적으로 RAG가 공급 - refined_q 단계는 LLM 없이 룰 기반으로도 가능 (빠름)
🔧 필요한 구성 요소 (미니멀한 구조)
구성 요소 | 추천 기술 |
---|---|
Vector DB | Chroma or Qdrant |
Embedding | bge-m3 or ko-simcse |
Reranker | bge-reranker |
Prompt Engine | jinja2 , or 간단한 Python 템플릿 |
FTed 모델 | Llama3-8B , TinyLlama , Phi , Mistral 등 로컬 실행 |
API Layer | FastAPI , Gradio , HF Spaces |
C. 실전문제 DB 구조 (궁극 목표)
📦 DB 구성 3층 구조
레벨 | 유형 | 설명 | 비고 |
---|---|---|---|
📘 1 | 기존 기출문제 | 실제 시험 기반 440문항 × 과목 | 수작업 또는 OCR |
✍️ 2 | 기출문제 변형/업데이트 | 법령 변경, 사례 보완 등 | FTed 모델 생성 or OpenAI API |
✨ 3 | 신규 생성 문제 | 출제경향 기반, 또는 사용자 질의 기반 | OpenAI API 또는 RAG 기반 자동 생성 |
D. 사용 흐름 (문제 응답 + DB 강화)
사용자 입력 q
│
├─> 🔍 Step 1: 기존 DB 검색 (실전문제DB + 유사도 기반)
│ ├─> 유사 문제 있으면 → ✅ 즉시 리턴
│ └─> 없으면 → Step 2
│
└─> 🤖 Step 2: OpenAI API로 신규 문제 생성
└─> ✅ 사용자에게 즉시 응답 + 문제 JSON 저장 (DB 누적)
✅ 누적 방식
q + 생성된 문제 + 생성 일시 + 토큰/비용 기록
저장- 반복 질문은 비용 없이 기존 문제 제공 가능
- FT 재훈련 or 품질 평가에도 활용 가능
E. 궁극 구조 요약
요소 | 기능 | 비고 |
---|---|---|
실전문제 DB | 질의 응답 캐싱 + 수동 문제 보존 | 벡터 검색 지원 |
OpenAI API | 빈 문제영역 자동 생성 | 임시 모델 또는 지속 |
FTed LLM | 기출 스타일 학습된 문제 생성기 | 스타일/해설용 |
RAG | 법령 기반 문제 생성 | 최신 정보 대응 |
누적 저장 | 사용자 질문 → API 응답 → DB 보강 | 증강 loop |
장점
- 사용자는 항상 신선한 문제를 받음
- 시스템은 점점 풍부한 문제은행을 구축함
- 나중에 RAG + FT 재훈련을 위한 고급 학습데이터 확보
- 비용 절감: 유사 질의는 캐싱된 문제 제공
기술 구현 핵심 포인트
항목 | 구현 포인트 |
---|---|
벡터 검색 | 기출문제 임베딩 후 similarity search |
신규질문 판단 | cosine similarity + threshold (예: 0.75 이하일 경우 생성) |
저장 구조 | 질문 + 생성문제 JSON + 생성방법 + source(openai/FTed) |
중복방지 | 질문 hash + 유사도 이중 필터링 |
사용자 응답 시간 단축 | 검색 먼저, 생성은 백업 플랜 |
F. 시스템의 본질 요약
개념 | 의미 |
---|---|
Element 분화 | 시스템을 작은, 명확한 단위로 나눠서 각자 "한 가지 일만" 잘하게 만든다 |
지능형 작동 | FTed LLM, RAG, reranker, API 생성기 각각이 똑똑하게 작동 |
누적형 학습 | 사용자 입력 하나하나가 데이터가 되고, 시스템이 성장한다 |
속도와 품질 | 빠르게 응답하되, 실전 퀄리티를 유지하는 설계 |
복잡성의 함정 | 시스템이 커질수록 유지보수가 어려워진다 → 구조화가 생명 |
지금 해야 할 건?
"Element 분화를 유지하면서 전체 시스템의 복잡성을 누르는 아키텍처 설계"
G. 구조화 원칙 (복잡성 통제 5원칙)
원칙 | 설명 | 적용 예시 |
---|---|---|
1. 기능 단일성 | 각 모듈은 한 가지 목적만 | FTed LLM = 문제 스타일 생성 전용 |
2. I/O 명확성 | 입력과 출력 명시적으로 정의 | 모든 모듈은 JSON in → JSON out |
3. 독립 실행 가능성 | 모든 컴포넌트는 단독으로도 작동 가능 | 예: reranker 는 vector search 없이도 테스트 가능 |
4. 에러 격리 | 실패한 컴포넌트는 전체에 영향 X | 문제 생성 실패 시 캐시 fallback |
5. 추가 모듈은 플러그인처럼 | 전체 설계는 열려 있어야 한다 | 이후에 사용자 성취도 기반 추천 모듈 추가해도 설계 변경 최소화 |
H. 실행 전략: "4코어 모듈" 중심의 시스템 설계
모듈 | 기능 | 호출 위치 |
---|---|---|
🔍 SearchCore | 실전문제 벡터 검색 | 사용자 질문 직후 |
🧠 GenCore | 문제 생성기 (OpenAI / FTed LLM) | 검색 실패 시 |
📦 SaveCore | 생성된 문제 저장 / 누적 | 항상 |
🧮 RouteCore | 유사도 기반 분기 (search or generate ) | 항상 |
각 모듈은 독립적 FastAPI or 함수로도 실행 가능, 스케일링 가능
I. 전체 흐름 정리 (최종 설계)
[사용자 질문] → RouteCore
│
├─> SearchCore → 유사 문제 → 반환
│
└─> GenCore (OpenAI or FTed LLM)
↓
SaveCore → DB에 누적
↓
사용자에게 문제 + 해설 응답