mirror of
http://100.103.83.12:3003/fegger/pv-agent.git
synced 2026-09-17 15:46:23 +00:00
feat(agent): add odoo review mode with plausibility verdict
This commit is contained in:
+54
-2
@@ -22,7 +22,7 @@ Aufbewahrung. Ein allgemeiner API-Key allein reicht dafür nicht aus.
|
||||
| Methode | Pfad | Auth | Zweck |
|
||||
|---|---|---|---|
|
||||
| `GET` | `/` | Eingabe im UI | Test-Frontend |
|
||||
| `POST` | `/v1/ask` | Service-Key | belegte Wissensantwort |
|
||||
| `POST` | `/v1/ask` | Service-Key | Wissensantwort (`mode=knowledge`) oder Plausibilitätsprüfung (`mode=review`) |
|
||||
| `POST` | `/v1/ratings` | Service-Key | Antwort bewerten |
|
||||
| `POST` | `/v1/comments` | Service-Key | Kommentar zu einer Antwort protokollieren |
|
||||
| `GET` | `/v1/health` | öffentlich | Readiness ohne interne Hostdetails |
|
||||
@@ -90,6 +90,54 @@ Request:
|
||||
}
|
||||
```
|
||||
|
||||
### `mode=review` — Odoo-Plausibilitätsprüfung (M4.2)
|
||||
|
||||
Mit `PV_REVIEW_MODE=true` nimmt der Dienst einen schema-gebundenen Odoo-
|
||||
Kontext an und prüft das von Odoo vorgegebene Ergebnis gegen die Wissensbasis:
|
||||
|
||||
```json
|
||||
{
|
||||
"question": "Prüfe die geplante Auszahlung gegen die Regeln.",
|
||||
"mode": "review",
|
||||
"context": {
|
||||
"facts": [
|
||||
{"key": "bruttolohn_monat", "value": "3000 EUR"},
|
||||
{"key": "freibetrag_620_verbraucht", "value": "340 EUR", "note": "Jahr 2026"}
|
||||
],
|
||||
"computation": {
|
||||
"label": "AG-Kosten Barauszahlung",
|
||||
"result": "612,31 EUR",
|
||||
"basis": "SVDG + DB/DZ auf 500 EUR",
|
||||
"components": [{"key": "svdg_gesamt", "value": "549,50 EUR"}]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Grenzen: `facts` max. 40 (key-Muster `[a-z0-9_.-]`, value ≤ 200 Zeichen),
|
||||
`components` max. 40; keine freien Objekte. Ohne `PV_REVIEW_MODE` liefert
|
||||
`mode=review` HTTP 422; `context` außerhalb des Review-Modus ebenfalls.
|
||||
|
||||
Der Antworttext endet mit einem Abschnitt `Plausibilitätsprüfung:`; daraus
|
||||
extrahiert der Dienst strukturiert:
|
||||
|
||||
```json
|
||||
"plausibility": {
|
||||
"verdict": "implausible",
|
||||
"checks": [
|
||||
{"status": "warn", "aspect": "Freibetrag 620",
|
||||
"detail": "erwartet 280 EUR steuerfrei [lb-son-04] — erhalten 500 EUR",
|
||||
"source_ids": ["lb-son-04"]}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Semantik: `plausible` (Checks ohne Warn), `implausible` (mind. ein ⚠-Check),
|
||||
`not_checkable` (kein gültiger Check, z. B. fehlender Kontext). Odoo bleibt
|
||||
autoritativ für Zahlen — der Agent korrigiert nichts stillschweigend. Das
|
||||
`grounding.data_scope` ist im Review-Modus
|
||||
`knowledge_base_plus_review_context`.
|
||||
|
||||
Unbekannte Felder werden mit HTTP `422` abgewiesen. Das ist insbesondere die
|
||||
technische Vertragsgrenze gegen ad-hoc-Felder wie `employee_data` oder
|
||||
`payroll_context`.
|
||||
@@ -148,9 +196,13 @@ Response (gekürzt):
|
||||
- `assumptions` und `alternatives` sind bereits stabile Vertragsfelder, bleiben
|
||||
in v1 aber leer. Der Dienst errät diese Strukturen nicht aus Freitext; ihre
|
||||
spätere Befüllung benötigt einen eigenen belegbaren Generierungsvertrag.
|
||||
- `grounding.data_scope=knowledge_base_only` ist in v1 unveränderlich.
|
||||
- `grounding.data_scope=knowledge_base_only` ist im knowledge-Modus
|
||||
unveränderlich; im Review-Modus gilt
|
||||
`knowledge_base_plus_review_context`.
|
||||
- `ratings_enabled` zeigt, ob diese Antwort über `/v1/ratings` bewertet werden
|
||||
kann.
|
||||
- `mode` spiegelt den Anfragemodus; `plausibility` ist nur im Review-Modus
|
||||
gesetzt.
|
||||
|
||||
Der Client darf `verified=false` nicht als normale Fachantwort darstellen.
|
||||
Empfohlen ist ein sichtbarer Warnzustand ohne automatische Folgeverarbeitung.
|
||||
|
||||
Reference in New Issue
Block a user