From 9ab4da34e5a2fff0b937cb63a4f5bbf9eee2f284 Mon Sep 17 00:00:00 2001 From: kim Date: Tue, 11 Aug 2026 11:24:15 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20"A=EB=B3=B4=EB=8B=A4=20=EB=B9=A0?= =?UTF-8?q?=EB=A5=B8=EA=B0=80"=20=EC=BA=90=EC=A3=BC=EC=96=BC=20=EB=B9=84?= =?UTF-8?q?=EA=B5=90=20=ED=91=9C=ED=98=84=EC=9D=84=20isFactualInfoRequest?= =?UTF-8?q?=EA=B0=80=20=EB=AA=BB=20=EC=9E=A1=EB=8D=98=20=EB=AC=B8=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 실제 사고(2026-08-11): "5060 보다 얼마나 빠르지 4080?"에 도구 호출 0건, 모델이 "RTX 5060은 아직 출시되지 않은 차세대 모델"이라고 완전히 지어냈다 — 실제로는 이미 출시돼 지서버가 쓰고 있는 카드 (RTX 5060 Ti)다. "성능"/"비교" 등 기존 키워드를 하나도 안 써서 이 파일 자체 주석이 경고하던 "casual paraphrases slip through unmatched"가 실제로 뚫렸다. "A보다 (얼마나) 빠른/느린/좋은/나은" 형태의 캐주얼 비교 표현을 형용사 목록으로 추가. 구현 중 발견: 빠르다/느리다는 러-불규칙 활용이라 관형형이 "빠르ㄴ"이 아니라 "빠른"으로 어간 자체가 바뀐다(느리다→느린도 동일) — 어간만 넣으면 이 활용형을 놓쳐서 테스트가 그대로 잡아냈다("이게 저것보다 느린가?"가 최초 버전에서 빠짐), 두 형태 다 등록해서 고쳤다. Co-Authored-By: Claude Opus 5 --- src/gateway/guards/prompt-gates.ts | 11 ++++++++++- tests/prompt-gates.test.ts | 10 ++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/gateway/guards/prompt-gates.ts b/src/gateway/guards/prompt-gates.ts index aa68808..7da3c99 100644 --- a/src/gateway/guards/prompt-gates.ts +++ b/src/gateway/guards/prompt-gates.ts @@ -152,7 +152,16 @@ export function isFactualInfoRequest(message: string): boolean { if (isExecutionLikeRequest(m) || isGreetingLikeMessage(m)) return false; if (isExemptFromVerification(m)) return false; return /\b(vs\.?|versus)\b/i.test(m) - || /(비교|차이점?|스펙|사양|성능|가격|버전|몇\s*(세대|개|년|만원)|추천해|어떤\s*(게|것|모델|제품|카드)|뭐가\s*있|무엇이\s*있|종류가)/.test(m); + || /(비교|차이점?|스펙|사양|성능|가격|버전|몇\s*(세대|개|년|만원)|추천해|어떤\s*(게|것|모델|제품|카드)|뭐가\s*있|무엇이\s*있|종류가)/.test(m) + // 2026-08-11 실제 사고: "5060 보다 얼마나 빠르지 4080?"에 도구 호출 0건, "RTX 5060은 아직 + // 출시되지 않은 차세대 모델"이라고 완전히 지어냈다(실제로는 이미 출시돼 지서버가 쓰고 있는 + // 카드). "성능"/"비교" 같은 위 키워드를 하나도 안 썼고 "빠르지"라는 캐주얼한 비교 표현만 + // 썼다 — 위 주석의 "casual paraphrases slip through unmatched" 경고가 실제로 뚫린 사례. + // "A보다 (얼마나) 빠른/느린/좋은/나은/강한" 형태의 비교 질문을 형용사 목록으로 넓게 잡는다. + // 빠르다/느리다는 러-불규칙 활용이라 관형형이 "빠르ㄴ"이 아니라 "빠른"으로 어간 자체가 + // 바뀐다("느리다"→"느린"도 동일) — 어간 "빠르"/"느리"만 넣으면 이 활용형을 못 잡는다 + // (테스트로 실제로 잡아냄: "이게 저것보다 느린가?"가 최초 버전에서 빠졌었다). + || /보다\s*(얼마나\s*)?(빠르|빠른|느리|느린|좋|나은|낫|강|약)/.test(m); } // Output-side counterpart to isFactualInfoRequest()/isLiveDataRequest(): those only catch diff --git a/tests/prompt-gates.test.ts b/tests/prompt-gates.test.ts index 53c8d62..1124d50 100644 --- a/tests/prompt-gates.test.ts +++ b/tests/prompt-gates.test.ts @@ -161,6 +161,16 @@ describe('isFactualInfoRequest — 검증이 필요한 질문 분류', () => { assert.equal(isFactualInfoRequest('hello'), false); assert.equal(isFactualInfoRequest(''), false); }); + + // [2026-08-11] 실제 사고: "5060 보다 얼마나 빠르지 4080?"에 도구 호출 0건, 모델이 "RTX 5060은 + // 아직 출시되지 않은 차세대 모델"이라고 완전히 지어냈다 — 실제로는 이미 출시돼 지서버가 쓰고 + // 있는 카드(RTX 5060 Ti). "성능"/"비교" 같은 기존 키워드를 하나도 안 써서 게이트를 그냥 + // 통과했다. "A보다 (얼마나) 빠른/느린/좋은" 캐주얼 비교 표현을 형용사로 넓게 잡는다. + test('[2026-08-11] "A보다 빠른가" 캐주얼 비교 표현도 잡는다', () => { + assert.equal(isFactualInfoRequest('5060 보다 얼마나 빠르지 4080?'), true); + assert.equal(isFactualInfoRequest('이게 저것보다 느린가?'), true); + assert.equal(isFactualInfoRequest('아이폰이 갤럭시보다 나은가'), true); + }); }); describe('isNewsRequest / isLiveDataRequest', () => {