일반_질문_모델_선정.md - 100-hours-a-week/9-team-Devths-WIKI GitHub Wiki
일반 질문 모델 선정
최종 업데이트: 2026-02-09
📋 목차
1. 개요
목적
평시 일반 질문 모드(채팅 모드) 에서 사용할 LLM 모델 구성을 정의한다.
- 취업/진로 관련 일반 Q&A
- 이력서·포트폴리오 작성 팁
- 회사/직무 정보, 학습 로드맵 안내
- 필요 시 RAG(VectorDB) 기반 개인화된 답변
배경
초기에는 04_채팅_모델_선정.md 에 따라 Gemini Flash 단일 모델로 일반 채팅을 처리했다.
이후 05_꼬리질문_모델_선정.md 에서 평시 질의응답 트래픽이 많아지면 API 비용이 커진다는 문제가 확인되었고,
- Primary: vLLM EXAONE 8B (자체 서빙)
- Fallback: Gemini Flash (오류/과부하 시)
라는 비용 최적화 전략으로 v2 구조를 변경하였다. 이 문서는 그 최종 구조를 기준으로 한다.
2. 요구사항
| 요구사항 | 목표 | 우선순위 |
|---|---|---|
| 응답 속도 | 2~3초 이내 | 높음 |
| 한국어 자연스러움 | 4.5/5.0 이상 | 높음 |
| 문맥 이해 | 최근 대화 히스토리·사용자 프로필 활용 | 높음 |
| 비용 | 월 $30 이내 (평시 Q&A 중심) | 높음 |
| 안정성 | vLLM 장애 시 자동 Fallback | 높음 |
| 프라이버시 | 이력서·포트폴리오 내용 유출 방지 | 중간 |
| RAG 연동 | VectorDB 검색 결과 주입 | 중간 |
3. 후보 모델 비교
3.1 vLLM EXAONE-3.5-8B (자체 서빙) ✅
개요
- LG AI Research의 한국어 특화 7.8B 모델
- vLLM OpenAI 호환 서버로 자체 서빙
- GPU: NVIDIA L4 (24GB) 기준
장점
- ✅ API 비용 0원 (인프라 비용만 발생)
- ✅ 한국어 비율·자연스러움 우수 (75~80점 수준)
- ✅ 우리 서비스에 특화된 프롬프트·시스템 메시지 튜닝 가능
- ✅ 사용자 데이터가 외부로 나가지 않아 프라이버시 우수
단점
- ❌ Gemini Flash 대비 응답 속도 느림 (
1015초, 벤치마크 기준) - ❌ GPU 서버 관리 필요 (콜드스타트, 헬스체크 등)
- ❌ 모델 업데이트·튜닝 책임이 팀에 있음
적합도
- 평시 질의응답의 비용과 프라이버시를 최우선으로 할 때 매우 적합
- 다만, 속도는 GPU·서빙 최적화 정도에 따라 튜닝 필요
3.2 Gemini Flash (API) ✅
개요
- Google의 경량 LLM (문서
04_채팅_모델_선정.md에서 이미 검증) - 스트리밍 응답, RAG 연동 용이
장점
- ✅ 빠른 응답 (1~2초)
- ✅ 한국어 자연스러움 4.8/5.0
- ✅ API 사용만으로 인프라 관리 불필요
- ✅ 스트리밍 지원으로 대화 UX 우수
단점
- ❌ 호출량이 많아질수록 API 비용 증가
- ❌ 프롬프트·데이터가 Google로 전송됨 (정책상 민감한 정보는 마스킹 필요)
비용(요약) — 04_채팅_모델_선정.md 기준
- $0.075/1M 입력 토큰, $0.30/1M 출력 토큰
- 일반 채팅 5,000건/월 기준 비용은 매우 낮지만, 면접·RAG와 합산 시 점점 커질 수 있음
3.3 Gemini Pro (비교용)
개요
- 고성능 LLM, 복잡한 추론·분석에 적합
결론
- 일반 질문 모드에서는 과도한 스펙
- 면접 평가 등 복잡한 분석 파트에서만 사용 (문서
05_꼬리질문_모델_선정.md참고)
4. 최종 선정
4.1 전략 요약
| 역할 | 모델 | 선정 근거 |
|---|---|---|
| Primary | vLLM EXAONE-3.5-8B | 자체 서빙으로 API 비용 0원, 한국어 품질 우수 |
| Fallback | Gemini Flash | vLLM 장애·과부하·타임아웃 시 빠르게 대체 가능 (저비용 API) |
초기 설계(문서 04_채팅_모델_선정.md)에서는 Gemini Flash 단일 모델을 사용했으나,
05_꼬리질문_모델_선정.md에서 평시 질의응답의 호출 빈도가 매우 높아질 수 있음이 확인되었다.
이에 따라 v2에서는 다음과 같이 조정했다.
- 평시 채팅의 대부분은 vLLM EXAONE 8B로 처리 → API 비용 없음
- vLLM 서버 장애·콜드스타트·타임아웃 등 예외 상황에서만 Gemini Flash 호출
결과적으로,
- 사용자 체감 품질을 유지하면서
- API 비용을 크게 줄이는 구조를 채택하였다.
5. 일반 질문 모드 동작 전략
5.1 모델 선택 로직 (요약)
def select_model_for_general_chat() -> str:
\"\"\"평시 일반 질문 모드 모델 선택\"\"\"
# 기본은 vLLM EXAONE 8B
return \"vllm-exaone-8b\" # 오류 시 Gemini Flash Fallback
상세 로직은 05_꼬리질문_모델_선정.md의 select_model() 예시에서
mode == "chat" 분기와 동일하게 동작한다.
5.2 처리 플로우
[사용자 일반 질문]
│
▼
[세션/히스토리 조회] ← Redis
│
▼
[RAG 필요 여부 판단]
├─ 필요 O → VectorDB(Chroma) 검색 → 컨텍스트 생성
└─ 필요 X → 기본 시스템 프롬프트만 사용
│
▼
[vLLM EXAONE 8B 호출]
│ └─ 실패/타임아웃 → Gemini Flash Fallback
▼
[SSE 스트리밍 응답]
5.3 RAG 연동
- 사용자의 이력서·포트폴리오·지원 공고 등은 ChromaDB에 임베딩되어 있다.
- 일반 질문이라도, 아래와 같은 경우에는 RAG를 활성화한다.
- 이력서 피드백, 공고 매칭, 포트폴리오 개선 요청 등
- RAG 활성화 시:
- VectorDB에서 관련 문서를 top-k로 검색
- 검색 결과를 시스템 프롬프트/컨텍스트로 주입한 뒤 vLLM 호출
6. 구현 참조
6.1 코드 파일
3.model/app/infrastructure/llm/vllm.py— vLLM Provider3.model/app/services/vllm_service.py— vLLM 서버 호출·스트리밍 처리3.model/app/services/llm_service.py— Gemini 호출 및 Fallback 로직3.model/app/services/rag_service.py— VectorDB 기반 RAG 처리3.model/app/api/routes/v2/chat.py—/ai/chatv2 채팅 엔드포인트
6.2 설정
-
.env/settings.py주요 항목:GCP_VLLM_BASE_URL— vLLM EXAONE 8B 서버 URLGOOGLE_API_KEY— Gemini Flash Fallback 용CHROMA_SERVER_HOST,CHROMA_SERVER_PORT— VectorDB 서버
7. 비용 및 확장 전략
7.1 비용 구조 (요약)
05_꼬리질문_모델_선정.md 기준, 월 2,000회 일반 대화 + 500회 면접이 있다고 가정하면:
- 평시 일반 대화 2,000회:
- vLLM EXAONE 8B: 자체 서빙 → API 비용 $0
- Fallback (약 5%): 100회 × $0.0005 ≒ $0.05/월
→ 일반 질문 모드 자체의 API 비용은 사실상 0에 가깝고,
전체 비용은 면접 평가(Gemini Pro, OpenAI) 쪽이 지배적이다.
7.2 향후 확장
- 트래픽 증가 시:
- vLLM 서버를 수평 확장(컨테이너/인스턴스 수 증가)
/ai/chatEndpoint 서버 역시 복수 인스턴스로 로드 밸런싱
- 품질 향상이 필요할 경우:
- EXAONE 8B → 32B 전환을 고려하되, 비용·지연 시간을 면접 모드와 함께 재평가
일반 질문 모드는 비용 효율 + 적당한 품질을 목표로 하므로,
현재 구조(8B Primary + Gemini Flash Fallback)가 v2 요구사항에 가장 적합하다.