인사이트

질문하면 화면이 조립되는 홈페이지 – Contbot이 답을 만드는 방식

Contbot은 방문자의 질문에 긴 문장 대신 일정 카드, 마감 목록, 체크리스트, 지도 같은 화면 블록을 조합해 답하는 질문형 홈페이지입니다. 가장 큰 특징은 날짜·금액 같은 숫자를 AI가 쓰지 않는다는 점입니다. AI는 어떤 블록을 어떤 순서로 보여 줄지 고르고, 숫자는 기관 데이터에서 그대로 꺼내 넣습니다.

대학 홈페이지에 "장학금 신청 언제까지야?"라고 물으면 보통 공지 목록이나 긴 답변이 나옵니다. Contbot은 마감일이 들어간 목록 블록과 신청 절차 체크리스트, 관련 서식 내려받기 블록을 한 화면에 묶어 보여 줍니다.

Contbot 답변 흐름 – 질문, 의도·후보, AI의 JSON 출력, 검증·조립, 그리고 숫자 규칙·근거 부족·AI 장애 시 처리
답변이 화면이 되기까지

1. 의도는 규칙으로 고릅니다

질문이 들어오면 개인정보(주민등록번호, 카드번호, 이메일, 전화번호, 학번, 계좌번호, 상세 주소, 이름)를 먼저 가립니다. 공개된 교직원 연락처는 예외 목록으로 남깁니다. 원래 질문은 저장하지 않습니다. 그다음 규칙으로 질문의 의도를 아래 14가지 중 하나로 정합니다.

태블릿 달력 화면을 들고 있는 손
"다음 달 행사 언제예요?" 같은 질문은 일정 의도로 분류되고, 날짜는 문장으로 지어내지 않고 데이터에서 그대로 가져옵니다. · 사진 StockSnap
의도예의도예
schedule일정calendar달력
procedure신청 절차eligibility자격 요건
document서류·서식regulation규정
tuition등록금·비용compare비교
place위치hours운영 시간
academic학사contact연락처
subscribe알림 신청not_found답할 수 없음

2. 후보 찾기: 한국어에 맞춘 검색

의도가 정해지면 관련 레코드 후보 12개를 찾습니다. 검색은 의미 검색과 키워드 검색을 함께 씁니다.

책이 종류별로 꽂힌 서가
의미 검색과 키워드 검색 결과를 합쳐, 질문에 맞는 레코드 후보 12개를 고릅니다. · 사진 StockSnap
  • 임베딩: BAAI/bge-m3(1,024차원)를 서버 CPU에서 ONNX Runtime으로 직접 실행 — 임베딩 때문에 외부로 나가는 데이터는 없음

  • 키워드: PostgreSQL의 pg_trgm과 노리(Nori) 형태소 분석. 기관 고유 명칭은 사용자 사전에 자동으로 추가

  • 합치기: 의미 20개 + 키워드 20개를 순위 합산(RRF, k=60). 유사도 0.55 미만은 버림

  • 가중치: 의도에 맞는 레코드 종류는 1.5배, 이미 지난 행사는 0.6배, 기간이 끝난 레코드는 제외

근거가 약하면 여기서 멈춥니다. 기준을 넘는 후보가 없거나, 질문 속 명사가 기관 데이터 어디에도 없으면 not_found로 답합니다. 없는 학과나 행사를 물었을 때 비슷한 다른 내용을 끌어와 답하는 일을 막기 위해서입니다.

3. AI는 JSON만 씁니다

AI에게는 의도별로 허용된 블록 목록과 후보 레코드만 줍니다. AI는 temperature 0, 정해진 JSON 형식으로만 답하고, 숫자가 필요한 자리에는 값 대신 토큰을 씁니다. 구조를 줄여 보이면 이런 모양입니다.

{
  "blocks": [
    { "type": "deadline_list", "items": ["{{ref.end_date|date}}"] },
    { "type": "checklist" },
    { "type": "form_downloads" }
  ],
  "summary": "신청 마감은 {{ref.end_date|date}}입니다."
}

화면을 그릴 때 {{ref.field|fmt}} 자리에 레코드의 실제 값이 들어갑니다. AI가 날짜를 잘못 기억하거나 지어내도 화면에는 데이터의 값만 나옵니다.

4. 검증 규칙 15개

AI의 출력은 바로 화면에 나가지 않고 R1부터 R15까지 규칙으로 검사합니다. 그중 몇 가지는 다음과 같습니다.

규칙내용
R11토큰이 아닌 숫자가 들어간 요약 문장은 지움
R6기간이 끝난 내용은 뺌
R12본문 블록은 4개까지만

블록은 일정 카드(schedule_card), 마감 목록(deadline_list), 월간 달력(month_calendar), 규정 조항(regulation_clause), 비교표(compare_table), 등록금표(fee_table), 장학금 목록(scholarship_list), 체크리스트(checklist), 자격 확인(eligibility_tool), 서식 내려받기(form_downloads), 캠퍼스 지도(campus_map) 등 42종이 있습니다. 화면 뼈대용 블록 8종은 따로 있습니다.

AI 호출이 실패하면 같은 레코드로 규칙 기반 생성기가 답을 만듭니다. 이때 답변 상태를 degraded로 남겨 운영자가 확인할 수 있게 합니다.

5. 답 하나를 여러 곳에서

책상 위에 놓인 휴대폰, 태블릿, 화면 스케치
같은 답변이 홈페이지 화면, 공유 주소, 마크다운, 다른 사이트 임베드로 쓰입니다. · 사진 StockSnap

한 번 만든 답변은 같은 JSON으로 여러 형태로 보여 줍니다.

  • 홈페이지 화면: 검색형과 대화형 두 가지

  • 공유 주소: /a/답변ID — 링크로 같은 답을 다시 열기

  • 마크다운: /a/답변ID.md — AI 검색이나 다른 시스템이 읽기 좋은 텍스트

  • 임베드: 다른 사이트에 질문창이나 답변을 넣기

이어지는 질문은 이전 답변의 레코드를 다시 써서 맥락을 잇습니다. 대화 기록은 서버가 아니라 방문자 브라우저에 저장됩니다.

답변에는 만족도 의견을 남길 수 있고, 답으로 해결되지 않으면 바로 문의를 남기는 폼도 있습니다.

6. 데이터 가져오기와 운영

구분내용
가져오는 곳기관 DB(읽기 전용, SELECT만), CMS 게시판, RSS, 공개 홈페이지(robots.txt를 지켜 수집)
첨부파일HWP 5.x, HWPX, PDF(텍스트가 있는 경우), DOCX, XLSX, PPTX, TXT — 20MB, 200쪽까지
나누기문단 → 문장 → 글자 순으로 400토큰 단위, 조각마다 머리말을 붙임
수집 주기소스별 테스트·실행·이력, 예약 실행(cron)
콘텐츠레코드 31종, 버전·검토 상태·변경 기록. 저장하면 자동으로 다시 색인
학습FAQ, 직접 쓴 답변, 동의어, 첫 화면 질문 카드
점검질문 기록, 미답변·의견 검토, 질문별 처리 과정 추적, AI 사용량과 비용 추정
권한최고 관리자, 부서 관리자, 편집자, 열람자. 관리자 화면은 허용한 IP에서만 열림

7. 보안

  • 요청 제한: 질문은 IP당 분당 20회, 문의 폼은 시간당 5회

  • 세션 식별값은 날마다 바뀌는 값과 섞어 SHA-256으로 바꿔 저장

  • 개인정보 항목은 AES-256-GCM 암호화, 문의자의 이름·연락처는 1년 뒤 삭제

  • 관리자 비밀번호는 BCrypt, 로그인 실패 잠금, 동시 접속 세션 3개 제한

  • 콘텐츠 보안 정책(CSP)과 frame-ancestors로 외부 삽입 범위 제한

8. 설치

전자정부 표준프레임워크 Boot 5.0과 Spring Boot 3.5, JDK 17, MyBatis, Flyway로 만들었습니다. 실행형 WAR 하나를 systemd 서비스로 돌리고, 데이터베이스는 PostgreSQL 16과 pgvector를 씁니다. 설치 안내서는 Ubuntu 22.04 기준이며, 설치 묶음(tar.gz)을 따로 만들 수 있습니다. AI는 OpenAI 호환 API라면 연결할 수 있고, AI를 연결하지 않으면 규칙 기반 생성기만으로도 답합니다.

자주 묻는 질문

챗봇과 무엇이 다른가요?

챗봇은 문장으로 답합니다. Contbot은 기관 데이터를 블록으로 조합한 화면으로 답합니다. 일정·마감·금액처럼 정확해야 하는 정보는 데이터에서 그대로 가져오고, 문장 설명은 보조로만 씁니다. 문서를 근거로 문장 답변을 하는 챗봇이 필요하다면 Nexis Chat이 더 맞습니다.

데이터를 새로 입력해야 하나요?

기존 DB, CMS 게시판, 홈페이지에서 가져올 수 있습니다. 다만 일정·금액처럼 블록에 들어갈 값은 레코드 형식으로 정리해야 정확하게 보여 줄 수 있어서, 도입할 때 어떤 정보를 레코드로 만들지 먼저 정합니다.

관련 글: Contbot 솔루션 소개 · Lumiscan 진단 방식 · 도입 문의

목록으로