한국어 PII 인식기 경계 추가
This commit is contained in:
parent
2bb052f624
commit
84599bbaa2
3 changed files with 156 additions and 9 deletions
|
|
@ -139,7 +139,9 @@ class OrchestratorMaskingGateTest(unittest.IsolatedAsyncioTestCase):
|
|||
return_value=(None, None),
|
||||
)
|
||||
self.presidio_patch.start()
|
||||
guardrail.set_ko_pii_recognizer(None)
|
||||
self.addCleanup(self.presidio_patch.stop)
|
||||
self.addCleanup(guardrail.set_ko_pii_recognizer, None)
|
||||
|
||||
def test_prepare_turn_keeps_raw_text_but_builds_masked_engine_messages(self) -> None:
|
||||
ctx = _prepare_context()
|
||||
|
|
@ -215,6 +217,39 @@ class OrchestratorMaskingGateTest(unittest.IsolatedAsyncioTestCase):
|
|||
self.assertIn(raw, ctx.learner_text_raw)
|
||||
self.assertNotIn(raw, ctx.learner_text_masked)
|
||||
|
||||
def test_prepare_turn_applies_optional_ko_recognizer_before_regex_fallback(self) -> None:
|
||||
class FakeKoRecognizer:
|
||||
def analyze(self, text: str):
|
||||
spans = []
|
||||
for entity_type, value in (
|
||||
("NAME", "보라별"),
|
||||
("ORG", "미래학교상담연구랩"),
|
||||
):
|
||||
start = text.index(value)
|
||||
spans.append(guardrail.PiiEntitySpan(entity_type, start, start + len(value)))
|
||||
return spans
|
||||
|
||||
guardrail.set_ko_pii_recognizer(FakeKoRecognizer())
|
||||
raw_text = "별명은 보라별이고 기관은 미래학교상담연구랩입니다. 전화는 010-1234-5678입니다."
|
||||
|
||||
ctx = orchestrator.prepare_turn(
|
||||
session_id="masking-session",
|
||||
case_id="masking-case",
|
||||
card=persona.P1,
|
||||
state=_initial_state(),
|
||||
learner_text=raw_text,
|
||||
)
|
||||
|
||||
blob = _message_blob(ctx.messages)
|
||||
self.assertIn("보라별", ctx.learner_text_raw)
|
||||
self.assertIn("미래학교상담연구랩", ctx.learner_text_raw)
|
||||
for raw in ("보라별", "미래학교상담연구랩", "010-1234-5678"):
|
||||
self.assertNotIn(raw, ctx.learner_text_masked)
|
||||
self.assertNotIn(raw, blob)
|
||||
for masked in ("[NAME]", "[ORG]", "[PHONE]"):
|
||||
self.assertIn(masked, ctx.learner_text_masked)
|
||||
self.assertIn(masked, blob)
|
||||
|
||||
def test_prepare_turn_threads_theory_mode_into_engine_messages(self) -> None:
|
||||
ctx = orchestrator.prepare_turn(
|
||||
session_id="theory-session",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue