개발 요구 사항
1. 개발 범위
| 구분 | 범위 |
|---|---|
| 화면 | 로그인(분할 레이아웃) · 회원가입 · 채팅(대시보드 타일 · 사이드바) · 게스트 채팅 |
| API | /api/chat, /api/signup, 조회용 assignments · campus · departments · grades · notices · timetable |
| 데이터 | 학생 · 과목 · 수강/성적 · 시간표 · 과제 · 공지 · 캠퍼스 시설 · 학과 상세, 데모 시드(학번 2025001) |
| 제외 (현재) | LLM · RAG · 음성 · 크롤러 — 원본 버전에만 있음 |
2. 챗봇 응답
- 질문을 8개 카테고리(인사 · 시간표 · 성적 · 자격증 · 공지 · 과제 · 캠퍼스 · 학과)로 키워드 매칭한다.
- 카테고리별로 Prisma로 DB를 조회해 정해진 형식의 답변을 만든다.
- 시간표는 요일("화요일", "오늘")로 거른다. "수업"과 "수요일"처럼 겹치는 키워드는 오탐을 막도록 처리했다.
- 개인 정보(시간표 · 성적 · 과제)는 로그인하지 않으면 로그인 안내로 답한다.
3. 인증 · 계정
- NextAuth Credentials + JWT 세션, 비밀번호는 bcrypt로 저장한다.
- 로그인 시 일반 회원(
users)을 먼저 찾고, 없으면 학번(student)으로 찾는다. - 대화 기록(
chat_logs)은 일반 회원만 남기고, 게스트는 저장하지 않는다.
4. 원본 RAG 파이프라인 (2025)
- 학칙 PDF와 MongoDB의 공지·학과 데이터를 청크로 나눠 한국어 임베딩(
jhgan/ko-sroberta-multitask)으로 Chroma에 저장했다. - 업데이트용·서빙용 컬렉션을 따로 두고 포인터로 전환하는 A/B 인덱스로 무중단 갱신했다.
- MongoDB
updated_at워터마크로 바뀐 문서만 다시 인덱싱했다. - 검색 결과를 근거로 OpenAI
gpt-4o-mini가 답을 생성했다.