동양미래대학교 숲의 줄임말로, 학생들의 교내 생활 편리성 증진 목적의 정보 제공 및 통합 커뮤니티 서비스입니다.
사용자에게 공지사항, 학사 일정 등 정보를 실시간으로 제공하고, 시간표를 등록해 학업 관리를 돕습니다.
팀원 모집, 맛집 추천, 과팅 기능 등 교내 다른 학우들과 소통할 수 있는 커뮤니티를 제공합니다.
동숲의 AI 백엔드는 학생이 직접 입력하고 확인해야 했던 반복 작업을 자동화하는 데 초점을 맞춰 설계했습니다. 시간표 이미지는 일정 데이터로, 학교 정보 질문은 근거 기반 답변으로, 커뮤니티 문장은 안전한 게시 환경을 위한 필터링 결과로 변환합니다.
| AI 영역 | 해결한 문제 | 구현 포인트 |
|---|---|---|
| 🧠 학교 정보 RAG 챗봇 | 공지사항, 학사일정, 연락처처럼 흩어진 학교 정보를 대화형으로 조회 | BM25 + semantic search 기반 Hybrid Search, RAG context 구성, Ollama gpt-oss:20b 연동 |
| 📅 시간표 OCR 분석 | 학생이 시간표를 직접 입력해야 하는 불편함 감소 | OpenCV 격자 검출, Tesseract OCR, 셀 분리, 강의명/교수명/강의실/교시 매핑 |
| 🛡️ 커뮤니티 텍스트 필터링 | 게시글/채팅에서 부적절한 표현을 사전에 감지 | ELECTRA 기반 문장 분류, 규칙 기반 필터, 한국어 띄어쓰기/변형 표현 대응 |
| 📊 AI 품질 검증 | 모델 응답을 감으로 확인하지 않고 재현 가능한 기준으로 점검 | 질문 세트, Recall@k, 출처 URL 검증, JSON 리포트, 경량/전체 회귀 스크립트 |
정해진 세션 정원 수에 따라 매칭 인원 충족 시 과팅 세션이 시작됩니다.
과팅은 채팅봇의 안내에 따라 진행되며, 주어진 대화 주제로 사용자가 대화를 하게 됩니다.
세션 마지막에는 마음에 드는 사람을 선택할 수 있으며, 서로를 선택한 경우 1:1 채팅방이 개설됩니다.
사용자는 자신이 선택한 공지사항과 대학 공지를 실시간으로 받아볼 수 있습니다.
등록된 학사 일정이 있는 날은 매일 아침 알림으로 리마인드합니다.
시간표를 등록한 경우도 학사 일정 알림과 같은 시간에 함께 알림으로 리마인드합니다.
Kakao map 기반 학교 주변 1Km 이내 식당을 확인할 수 있습니다.
사용자간 추천을 통해 많이 가는 맛집을 조회할 수 있습니다.
- 시간표 이미지를 업로드하면 OCR과 OpenCV 기반 분석 로직이 강의명, 교수명, 강의실, 요일/교시 정보를 추출해 일정을 자동 등록합니다.
- 이미지 품질 차이를 고려해 격자 검출, 셀 분리, 텍스트 보정 과정을 거쳐 Spring Boot 서버가 사용할 수 있는 시간표 데이터로 변환합니다.
- 캘린더 UI를 통해 학업 일정을 추가 및 관리할 수 있습니다.
커뮤니티 게시글과 채팅 문장을 분석해 부적절한 표현을 사전에 감지합니다. 파인튜닝된 ELECTRA 모델과 규칙 기반 필터를 함께 사용해 한국어/영어 비속어, 띄어쓰기 변형, 우회 표현을 안정적으로 처리합니다.
- ML 기반 필터와 규칙 기반 필터를 분리해 운영 환경에서 필요한 방식으로 선택할 수 있습니다.
- 한국어 문장 특성을 고려해 단순 키워드 매칭보다 문맥 기반 판별을 우선합니다.
- 회귀 케이스와 품질 리포트로 false positive/false negative를 지속적으로 확인합니다.
튜터링, 스터디, 프로젝트 등 다양한 모임을 모집하고 참여할 수 있습니다.
원하는 물건을 이미지와 함께 등록해 거래할 수 있습니다.
학교 관련 궁금한 점을 챗봇에게 질문하면 학교 데이터에서 근거를 검색한 뒤 실시간 답변을 받을 수 있습니다. 챗봇은 공지사항, 학사일정, 연락처, 장학금, 수강신청, 졸업 요건 등 학교 정보에 특화된 RAG 흐름으로 동작합니다.
사용자 질문
→ 인사/의도 감지
→ 학교 문서 Hybrid Search(BM25 + semantic search)
→ RAG context 구성
→ Ollama 기반 gpt-oss:20b 응답 생성
→ 안전 필터 및 출처 기반 응답 반환
챗봇은 단순 응답 확인이 아니라 질문 세트 기반으로 검색 품질과 답변 근거성을 함께 평가합니다.
- 질문 세트:
tests/regression/chatbot/rag_eval_cases.json - 평가 범위: 학사일정, 연락처, 장학금, 수강신청, 졸업, 학과/기숙사 안내
- 검색 평가: top-k 검색 결과에 기대 URL/문서가 포함되는지
Recall@1,Recall@3측정 - 답변 평가: 필수 키워드, 날짜 형식, 출처 URL 포함 여부, 비공식 URL 환각 여부 점검
- 자동화:
RAG Light CheckGitHub Actions가 PR 라벨run-rag-check또는 수동 실행에서 질문 세트 스키마와 경량 query-index 회귀를 검증합니다.RAG Full Evaluation은 self-hosted runner가 준비되면 수동 실행으로 전체 RAG 리포트를 생성하며, GitHub artifact에는 상세 질문/답변을 제외한 날짜 prefix summary만 업로드합니다. runner가 준비되기 전에는 로컬에서 전체 RAG 평가를 수동 실행합니다.
# 질문 세트 스키마 검증
python tests/regression/chatbot/evaluate_rag_retrieval.py --validate-only
# 로컬 모델/아티팩트 기반 전체 RAG 평가
python tests/regression/chatbot/evaluate_rag_retrieval.py --out tests/reports/chatbot/rag_eval_report.json --fail-on-fail
# OSS FastAPI 서버 대상 API 회귀 평가
python tests/regression/chatbot/run_chatbot_regression.py --url http://127.0.0.1:8010/chatbot| 구분 | 질문 세트 | 검색 Recall@3 | 답변 근거성 | 비고 |
|---|---|---|---|---|
| 개선 전 기준선 | 30개 | 리포트 기준값 | 리포트 기준값 | tests/reports/chatbot/rag_eval_report.json 또는 저장된 baseline 리포트 |
| 현재 브랜치 | 30개 | summary.top3_url_accuracy |
summary.source_url_pass_rate |
tests/regression/chatbot/evaluate_rag_retrieval.py 실행 결과로 갱신 |
| CI 경량 회귀 | synthetic + schema | 통과/실패 | 통과/실패 | 무거운 임베딩 모델 다운로드 없이 PR에서 빠르게 검증 |
| 이름 | 분담 |
|---|---|
| 주성준 |
|
| 백승민 |
|
| 유제승 |
|
| 우승원 |
|
| 전승빈 |
|
| FE |
|
| BE |
|
| AI |
|
| 주성준 | 백승민 | 유제승 | 우승원 | 전승빈 |
|---|---|---|---|---|
| BE | BE | AI | FE | FE |
본 서비스는 아래 오픈소스/오픈웨이트 소프트웨어를 사용합니다.
배포 형태: 서버 호스팅 추론(가중치 미배포), 모델/파라미터 수정 없음.
- License: Apache License 2.0 · 원문: https://github.com/openai/gpt-oss/blob/main/LICENSE
- Source: OpenAI gpt-oss
- Notes: 원본 그대로 사용(파인튜닝/양자화/파라미터 변경 없음), 서버 내 추론만 수행
Model: gpt-oss:20b
Digest: sha256:b112e727c6f18875636c56a779790a590d705aec9e1c0eb5a97d51fc2a778583
Short ID: aa4295ac10c3
Deployed at: 2025-10-10 KST
OpenAI SDK (Python): 2.2.0
Modifications: none (no finetune/quant/param changes)
- OpenAI Python SDK — Apache-2.0
- FastAPI — MIT
- Starlette — BSD-3-Clause
- Uvicorn — BSD-3-Clause
- Pydantic — MIT
- python-dotenv — BSD
- requests — Apache-2.0
전체 목록: THIRD_PARTY_LICENSES.md