feat(agent): tune retrieval for decision support
This commit is contained in:
@@ -16,6 +16,7 @@ from agent.generate import (
|
||||
strip_think,
|
||||
trim_results,
|
||||
validate_answer,
|
||||
validate_decision_support_answer,
|
||||
)
|
||||
|
||||
|
||||
@@ -42,6 +43,53 @@ def test_system_prompt_requires_nonofficial_source_disclosure():
|
||||
assert "nicht amtlich" in SYSTEM_PROMPT
|
||||
|
||||
|
||||
def test_system_prompt_requires_contextual_decision_support():
|
||||
assert "keine Option pauschal zum Sieger" in SYSTEM_PROMPT
|
||||
assert "frei verfügbare Barzahlung" in SYSTEM_PROMPT
|
||||
assert "systematisch in einen Katalog abgabenfreier Bezüge" in SYSTEM_PROMPT
|
||||
assert "[wk-akt-04] und [lb-sva-03]" in SYSTEM_PROMPT
|
||||
assert "Bezeichne keine der widersprechenden Quellen als" in SYSTEM_PROMPT
|
||||
assert "genau EINE gezielte" in SYSTEM_PROMPT
|
||||
assert "Regelnummern niemals" in SYSTEM_PROMPT
|
||||
assert "spekuliere nicht mit Trainingswissen" in SYSTEM_PROMPT
|
||||
|
||||
|
||||
class TestDecisionSupportValidation:
|
||||
question = (
|
||||
"Ich will meinem Mitarbeiter 500 Euro zusätzlich auszahlen. "
|
||||
"Was ist die günstigste Lösung?"
|
||||
)
|
||||
allowed = ["wk-akt-04", "lb-sva-03"]
|
||||
|
||||
def test_requires_conflict_when_both_sources_are_in_context(self):
|
||||
violations = validate_decision_support_answer(
|
||||
self.question, "Nur lohnsteuerfrei [wk-akt-04].", self.allowed
|
||||
)
|
||||
assert violations and "Quellenkonflikt" in violations[0]
|
||||
|
||||
def test_accepts_explicit_conflict(self):
|
||||
answer = (
|
||||
"⚠ [lb-sva-03] ordnet die Prämie in den Katalog beitragsfreier "
|
||||
"Bezüge ein; [wk-akt-04] nennt sie SV- und BV-pflichtig."
|
||||
)
|
||||
assert validate_decision_support_answer(self.question, answer, self.allowed) == []
|
||||
|
||||
def test_rejects_reversed_source_roles_and_prompt_leakage(self):
|
||||
answer = (
|
||||
"⚠ [wk-akt-04] und [lb-sva-03] ordnen die Prämie als beitragsfrei "
|
||||
"ein; gemäß Regel 11 ist die aktuellere News-Quelle maßgeblich."
|
||||
)
|
||||
violations = validate_decision_support_answer(self.question, answer, self.allowed)
|
||||
assert any("Rollen" in item for item in violations)
|
||||
assert any("internen Regeln" in item for item in violations)
|
||||
assert any("priorisiere" in item for item in violations)
|
||||
|
||||
def test_does_not_require_missing_source(self):
|
||||
assert validate_decision_support_answer(
|
||||
self.question, "Lohnsteuerfrei [wk-akt-04].", ["wk-akt-04"]
|
||||
) == []
|
||||
|
||||
|
||||
class TestRefusalDetection:
|
||||
def test_refusal_phrase(self):
|
||||
assert looks_like_refusal("Dazu enthält die Wissensbasis keine Aussage.")
|
||||
|
||||
Reference in New Issue
Block a user