한신대 피드백 개선팩 반영
This commit is contained in:
parent
5a9c110c11
commit
6b6241f468
25 changed files with 1247 additions and 94 deletions
73
apps/api/app/test_client_reply_quality.py
Normal file
73
apps/api/app/test_client_reply_quality.py
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
"""Strict client reply quality gate regressions."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import unittest
|
||||
|
||||
from .services import guardrail
|
||||
|
||||
|
||||
class ClientReplyQualityGateTest(unittest.TestCase):
|
||||
def test_blocks_role_meta_speech_variants(self) -> None:
|
||||
samples = [
|
||||
"내담자 역할로 응답하겠습니다. 엄마가 가보라고 해서요.",
|
||||
"AI로서 답변드리면 저는 우울한 학생입니다.",
|
||||
"상담자 입장에서 보면 제 핵심신념은 무가치감입니다.",
|
||||
"제 핵심신념은 저는 쓸모없다는 것입니다.",
|
||||
]
|
||||
|
||||
for sample in samples:
|
||||
with self.subTest(sample=sample):
|
||||
result = guardrail.sanitize_client_reply(sample, ideation_stage=1, turn_seq=2)
|
||||
self.assertTrue(result.needs_regeneration)
|
||||
self.assertIn("role_meta", result.reasons)
|
||||
|
||||
def test_blocks_repeated_greeting_after_opening_turn_only_when_greeting_starts_reply(self) -> None:
|
||||
blocked = guardrail.sanitize_client_reply(
|
||||
"안녕하세요. 처음 뵙겠습니다. 저는 서연이에요.",
|
||||
ideation_stage=1,
|
||||
turn_seq=3,
|
||||
)
|
||||
first_turn = guardrail.sanitize_client_reply(
|
||||
"안녕하세요. 엄마가 가보라고 해서 왔어요.",
|
||||
ideation_stage=1,
|
||||
turn_seq=1,
|
||||
)
|
||||
quoted = guardrail.sanitize_client_reply(
|
||||
"방금 선생님이 안녕하세요라고 말해서 더 어색했어요.",
|
||||
ideation_stage=1,
|
||||
turn_seq=3,
|
||||
)
|
||||
|
||||
self.assertTrue(blocked.needs_regeneration)
|
||||
self.assertIn("repeat_greeting_after_opening", blocked.reasons)
|
||||
self.assertFalse(first_turn.needs_regeneration)
|
||||
self.assertFalse(quoted.needs_regeneration)
|
||||
|
||||
def test_blocks_near_duplicate_previous_client_reply_but_allows_short_overlap(self) -> None:
|
||||
previous = "몰라요. 엄마가 그냥 가보라고 해서 왔어요."
|
||||
duplicate = guardrail.sanitize_client_reply(
|
||||
"몰라요. 엄마가 그냥 가보라고 해서 왔어요.",
|
||||
ideation_stage=1,
|
||||
previous_client_reply=previous,
|
||||
)
|
||||
near_duplicate = guardrail.sanitize_client_reply(
|
||||
"엄마가 그냥 가보라고 해서 왔어요. 몰라요.",
|
||||
ideation_stage=1,
|
||||
previous_client_reply=previous,
|
||||
)
|
||||
allowed = guardrail.sanitize_client_reply(
|
||||
"엄마가 가보라고 한 건 맞는데, 지금은 좀 짜증나요.",
|
||||
ideation_stage=1,
|
||||
previous_client_reply=previous,
|
||||
)
|
||||
|
||||
self.assertTrue(duplicate.needs_regeneration)
|
||||
self.assertIn("duplicate_client_reply", duplicate.reasons)
|
||||
self.assertTrue(near_duplicate.needs_regeneration)
|
||||
self.assertIn("duplicate_client_reply", near_duplicate.reasons)
|
||||
self.assertFalse(allowed.needs_regeneration)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue