AI Compliance Agents
The compliance AI system includes two agents that work together to reduce manual review burden: the Case Investigation Agent and the Match Verification Agent. Together, they can auto-resolve 50–70% of compliance cases that would otherwise require manual analyst review.
Agents Overview
| Agent | Purpose | Auto-Resolution Target |
|---|---|---|
| Case Investigation | Investigates ReviewRequired cases by analyzing transaction patterns, customer history, and contextual signals | 50–70% of review cases |
| Match Verification | Evaluates screening matches using Bayesian confidence scoring to distinguish true positives from false positives | 60–80% of screening matches |
Case Investigation Agent
When a transaction or customer screening produces a ReviewRequired status, the Case Investigation Agent evaluates the case automatically.
How It Works
Case Status: ReviewRequired
│
▼
Case Investigation Agent
├── Analyze transaction patterns
├── Check customer risk history
├── Evaluate geographic risk signals
├── Cross-reference related cases
│
▼
Decision
├── AUTO_CLEARED (low risk confirmed)
├── NEEDS_REVIEW (insufficient confidence)
└── AUTO_ESCALATED (high risk confirmed)
Decision Factors
| Factor | Weight | Description |
|---|---|---|
transaction_pattern | 0.25 | Deviation from customer's normal behavior |
customer_risk_profile | 0.20 | Historical risk level and previous alerts |
geographic_risk | 0.20 | Source/destination country risk rating |
counterparty_risk | 0.15 | Known counterparty risk signals |
amount_anomaly | 0.10 | Statistical deviation from typical amounts |
temporal_pattern | 0.10 | Unusual timing or frequency patterns |
Example case decision:
{
"case_id": "case-uuid",
"agent": "case_investigation",
"decision": "AUTO_CLEARED",
"confidence": 0.93,
"factors": {
"transaction_pattern": { "score": 0.95, "note": "Consistent with regular supplier payment pattern" },
"customer_risk_profile": { "score": 0.90, "note": "Low-risk customer, no previous alerts" },
"geographic_risk": { "score": 0.88, "note": "Domestic transfer, low-risk jurisdiction" },
"counterparty_risk": { "score": 0.97, "note": "Known counterparty, established relationship" },
"amount_anomaly": { "score": 0.92, "note": "Within 1 std deviation of monthly average" },
"temporal_pattern": { "score": 0.96, "note": "Regular business hours, consistent frequency" }
},
"reasoning": "Low-risk domestic transfer to established counterparty. Transaction pattern consistent with regular supplier payments over 12-month history.",
"processed_at": "2026-04-07T14:30:00Z"
}
Match Verification Agent
The Match Verification Agent uses Bayesian confidence scoring to evaluate screening matches against sanctions lists, PEP databases, and adverse media sources.
Bayesian Confidence Scoring
Instead of relying solely on string similarity, the agent considers prior probability and multiple evidence signals:
P(true_match | evidence) = P(evidence | true_match) * P(true_match)
────────────────────────────────────────
P(evidence)
Evidence signals evaluated:
| Signal | Description |
|---|---|
name_similarity | Fuzzy string match score (Jaro-Winkler, Levenshtein) |
date_of_birth | DOB match or near-match |
nationality | Country of nationality match |
id_numbers | Government ID number match |
known_aliases | Match against known aliases |
associated_entities | Connections to other matched entities |
Example match evaluation:
{
"match_id": "match-uuid",
"agent": "match_verification",
"decision": "FALSE_POSITIVE",
"bayesian_confidence": 0.03,
"prior_probability": 0.001,
"evidence": {
"name_similarity": { "score": 0.82, "note": "Common name, high base rate of coincidental matches" },
"date_of_birth": { "match": false, "note": "DOB differs by 15 years" },
"nationality": { "match": false, "note": "Different nationality" },
"id_numbers": { "match": false, "note": "No matching ID numbers" }
},
"reasoning": "Name similarity is moderate but all secondary identifiers (DOB, nationality, ID) do not match. Bayesian posterior probability of true match is 3%."
}
The Bayesian approach significantly reduces false positives compared to name-only matching. A match with 85% string similarity but no corroborating evidence (DOB, nationality) will correctly score as a likely false positive.
Enable the Agents
Configure both compliance agents via the API.
Case Investigation Agent
PUT /api/v1/ai/agents/case_investigation/config
- cURL
- Node.js
- Python
- Go
curl -X PUT https://api.korastratum.com/api/v1/compliance/ai/agents/case_investigation/config \
-H "Authorization: Bearer $TOKEN" \
-H "X-Tenant-ID: demo_bank" \
-H "Content-Type: application/json" \
-d '{
"enabled": true,
"mode": "autonomous",
"auto_clear_threshold": 0.90,
"auto_escalate_threshold": 0.85,
"max_daily_auto_decisions": 200,
"excluded_risk_levels": ["CRITICAL"],
"require_dual_signal": true
}'
const config = await complianceRequest("PUT", "/api/v1/ai/agents/case_investigation/config", token, {
enabled: true,
mode: "autonomous",
auto_clear_threshold: 0.90,
auto_escalate_threshold: 0.85,
max_daily_auto_decisions: 200,
excluded_risk_levels: ["CRITICAL"],
require_dual_signal: true,
});
config = compliance_request("PUT", "/api/v1/ai/agents/case_investigation/config", token, {
"enabled": True,
"mode": "autonomous",
"auto_clear_threshold": 0.90,
"auto_escalate_threshold": 0.85,
"max_daily_auto_decisions": 200,
"excluded_risk_levels": ["CRITICAL"],
"require_dual_signal": True,
})
config, err := complianceRequest(ctx, "PUT", "/api/v1/ai/agents/case_investigation/config", token, map[string]interface{}{
"enabled": true,
"mode": "autonomous",
"auto_clear_threshold": 0.90,
"auto_escalate_threshold": 0.85,
"max_daily_auto_decisions": 200,
"excluded_risk_levels": []string{"CRITICAL"},
"require_dual_signal": true,
})
Match Verification Agent
PUT /api/v1/ai/agents/match_verification/config
{
"enabled": true,
"mode": "autonomous",
"false_positive_threshold": 0.10,
"true_positive_threshold": 0.80,
"require_secondary_identifier": true,
"max_daily_auto_decisions": 500
}
Configuration Options
| Field | Type | Description |
|---|---|---|
enabled | boolean | Enable or disable the agent |
mode | string | shadow (observe only) or autonomous (take action) |
auto_clear_threshold | number | Minimum confidence to auto-clear a case |
auto_escalate_threshold | number | Minimum risk confidence to auto-escalate |
false_positive_threshold | number | Below this Bayesian score, mark as false positive |
true_positive_threshold | number | Above this Bayesian score, mark as true positive |
max_daily_auto_decisions | integer | Safety cap on autonomous decisions per day |
excluded_risk_levels | string[] | Risk levels that always require human review |
require_dual_signal | boolean | Require at least 2 corroborating signals for auto-clear |
require_secondary_identifier | boolean | Require non-name identifier match for true positive |
CRITICAL risk level cases should always require human review. We recommend keeping this in excluded_risk_levels even in autonomous mode.
Agent Performance Metrics
GET /api/v1/ai/agents/performance
Response:
{
"case_investigation": {
"enabled": true,
"mode": "autonomous",
"last_30_days": {
"cases_processed": 3420,
"auto_cleared": 2052,
"auto_escalated": 171,
"sent_to_human": 1197,
"auto_resolution_rate": 0.65,
"accuracy_vs_human_baseline": 0.97
}
},
"match_verification": {
"enabled": true,
"mode": "autonomous",
"last_30_days": {
"matches_processed": 8940,
"false_positives_cleared": 6258,
"true_positives_flagged": 894,
"sent_to_human": 1788,
"auto_resolution_rate": 0.80,
"accuracy_vs_human_baseline": 0.96
}
}
}
Next Steps
- Case Management — Manual case review workflow.
- Batch Screening — Bulk customer and transaction screening.
- Transaction Monitoring — Real-time transaction surveillance.
- Matching Algorithms — Details on fuzzy matching and scoring.