멀티에이전트 RAG 기반 교학팀 문의 자동 응답 시스템
본 프로젝트에서 제안한 시스템은 배포가 완료되었으며,
아래 링크를 통해 실제 동작을 확인할 수 있습니다.
※ 본 서비스는 데모 목적의 배포 환경으로,
서버 상태에 따라 일시적으로 접근이 제한될 수 있습니다.
교학팀 규정 문서를 기반으로 학생들의 질문에 자동으로 답변하는 챗봇 시스템입니다.
- 🔍 Late Interaction 기반 벡터 검색 (ColBERT)
- 🏷️ 쿼리 분류 및 카테고리 기반 필터링
- 📄 LLM 기반 문서 관련성 검증
- 🔄 다단계 검색 루프 (1차/2차 문서 검증)
- ✅ 답변 가능성 자동 판단
- 📝 조건부/완전 응답 생성
- 🌐 웹 UI 채팅 인터페이스
- ☁️ AWS EC2 배포 지원
-
쿼리 분류 (
query_classifier.py)- 가비지 쿼리 판별
- 카테고리 분류 (학사운영, 교육과정, 장학금 등 10개 카테고리)
-
하이브리드 검색 (
retriever.py)- ColBERT Late Interaction 방식
- 카테고리 기반 Pre-filtering
- PLAID 인덱스 기반 Top-K 문서 검색
-
문서 검증 (
document_validator.py)- LLM 기반 개별 문서 관련성 평가
- 1차: Top 1~10 검증
- 2차: Top 11~20 검증 (재시도 시)
-
답변 가능성 확인 (
context_validator.py)- 검증된 문서로 답변 가능 여부 판단
-
조건부 체크 (
conditional_checker.py)- 사용자 상황에 따라 답변이 달라지는지 판단
-
답변 생성
- 완전 응답: 일반 답변 생성 (
answer_agent.py) - 조건부 응답: 상황별 안내 (
conditional_agent.py) - Human Handoff: 교학팀 문의 안내
- 완전 응답: 일반 답변 생성 (
-
쿼리 분류 (
query_classifier.py)- 가비지 쿼리 판별
- 카테고리 분류 (수강신청, 성적, 휴학/복학 등)
-
하이브리드 검색 (
retriever.py)- Late Interaction 방식
- 카테고리 필터링
- Top 20개 문서 검색
-
문서 검증 (
document_validator.py)- LLM 기반 개별 문서 관련성 평가
- 1차: Top 1~10 검증
- 2차: Top 11~20 검증 (재시도 시)
-
답변 가능성 확인 (
answer_generator.py)- 검증된 문서로 답변 가능 여부 판단
-
답변 생성
- 가능: 일반 답변
- 불가능 (1차): 2차 문서로 재시도
- 불가능 (2차): 조건부
- Language: Python 3.10.19
- Framework: FastAPI, Uvicorn
- LLM: OpenAI GPT-3.5-turbo
- Vector Search: ColBERT-Matryoshka (dragonkue/colbert-ko-0.1b)
- Index: PyLate PLAID
- Frontend: HTML/CSS/JavaScript (Single Page)
- Deploy: Docker, Nginx, AWS EC2
git clone https://github.com/DSLab-MultiAgent/chatbot-project.git
cd chatbot-projectpowershell -c "irm https://astral.sh/uv/install.ps1 | iex"curl -LsSf https://astral.sh/uv/install.sh | sh# uv 환경 초기화
uv init
# 가상환경 생성
uv venv
# 가상환경 활성화
# Windows:
.venv\Scripts\activate
# Mac/Linux:
source .venv/bin/activate
# 의존성 설치
uv add -r requirements.txtcp .env.example .env
# .env 파일을 열어서 API 키 입력
# OPENAI_API_KEY=실제_API_키_입력
# VECTOR_DB_FILE_ID=실제_File_ID_입력python scripts/download_vector.py# 개발 서버 실행
python run.py- 웹 UI: http://localhost:8000
AWS EC2에 배포하려면 deploy/DEPLOY_GUIDE.md를 참고하세요.
# 배포 스크립트 실행
chmod +x deploy/deploy.sh
./deploy/deploy.sh├── index.html # 웹 UI (채팅 인터페이스)
├── config/
│ └── config.yaml # 카테고리 및 프롬프트 설정
├── deploy/ # EC2 배포 관련
│ ├── deploy.sh
│ ├── ec2-setup.sh
│ ├── nginx.conf
│ └── chatbot.service
├── scripts/
│ └── download_vector.py # 벡터 DB 다운로드
├── src/
│ ├── main.py # FastAPI 앱 엔트리포인트
│ ├── models.py # Pydantic 모델 정의
│ ├── config.py # 설정 로드
│ │
│ ├── pipeline/ # RAG 파이프라인
│ │ ├── pipeline.py # 전체 파이프라인 통합
│ │ ├── query_classifier.py # 쿼리 분류 (카테고리/가비지)
│ │ ├── retriever.py # 하이브리드 검색 호출
│ │ ├── document_validator.py # 문서 관련성 검증
│ │ ├── context_validator.py # 컨텍스트 검증 (답변 가능 여부)
│ │ └── conditional_checker.py # 조건부 응답 필요 여부
│ │
│ ├── retrievers/ # 검색 엔진
│ │ ├── vector_retriever.py # ColBERT 벡터 검색
│ │ ├── hybrid_retriever.py # 하이브리드 검색 통합
│ │ └── models/ # ColBERT 모델 파일
│ │
│ ├── agents/ # LLM 에이전트
│ │ ├── llm_client.py # OpenAI API 클라이언트
│ │ ├── answer_agent.py # 완전 응답 생성
│ │ └── conditional_agent.py # 조건부 응답 생성
│ │
│ └── utils/ # 유틸리티
│ ├── logger.py
│ └── helpers.py
│
├── data/
│ └── vector_db/ # PLAID 벡터 인덱스
│
└── tests/
└── test_pipeline.py
main: 배포용 (안정 버전)develop: 개발 통합 브랜치feature/모듈명: 기능 개발 브랜치
This project is licensed under the MIT License - see the LICENSE file for details.