04_채팅_모델_선정.md - 100-hours-a-week/9-team-Devths-WIKI GitHub Wiki

채팅 모델 선정

작성 상태: ✅ 완료 최종 업데이트: 2026-01-25


📋 목차


1. 개요

목적

일반 대화 및 취업/진로 상담을 위한 채팅 모델 선정

사용 사례

  • 취업 준비 관련 일반 질문 답변
  • 진로 상담 및 조언
  • 이력서/포트폴리오 관련 질문
  • RAG 기반 개인화된 상담

2. 요구사항

요구사항 목표 우선순위
응답 속도 3초 이내 높음
한국어 자연스러움 4.5/5.0 이상 높음
문맥 이해 대화 히스토리 활용 높음
비용 월 $50 이하 중간
RAG 연동 VectorDB 검색 결과 활용 높음

3. 후보 모델 비교

3.1 Gemini Flash ✅ 선정

개요:

  • Google의 경량 LLM
  • 빠른 응답 속도

장점:

  • ✅ 빠른 응답 (1~2초)
  • ✅ 한국어 자연스러움 4.8/5.0
  • ✅ 낮은 비용 (~$0.0005/요청)
  • ✅ 스트리밍 지원

단점:

  • ❌ 복잡한 추론에서 간혹 오류
  • ❌ API 의존

비용: $0.075/1M 입력 토큰, $0.30/1M 출력 토큰


3.2 Gemini Pro

개요:

  • Google의 고성능 LLM

장점:

  • ✅ 높은 정확도
  • ✅ 복잡한 추론 가능
  • ✅ 긴 문맥 지원 (1M 토큰)

단점:

  • ❌ Flash 대비 느림 (2~4초)
  • ❌ 비용 높음

용도: 복잡한 분석이 필요한 경우 Fallback


3.3 vLLM (Llama-3-Korean-8B)

개요:

  • 오픈소스 한국어 LLM
  • 자체 GPU 서버에서 호스팅

장점:

  • ✅ 비용 고정 (GPU 서버 비용만)
  • ✅ 데이터 프라이버시
  • ✅ 커스터마이징 가능

단점:

  • ❌ 인프라 관리 필요
  • ❌ Gemini 대비 정확도 낮음
  • ❌ 초기 설정 복잡

용도: V2+ 비용 절감 옵션


4. 최종 선정

선정 모델: Gemini Flash

항목 내용
모델명 gemini-3-flash-preview
선정 근거 빠른 응답, 한국어 우수, 비용 효율
월 예상 비용 ~$20 (월 5,000건 기준)
Fallback Gemini Pro (복잡한 질문)

비용 분석

월간 예상 사용량:
- 일반 채팅: 3,000건/월
- 상담 대화: 2,000건/월
- 평균 토큰: 입력 500 + 출력 300 = 800 토큰/요청

월간 비용:
- 입력: 5,000 × 500 = 2.5M 토큰 × $0.075/1M = $0.19
- 출력: 5,000 × 300 = 1.5M 토큰 × $0.30/1M = $0.45
- 총: ~$0.64/월 (매우 저렴)

5. 채팅 모드별 전략

5.1 일반 대화 (GENERAL)

사용자: "취업 준비 어떻게 해야 해?"
    │
    ▼
[RAG 검색] - 사용자 이력서/포트폴리오 참조 (있는 경우)
    │
    ▼
[Gemini Flash] - 개인화된 조언 생성
    │
    ▼
응답: "경력과 기술 스택을 고려했을 때..."

5.2 분석 요청 (ANALYSIS)

사용자: "내 이력서 분석해줘"
    │
    ▼
[VectorDB 검색] - 저장된 이력서/채용공고 조회
    │
    ▼
[Gemini Flash/Pro] - 분석 수행
    │
    ▼
응답: "강점: ..., 약점: ..., 개선점: ..."

5.3 Fallback 전략

async def chat_with_fallback(message: str, context: dict):
    try:
        # 1차: Gemini Flash
        response = await gemini_flash.generate(message, context)
        if is_valid_response(response):
            return response
    except Exception as e:
        logger.warning(f"Gemini Flash failed: {e}")

    # 2차: Gemini Pro (Fallback)
    return await gemini_pro.generate(message, context)

6. 구현 참조

코드 파일

  • 3.model/app/services/llm_service.py - Gemini API 호출
  • 3.model/app/services/rag_service.py - RAG 기반 채팅
  • 3.model/app/api/routes/ai.py - 채팅 엔드포인트

API 엔드포인트

  • POST /ai/chat - 채팅 (SSE 스트리밍)

사용 예시

# 요청
{
    "room_id": "room_001",
    "user_id": "user_123",
    "message": "백엔드 개발자로 취업하려면 어떤 준비가 필요해?",
    "model": "gemini",
    "context": {
        "mode": "general"
    },
    "history": []
}

# 응답 (SSE 스트리밍)
data: {"content": "백엔드", "done": false}
data: {"content": " 개발자로", "done": false}
data: {"content": " 취업하려면...", "done": false}
data: {"content": "", "done": true}