10.4.2 평가 기준(Evaluation Criteria) 필드 정의: ‘포함해야 할 키워드’, ‘금지된 단어’, ‘논리 흐름’
단순히 메타데이터의 expected_output 필드에 *“이 질문에 대한 정답은 이것입니다”*라고 단일 문자열(String) 하나를 하드코딩(Hard-coding)하여 선언하는 것은, LLM의 본질을 전혀 이해하지 못한 극도로 취약하고 오만한 아키텍처 설계다.
거대 언어 모델(LLM)은 근본적으로 확률적(Probabilistic) 텍스트 생성기이기 때문에, 의미론적으로 완벽히 동일한 정답을 전달하더라도 매 인퍼런스(Inference)마다 토큰의 병합과 배열을 무작위로 뒤바꾼다. 이러한 비결정적 출력을 회귀 테스트 파이프라인에서 견고하고 결정론적으로 채점(Scoring)해 내기 위해서는, 골든 데이터셋(Golden Dataset) 메타데이터 내부에 단일 문장이 아닌 **‘다차원적 평가 기준(Evaluation Criteria)’**을 거대한 배열(Array) 형태로 해체하여 명시해야만 한다.
이 평가 기준 객체(Evaluation Object)는 오라클이 코드 레벨에서 스캐닝하고 파싱해야 할 엄격한 기계적 체크리스트(Checklist) 역할을 수행하며, 실무 MLOps 환경에서는 주로 **긍정적 제약(Positive Constraints), 부정적 제약(Negative Constraints), 그리고 구조적/순차적 로직(Sequential Logic)**을 검증하는 세 가지 강력한 차원(Dimension)으로 구성된다.
1. 긍정적 제약 (Positive Constraints): 반드시 포함해야 할 핵심 키워드
AI 모델의 응답 길이가 길든 짧든, 문체가 문학적이든 건조하든 전혀 상관없이, 비즈니스 요건상 **“이 내용과 숫자만큼은 반드시 유저(User)에게 전달되어야 한다”**는 치명적인 필수 요소들을 쪼개어 배열로 정의한다.
"evaluation_criteria": {
"must_include": [
["원금 보장", "원금 100% 보장", "손실 없음"],
["연 3.5%", "3.5퍼센트", "3.5%"],
"중도 해지 수수료"
]
}
이 구조에서 안쪽에 중첩된 배열(["원금 보장", "원금 100% 보장", "손실 없음"])은 형태가 달라도 같은 의미를 지니는 유의어 집합체로서 논리적 OR(논리합) 연산을 의미한다. 반면 이들을 감싸고 있는 바깥쪽의 최상위 배열은 모든 조건이 충족되어야 함을 뜻하는 논리적 AND(논리곱) 결합을 의미하도록 룰 엔진(Rule Engine)을 설계한다. 결정론적 오라클은 이 JSON 기준을 런타임에 빠르고 거대한 정규표현식(Regex) 트리로 자동 컴파일(Compile)하여 모델의 출력 텍스트를 무자비하게 스캔하고 대조한다.
2. 부정적 제약 (Negative Constraints): 절대 써서는 안 되는 금지어(Banned Words)
이 필드는 기업의 컴플라이언스(Compliance)와 법적 소송 비즈니스 리스크를 최전선에서 통제하는 가장 강력하고 폐쇄적인 필드다.
현재는 폐기된 이전 규정의 잔재, 유사한 보험 상품명, 타사 경쟁 브랜드명 등, AI가 할루시네이션(Hallucination)을 일으킬 때 주로 뻔뻔하게 뱉어내는 치명적인 오답과 환각어들을 ‘금지어(Forbidden Words)’ 리스트로 촘촘하게 박아둔다.
"evaluation_criteria": {
"must_not_include": [
"확정 수익",
"투자 손실 없음 보장",
"A사(경쟁사) 상품",
"절대적",
"무조건"
]
}
시스템 설계 시, 단언컨대 타협은 없어야 한다. 결정론적 오라클은 텍스트 스캔 중 must_not_include 필드에 명시된 문자열이 단 한 글자라도 파싱되어 검출되면, 앞서 must_include의 모든 긍정 조건을 100% 완벽하게 만족했더라도 즉시 해당 테스트 케이스를 가차 없이 실패 처리(Hard Fail)하고 False를 반환하도록 파이프라인을 설계해야 한다. 금지어의 노출은 단순한 정확도 저하가 아니라 서비스의 존립을 위협하는 보안 사고의 영역이기 때문이다.
3. 구조적 추론 (Sequential Logic): 논리 흐름의 순서와 인과성 제약
단순한 CS 챗봇 수준을 넘어 법률 문서 검토나 복잡한 기술 지원 트러블슈팅(Troubleshooting) 등 답변의 ’순서(Order)’가 생명인 전문 도메인에서는, 단순히 특정 단어의 파편적인 존재 유무를 확인하는 백오브워즈(Bag-of-Words) 방식의 평가는 무의미하다.
대신, 특정 정보들이 올바른 인과관계(Causality)나 프로세스 순서대로 배치되었는지를 엄격하게 평가해야 한다. 이는 주로 더 상위 레벨의 LLM-as-a-Judge 오라클이 JSON 포맷으로 판별하는 채점 루브릭(Scoring Rubric)으로 메타데이터화된다.
"evaluation_criteria": {
"logical_flow": [
{"step": 1, "check": "고객의 현재 불편 상황에 대한 명확한 공감 및 사과 표현"},
{"step": 2, "check": "원인 규명: 글로벌 네트워크 DNS 라우팅 지연 문제임을 원인으로 명시"},
{"step": 3, "check": "해결책 안내: 공유기 및 라우터 재부팅에 대한 Step-by-Step 가이드라인 제시"},
{"step": 4, "check": "후속 조치: 미해결 시 유선 엔지니어 핫라인 전화번호 안내"}
]
}
graph TD
A[모델 응답 텍스트 Payload] --> B{논리 1단계 검증: 사과 표현}
B -- Pass --> C{논리 2단계 검증: DNS 원인 규명}
B -- Fail --> F[오라클: Hard Fail & 재시험]
C -- Pass --> D{논리 3단계 검증: 재부팅 가이드}
C -- Fail --> F
D -- Pass --> E{논리 4단계 검증: 핫라인 안내}
D -- Fail --> F
E -- Pass --> G[오라클: 완전 검증 성공 Success]
E -- Fail --> F
이러한 삼원화된(Tripartite) 평가 기준 필드의 정교한 설계는, 오라클 계층에게 추상적으로 *“적당히 알맞은 정답을 유사도로 찾아라”*라고 무책임하게 지시하는 대신, *“이 세 가지 엄격한 잣대(필수 통과 키워드 망, 지뢰 금지어 밭, 논리적 전개 순서)를 하나라도 이탈하는 텍스트인지 완벽하게 검열(Censorship)하라”*고 가장 구체적이고 치명적인 권한을 기계에게 위임하는 위대한 소프트웨어 엔지니어링 과정이다.
이를 통해 CI/CD 파이프라인 상의 회귀 테스트(Regression Test)는 극도로 집요한 인간 QA 엔지니어의 통찰력과, C++ 컴파일러와 같은 기계의 폭력적인 속도를 동시에 달성하게 된다.