# CTRL+F AI 챗봇 경쟁력 및 차별점 보고서
> 작성일: 2026-01-07
---
## 📌 Executive Summary
CTRL+F AI는 단순 Q&A 챗봇이 아닌, **엔터프라이즈급 보안·교육 특화 AI 플랫폼**입니다. 일반 범용 챗봇(ChatGPT, MS Copilot 등)이나 SaaS형 기업 챗봇과 달리, 기업 내부 정책 문서 기반의 **근거 있는 답변 생성**과 **개인정보 보호**, **환각 방지** 기능에 집중하여 설계되었습니다.
---
## 🔥 핵심 차별점 요약
| 구분 | 일반 기업 챗봇 | ChatGPT Enterprise | **CTRL+F AI** |
|------|---------------|---------------------|---------------|
| PII 마스킹 | 미지원/후처리 | 기본 수준 | **3단계 ML 기반** (INPUT/OUTPUT/LOG) |
| 환각 방지 | 없음 | 제한적 | **조항 인용 검증 + 통계 환각 차단** |
| 금지질문 필터 | 키워드 블랙리스트 | 없음 | **3단계 매칭** (Exact→Fuzzy→Embedding) |
| 역할별 라우팅 | 단일 경로 | 없음 | **UserRole × Domain 기반 지능형** |
| 내부 문서 RAG | 외부 SaaS 의존 | 파일 업로드 | **자체 Milvus/RAGFlow 연동** |
| 교육 영상 생성 | 없음 | 없음 | **LLM→TTS→렌더링 파이프라인** |
| 소프트 가드레일 | 없음 | 없음 | **근거 부족 시 면책 표시** |
---
## 1️⃣ 3단계 PII 마스킹 파이프라인
### 경쟁사 현황
- **일반 챗봇**: PII 마스킹 미지원, 또는 단순 정규식 기반
- **ChatGPT Enterprise**: 기본 마스킹만 제공, 기업 맞춤 불가
- **국내 SaaS 챗봇**: 대부분 후처리(로그 저장 시) 수준
### CTRL+F AI 차별점
사용자 입력 → [INPUT 마스킹] → RAG/LLM 처리 → [OUTPUT 마스킹] → 사용자 응답 ↓ [LOG 마스킹] → 저장/학습
**핵심 기술:**
- **GLiNER 기반 ML 모델** 연동 (`app/services/pii_service.py`)
- **단계별 차등 마스킹**: INPUT(전송 전), OUTPUT(표시 전), LOG(저장/학습 전)
- **A7 Fail-Closed 정책**: PII 서비스 장애 시 원문 전송 차단 (보안 우선)
```python
# PII 서비스 장애 시 Fail-Closed
class PiiDetectorUnavailableError(Exception):
"""PII detector가 정상 응답 불가 시 발생 → 호출자가 안전한 fallback 반환"""
장점:
사용자 질문 → [Exact Match] → [Fuzzy Match] → [Embedding Match] → 통과/차단
↓ ↓ ↓
정확히 일치 오타/변형 허용 의미론적 유사도
(O(1) 룩업) (RapidFuzz 92%) (FAISS cos_sim 0.85)
핵심 기술 (app/services/forbidden_query_filter.py):
| 단계 | 기술 | 임계값 | 특징 |
|---|---|---|---|
| Step 1 | Exact Match | 100% | 해시 인덱스 O(1) 조회 |
| Step 2 | Fuzzy Match | 92% | RapidFuzz Levenshtein |
| Step 3 | Embedding Match | 0.85 | OpenAI 임베딩 + FAISS |
추가 기능:
<PII>로 치환 후 매칭# Fail-Closed: Manifest 검증 실패 시 모든 쿼리 차단
if self._manifest_failed:
return ForbiddenCheckResult(
is_forbidden=True,
decision="SYSTEM_INTEGRITY_ERROR",
example_response="시스템 정합성 오류가 발생했습니다."
)
장점:
[A] 조항 인용 검증 (Citation Validation)
# LLM 답변에 "제N조/조항" 패턴 검출 시 RAG sources에 있는지 검증
CITATION_PATTERN = re.compile(r"(제\\s*\\d+\\s*조|제\\s*\\d+\\s*항|제\\s*\\d+\\s*호|...)")
if blocked_citations:
return (False, AnswerTemplates.CITATION_HALLUCINATION_BLOCK)
[B] 통계/순위 환각 차단
# "TOP 5", "가장 많이", "45%" 등 통계 주장 + RAG sources 없음 → 차단
STATISTICAL_CLAIM_PATTERNS = [r"TOP\\s*\\d+", r"가장\\s*많이", r"약?\\s*\\d+\\s*%", ...]
if self._contains_statistical_claim(answer) and not sources:
return (False, AnswerTemplates.STATISTICAL_HALLUCINATION_BLOCK)
[C] 소프트 가드레일
RAG sources=0 + 정책/교육 질문 시:
→ "⚠️ 관련 사내 문서를 찾지 못했습니다. 아래는 일반 지식 기반 참고 정보입니다..."
→ 담당부서 안내 자동 추가
장점:
역할(UserRole) 분류:
| 역할 | 접근 권한 | 주요 라우트 |
|---|---|---|
| EMPLOYEE | 정책 조회, 교육, 사고 신고 | RAG_INTERNAL, BACKEND_API |
| ADMIN | 전체 + 통계/현황 | MIXED_BACKEND_RAG |
| INCIDENT_MANAGER | 사고 처리 특화 | MIXED_BACKEND_RAG |
라우트 타입:
class RouteType(str, Enum):
RAG_INTERNAL = "RAG_INTERNAL" # 내부 문서 RAG 검색
LLM_ONLY = "LLM_ONLY" # RAG 없이 LLM만
BACKEND_API = "BACKEND_API" # 백엔드 비즈니스 데이터 조회
MIXED_BACKEND_RAG = "MIXED" # RAG + 백엔드 데이터 조합
의도(Intent) 자동 분류:
"연차 규정 알려줘" → POLICY_QA → RAG_INTERNAL
"내 교육 수료 현황" → EDU_STATUS → BACKEND_API
"보안사고 통계" → INCIDENT_QA + ADMIN → MIXED_BACKEND_RAG
"안녕" → GENERAL_CHAT → LLM_ONLY
장점:
[교육 원문] → [LLM 스크립트 생성] → [TTS 음성 합성] → [영상 렌더링] → [WebSocket 진행률]
↓ ↓ ↓
VideoScriptSchema gTTS/Polly/GCP Shotstack/FFmpeg
핵심 기술 (app/services/video_script_generation_service.py):
class VideoScriptGenerationService:
"""교육 원문 → LLM → VideoScript JSON 변환"""
async def generate_script(self, video_id, source_text, options):
# 1차 시도: 전체 프롬프트
# 실패 시: fix 프롬프트로 자동 복구 (최대 2회)
# Pydantic 스키마 검증 (ChapterSchema, SceneSchema)
장점:
# Phase 12 Fallback 전략
- RAG_INTERNAL: RAG 실패 → LLM-only 진행 (fallback_reason: RAG_FAIL)
- BACKEND_API: Backend 실패 → "현재 정보 조회 불가" 안내
- MIXED_BACKEND_RAG:
- RAG만 실패 → Backend 데이터만으로 답변
- Backend만 실패 → RAG 데이터만으로 답변
- LLM 실패 → 에러 응답 (error_type: UPSTREAM_TIMEOUT)
장점:
COMPLAINT_KEYWORDS = {"답답", "짜증", "미친", "뭐하", "왜몰라", ...}
def check_complaint_fast_path(self, user_query, last_error_reason):
if is_complaint:
return (
"방금 답변이 도움 안 됐죠. 미안해요.\\n"
f"{원인 설명}\\n"
"문서를 인덱싱하면 그 기준으로만 답하게 만들게요."
)
장점:
/ai/faq/generate: 문서 기반 FAQ 자동 생성/ai/quiz/generate: 교육 자료 기반 퀴즈 자동 생성┌─────────────────────────────────────────────────────────────────────┐
│ CTRL+F AI Gateway │
├─────────────────────────────────────────────────────────────────────┤
│ [PII Masking] → [Forbidden Filter] → [Intent Classification] │
│ ↓ ↓ ↓ │
│ GLiNER ML 3-Stage Match UserRole × Domain │
│ INPUT/OUTPUT/LOG Exact→Fuzzy→Emb EMPLOYEE/ADMIN/MANAGER │
├─────────────────────────────────────────────────────────────────────┤
│ [Route Decision] │
│ ├── RAG_INTERNAL → Milvus/RAGFlow → Answer Guard → LLM │
│ ├── BACKEND_API → Spring Backend → LLM │
│ ├── MIXED_BACKEND_RAG → (RAG + Backend) → LLM │
│ └── LLM_ONLY → Direct LLM │
├─────────────────────────────────────────────────────────────────────┤
│ [Answer Guard] │
│ ├── Citation Validation (조항 인용 검증) │
│ ├── Statistical Hallucination Block (통계 환각 차단) │
│ └── Soft Guardrail (근거 부족 시 면책 표시) │
├─────────────────────────────────────────────────────────────────────┤
│ [Video Pipeline] → Script Gen → TTS → Render → WebSocket │
│ [FAQ/Quiz Gen] → Document → LLM → Validation → Response │
└─────────────────────────────────────────────────────────────────────┘
| 영역 | 핵심 가치 |
|---|---|
| 보안 | 3단계 PII 마스킹 + Fail-Closed 정책으로 개인정보 원천 보호 |
| 신뢰성 | 환각 방지 가드레일로 "근거 없는 답변" 차단, 법적 리스크 최소화 |
| 기업 맞춤 | 역할×도메인 라우팅으로 직원/관리자별 차등 응대 |
| 확장성 | 교육 영상 자동 생성, FAQ/퀴즈 자동 생성으로 콘텐츠 생산성 향상 |
| 가용성 | 다층 Fallback 전략으로 부분 장애 시에도 서비스 지속 |
| 규정 준수 | 금지질문 3단계 필터 + 감사 로깅으로 컴플라이언스 대응 |
CTRL+F AI는 "정보를 찾는(CTRL+F)" 것을 넘어, "신뢰할 수 있는 근거 기반 답변"을 제공하는 엔터프라이즈 AI 플랫폼입니다.