작업내용
n8n 워크플로우 작성
- n8n 30분 주기 스케줄 트리거 구성
- 학교 공지 크롤링 워크플로우 작성 (
school.notice_url 기준)
- 학과 공지 크롤링 워크플로우 작성 (
department.notice_url 기준)
source_url 기준 중복 공지 필터링 처리
- 크롤링된 공지 텍스트 → 임베딩 서버 전송 → 벡터 생성
- 공지 원문 + 임베딩 벡터 →
notices 테이블 저장
is_active = FALSE 학교·학과 크롤링 스킵 처리
notice_url = NULL 학과 크롤링 스킵 처리
RAG 파이프라인 구현
- 질문 의도 자동 분류 (
classify_intent) — 4-way 라우팅
count: DB 직접 집계 (공지 개수 질문)
recent: 최신 5건 조회
list: 최신 20건 조회
search: pgvector 코사인 유사도 검색 (top-5)
- 매 요청마다 공지 현황 컨텍스트 주입 (학교/학과/전체 개수)
- BGE-M3 임베딩 서버 연동 (
get_embedding)
- pgvector 코사인 유사도 검색 구현 (
search_similar_notices)
- 임베딩 벡터 float 타입 검증 +
str(float(v)) 강제 캐스팅 (인젝션 방어)
- 대화 히스토리 최근 20개 포함 (10턴 유지)
- SYSTEM_PROMPT 12개 규칙 하드코딩 (
config.py)
- LLM 서버 연동 (
call_lm_studio) — OpenAI 호환 API
- 채팅 세션 자동 생성 (첫 질문 앞 20자 → 제목)