diff --git a/app/services/search/grounding_check.py b/app/services/search/grounding_check.py index a03417d..97a2bbf 100644 --- a/app/services/search/grounding_check.py +++ b/app/services/search/grounding_check.py @@ -76,14 +76,16 @@ def check( evidence_text = " ".join(e.span_text for e in evidence) - # ── Strong 1: fabricated number ── - answer_nums = _extract_number_literals(answer) + # ── Strong 1: fabricated number (equality, not substring) ── + # ⚠ citation marker [n] 제거 후 숫자 추출 (안 그러면 [1][2][3] 이 fabricated 로 오탐) + answer_clean = re.sub(r'\[\d+\]', '', answer) + answer_nums = _extract_number_literals(answer_clean) evidence_nums = _extract_number_literals(evidence_text) + evidence_digits = {re.sub(r'[^\d]', '', en) for en in evidence_nums} + evidence_digits.discard('') for num in answer_nums: digits_only = re.sub(r'[^\d]', '', num) - if digits_only and not any( - digits_only in re.sub(r'[^\d]', '', en) for en in evidence_nums - ): + if digits_only and digits_only not in evidence_digits: strong.append(f"fabricated_number:{num}") # ── Strong/Weak 2: query-answer intent alignment ──