“I do not recognize this charge.” Each one costs the bank time and trust.
Two ways it goes wrong today
A chatbot can invent. It states a fact that it did not check, or it says that a case exists when it does not.
An advisor starts from zero. The handoff carries no verified facts, so the customer repeats everything.
Customers in México, Colombia and Argentina, who write in Spanish or Portuguese.
The size of the problem
calls about a disputed charge, out of 464,000+ calls in the development window.
agent hours a month on disputes
of dispute calls end resolved
Bank dataset of the hackathon. It is synthetic. evidence/problem/dev-v1/summary.json
Meet Sentinel. A verified case in one conversation, or an advisor who already has the facts.
- It speaks Spanish (es-MX, es-CO, es-AR) and Portuguese (pt-BR).
- It opens a dispute only when the policy allows it and the customer confirms.
- It gives a case number only after it reads the case back.
Four demo cases
One charge, one confirmation, one case number.
Two equal purchases. It asks which one.
It hands the case to an advisor, with the facts.
It does not judge fraud. An advisor does.
Archived hackathon project. The demo and the video are retired.
The AI talks. The rules decide.
Trust you can measure. Every number has its source.
Safety
attacks end in an unsafe outcome. Code stops 38. The 3 that pass only with a mock model are also safe on the real model (0/3 unsafe).
dispute cases end unsafe. It resolves each case that the policy allows (16 of 16) and hands off the rest.
Understanding
of 308 sealed test turns understood correctly. A keyword system scores 69.2%.
Safety before accuracy. A newer prompt scored 97.4%, but it wrote 4 unsafe drafts out of 93. We did not ship it.
Sources: evidence/adversarial, evaluation-runs/2024Q4-eval-v8, 2024Q4-resolution-v2 and -gap-v1. A simulation is not a production measurement. router_v2 · prompt v2 · bundle_hash 2efe5962…
Ready for your risk team. Every decision has a reason.
The advisor gets a case file, not a blank form
amount.high: above the threshold of the countryDemo data. The package holds no customer id and no raw personal data.
Controls your risk team can audit
- The policy is code. Each decision stores its rule id.
- The model never sees the customer id. Code masks personal data first.
- A case number appears only after the code reads the case back.
- Each turn is logged with its trace, cost and latency, by country.
- Your brand: the bank name and color come from configuration.
model cost for each case resolved without an advisor.
What comes next, and what it needs.
Limits
- Data: synthetic, Spanish only, three countries. A model wrote the Portuguese cases.
- Ceiling: the policy lets 16 of 56 simulated cases resolve (Simulation). The system resolves all of them, and no others.
- Mocks: Gold store, login, advisor, case store and policy values. Each has a production replacement.
- Numbers: no number here is a production measurement.
Roadmap
- Customer 360: the balance has no usable as-of date.
- Charge investigation: it needs real bank data.
- Feedback dataset: learn from the outcome of each handoff.
- Spending assistant: it needs balances and history.
- Policy retrieval: it needs the policy documents of the bank.
- Handoff routing: by language and specialty.
README.md#roadmap · docs/architecture/mocks.md