두 번 요청한 Q3/Q1(외부 API 라우팅) 내용을 합쳐서,
백엔드/AI Gateway 개발자가 그대로 참고할 수 있게 정리한 버전이야.
enum DocType {
LEGAL_4D, // 4대 법정 교육
JOB_INTERNAL, // 직무/사내 정책
NOTICE,
FAQ,
INCIDENT_REPORT,
OTHER
}
enum Sensitivity {
LOW,
MEDIUM,
HIGH,
UNKNOWN
}
enum PiiRisk {
NONE,
LOW,
MEDIUM,
HIGH,
UNKNOWN
}
enum FeatureType {
CHAT_LLM,
VIDEO_SCRIPT_LLM,
TTS,
VIDEO_RENDER,
OTHER
}
function canUseExternalAPI(docMeta, featureType):
# 필수 메타데이터
docType = docMeta.doc_type # DocType
sensitivity = docMeta.sensitivity # Sensitivity
piiRisk = docMeta.pii_risk # PiiRisk
sourceDomain = docMeta.source_domain # 예: "kisa.or.kr", "moel.go.kr"
isPublic = docMeta.is_public # 공공/대외 공개 여부 (bool)
# 0. featureType별 외부 사용 가능 범위 제한
if featureType not in [VIDEO_SCRIPT_LLM, TTS]:
# 기본 정책: 챗봇/QA/내부 정책 답변용 LLM은 외부 금지
return false
# 1. 기본 보안 룰: 민감도 또는 PII가 애매/높으면 무조건 내부
if sensitivity in [HIGH, UNKNOWN]:
return false
if piiRisk in [MEDIUM, HIGH, UNKNOWN]:
return false
# 2. 도메인/자료 출처 기반 화이트리스트 체크
if not isPublic:
return false
if sourceDomain not in EXTERNAL_WHITELIST_DOMAINS:
return false
# 3. 문서 종류 기반 조건 (4대교육만 허용)
if docType != LEGAL_4D:
return false
# 4. 여기까지 통과한 경우에만 외부 사용 허용
return true
function routeToLLMOrTTS(request, docMeta, featureType):
if canUseExternalAPI(docMeta, featureType):
return callExternalAPI(request, featureType)
else:
return callInternalModel(request, featureType)
canUseExternalAPI 안의 조건만 수정하면 됨.