← All cases
Finance Sales

Investment Division of a Large Bank

An AI agent that finds the right moment to start the conversation, chooses a product against the client’s portfolio and history, walks through a rigid sales funnel, and stays inside hard compliance boundaries.

chat phrases

Can you spot where the agent stops itself?

Phrases from a banking chat. Would each one pass the agent’s compliance filter?

1 / 5
The coupon income on this bond is fixed at 12% per year, but if the issuer defaults you can lose the full principal, not just the coupon.

How the agent finds the line between information and recommendation — in the case below

Challenge

The bank had roughly three hundred thousand portfolios and a large segment of clients who opened the mobile app every month, checked their positions, and left without doing anything. That segment was too small for a dedicated manager and too valuable for generic mass campaigns.

The business did not need a chatbot for “questions and answers.” It needed a new sales channel inside the app: a system that decides when the conversation is appropriate, what product is relevant, how to stay inside a strict funnel, and where to stop when regulation takes over.

When the agent decides to reach out

The system evaluates multiple triggers, but the important part is not the number of triggers. It is the order of restrictions that sits above them: is there already an active dialogue, is the cooldown still in effect, is the client eligible, are we repeating a rejected contact, and only then does the system decide whether to write at all.

Idle cash on a brokerage account can trigger a conversation about bonds with coupon income. A portfolio heavily concentrated in equities can trigger a defensive product. Age and eligibility can trigger a pension conversation. If a hard stop is hit, the client sees nothing.

How the sale is run

The dialogue is strictly staged. The agent explains why it is reaching out, asks for permission to continue, clarifies what matters to the client, presents the product with required risk wording, and only then moves to the next step.

The system is not allowed to skip stages. Even if the client immediately says “I want to buy,” the product still has to be presented properly and the risks still have to be disclosed. Objection handling is explicitly limited. If doubt survives two rounds, the conversation moves to a manager instead of turning into an endless persuasion loop.

What broke and how we fixed it

The first version relied on keywords. That collapsed almost immediately. Russian phrasing, ambiguity, and financial language made the agent jump to the wrong stage or misread intent entirely. Keyword logic was replaced by a cascade: fast rules, LLM classification, and corrective rules on top.

Objection handling also broke. At first the agent could argue forever. When we capped the number of objection rounds, a new issue appeared: some client replies looked like questions and were not counted as objections, so the conversation still got stuck. The final fix was blunt but reliable: once the dialogue is in the objection stage, every additional client message moves the conversation closer to a handoff.

The biggest compliance failure was unambiguous: the early system started helping clients answer qualification tests. That forced a redesign into several layers instead of one final filter: hard bans in the prompt, refusal branches, a checker loop for the first outreach message, and answer audit after generation.

How it works now

Under the hood this is not one universal agent. It is three connected loops:

  1. Outreach logic that decides whether the bank is even allowed to contact the client now.
  2. A product-document pipeline that turns source documents into managed product records, risk wording, and objection-handling fragments.
  3. A chat runtime that keeps the current product, funnel stage, restrictions, and structured memory of the previous contact.

The agent does not carry the entire past dialogue from one conversation into the next. It stores a compact structured summary: outcome, product, trigger, rejection reason, preferences, and constraints. That summary is enough to avoid starting from zero without contaminating the next conversation with stale context.

Result

The main change was not the model itself. It was the business possibility that appeared after the system was built. A segment that was previously unprofitable for human managers and pointless for mass mailing became a managed personal sales channel inside the mobile app.

Not another chatbot, but a real one-to-one conversation in a place where no such channel existed before.

10 weeks from kickoff to live traffic
5 investment product categories
17 triggers for outreach
47% of changes came from live client dialogues
Cascade intent classification
Multi-layer compliance: prompt, FSM, audit
10 weeks from kickoff to live traffic
5 investment product categories
17 triggers for outreach
47% of changes came from live client dialogues
Cascade intent classification
Multi-layer compliance: prompt, FSM, audit

Platform modules used in this project

Chat & Agents pydantic-ai

A rigid sales structure from greeting to next action, with explicit limits on repeated objections and off-topic branches. The agent follows the playbook instead of improvising.

Documents Qdrant

A product knowledge layer built from 153 pages of automatically parsed and indexed documentation. Sales methodology, positioning, objections, and risk wording are available per product.

Inference

DeepSeek V3 handles intent understanding, response generation in the client’s tone, and analysis of previous dialogues.

Guardrails

Compliance filters block investment advice, yield guarantees, and forward-looking promises. The disclaimer is rendered in the app interface instead of being generated by the agent.

Tell us which process you want to break down.

We will tell you whether the task fits AI agents and, if it does, outline a concrete plan.

or write directly to ilya@manaraga.ai