Zum Inhalt springen
megapromotingLassen Sie uns sprechen

Lösungen · Finanzdienstleistungen

Ein Agent, der Geldbewegungen klassifiziert, indem er aus einer geschlossenen Liste auswählt, nicht indem er einen Satz schreibt, den dann jemand interpretiert.

In einer Finanzorganisation gibt ein nützlicher Agent keine Ratschläge und genehmigt nichts: Er liest Dokumente und Transaktionen, ordnet sie einer Kategorie aus einem festen Satz zu, sagt, wie sicher er ist, und darf „Ich weiß es nicht“ antworten. Der Rest — die Entscheidung, die Genehmigung, die Richtlinie — bleibt bei den Menschen.

Angebot, mit BedingungenNu scriem „livrat”, pentru că nu avem un agent de acest fel pus în producție la un client din sectorul financiar. Ce avem, și arătăm exact ca atare, e o conductă proprie de ingestie care rulează pe datele noastre: cinci module Python, 1.526 de linii, care citesc notificări bancare din e-mail și extrase în PDF, clasifică fiecare tranzacție prin unelte și o scriu în PostgreSQL cu dedublare, plus patru fluxuri de automatizare pentru webhookuri de la trei procesatori de plăți. Starea reală, spusă în aceeași frază: depozitul nu e sub git, directoarele `tests/` și `webhook-server/` sunt goale, iar potrivirea aproximativă a numelor de contrapartidă folosește o euristică de n-grame marcată în cod ca „de înlocuit cu un serviciu de înglobare înainte de producție”. Partea de platformă financiară în producție — flux de cerere, contract, grafic de plăți, audit — e o lucrare separată, cu dovezile ei, și acolo scriem „livrat”.

Anfragen nach KI-Agenten in Finanzdienstleistungen kommen fast immer in der Form „sie sollen Kunden auf Fragen zu unseren Produkten antworten“. Das ist eine legitime Anfrage, aber dort wird keine Zeit gewonnen. Die Zeit geht woanders verloren: Jemand öffnet täglich Dutzende Bank- und Auszugsbenachrichtigungen, sieht sich eine Beschreibung in Form einer Zeichenfolge aus Großbuchstaben mit einem Code an und entscheidet, ob es eine Zahlung eines Kunden, ein Gehalt, eine Steuer, eine Rate an einen Gläubiger oder eine Betriebsausgabe ist. Diese Arbeit ist repetitiv, langweilig und genau deshalb voller Fehler.

Ein Sprachmodell ist dafür gut, unter einer Bedingung: Man darf es nicht bitten, eine freie Textantwort zu schreiben. Wenn Sie es um einen Satz bitten, parsen Sie ihn selbst, und das Parsen wird Ihnen misslingen. In unserer Pipeline schreibt das Modell nicht: Es erhält sieben Werkzeuge und muss genau eines aufrufen — Zahlung eines Kunden, Gehalt, Steuer, Zahlung an einen Gläubiger, Betriebsausgabe, Bankgebühr oder unbekannt. Jedes Werkzeug verlangt neben dem Namen der Gegenpartei oder der Kategorie einen Vertrauenswert zwischen 0 und 1. „Unbekannt“ verlangt einen geschriebenen Grund. Die Ausgabe ist eine Struktur, keine Meinung.

Die zweite Regel ist, dass nichts zweimal eingeht. Jede aus einer Benachrichtigung oder aus einem Auszug extrahierte Transaktion erhält eine externe Kennung, berechnet als 16-stelliges Präfix eines SHA-256-Hashes über ihre Felder; die Spalte ist in der Tabelle eindeutig, und das Einfügen erfolgt mit `ON CONFLICT (external_id) DO NOTHING`. Die praktische Konsequenz: Das Postfach kann so oft erneut gelesen werden, wie Sie möchten, und der Saldo verdoppelt sich nicht. Ohne diese Regel endet jede finanzielle Ingestion-Pipeline in der dritten Woche damit, dass Dubletten entstehen, die jemand manuell bereinigt.

Was ein solcher Agent nicht tut und warum es wichtig ist, das auf der Seite zu schreiben: Er genehmigt keine Zahlung, trifft keine Kreditentscheidung, gibt keine Anlageempfehlung und antwortet dem Kunden nicht im Namen der Institution. Der Vertrauenswert, den er zurückgibt, ist die Selbsteinschätzung des Modells, keine von uns vorgenommene Messung der Genauigkeit — dieser Unterschied ist der Unterschied zwischen einem Werkzeug und einer Kontrollillusion.

Was dazugehört

Was sich konkret in Finanzdienstleistungen ändert

Das Dokument geht nur einmal ein, auch wenn wir es zehnmal lesen

Benachrichtigungen werden per IMAP aus dem Postfach gelesen, Auszüge aus PDF. Jede Transaktion erhält eine externe Kennung aus einem SHA-256-Hash über ihre Felder, die Spalte `external_id` ist `NOT NULL UNIQUE` in der Tabelle, und das Einfügen erfolgt mit `ON CONFLICT (external_id) DO NOTHING`, mit separatem Protokoll für die eingefügte Zeile und für die als Duplikat übersprungene. Das erneute Lesen desselben Postfachs erzeugt keine Dublette.

Die Klassifizierung erfolgt über Werkzeuge mit einer geschlossenen Liste von Ergebnissen

Sieben Werkzeuge, kein freier Text: Zahlung eines Kunden, Gehalt, Steuer, Zahlung an einen Gläubiger, Betriebsausgabe, Bankgebühr, unbekannt. Das Modell muss genau eines aufrufen. Die ersten sechs verlangen zwingend, zusätzlich zu Name oder Kategorie, einen Vertrauenswert zwischen 0,0 und 1,0, der im Werkzeugschema angegeben ist; das siebte verlangt einen Grund. Das verwendete Modell ist im Code angegeben, nicht in der Konfiguration verborgen.

„Unbekannt“ ist eine legitime Ausgabe, mit Grund

Ein Klassifikator, der nicht sagen darf „ich weiß nicht“, wird genau die ungewöhnlichen Transaktionen — also die wichtigen — mit hoher Zuversicht falsch einordnen. Deshalb ist das Unbekannt-Werkzeug genauso verfügbar wie die anderen und verlangt einen geschriebenen Grund, der in der Zeile landet. Unbekannte Zeilen sind die Arbeitsliste des Menschen, kein Systemfehler.

Die ungefähre Übereinstimmung von Gegenparteinamen mit ihrem tatsächlichen Stand

Dieselbe Firma erscheint in Auszügen in drei Schreibweisen. Über der Klassifizierung gibt es eine Übereinstimmung nach Kosinusähnlichkeit zwischen Vektoren. Wir sagen heute genau, was diese Vektoren sind: eine N-Gramm-Heuristik für Zeichen, im Code mit dem Kommentar geschrieben, dass sie für die Produktion durch einen echten Aufruf an einen Embedding-Dienst ersetzt werden muss. Sie funktioniert bei Schreibvarianten; sie ist keine semantische Übereinstimmung.

Die Webhooks der Zahlungsprozessoren gehen in dieselbe Tabelle ein

Vier Automatisierungs-Workflows, jeweils einer für drei Zahlungsprozessoren und einer für die tägliche Abstimmung, mit jeweils 7 bis 10 Knoten. Die Architekturidee ist, dass unterschiedliche Quellen — E-Mail, PDF, Webhook — keine drei Tabellen erzeugen, die danach zusammengeführt werden müssen, sondern Zeilen in derselben Tabelle, mit derselben Deduplizierungsregel.

Der Modellverbrauch bleibt pro Schlüssel unter dem Budget, nicht unter der Rechnung

Die Aufrufe laufen über ein eigenes Gateway unter `api.megapromoting.com/v1`, mit 44 konfigurierten Modellen, jeweils mit Token-Kosten und Kontextlimit. Der Projektschlüssel hat eine Modellauswahlliste, Budget und Zeitraum, kann unter Beibehaltung der Historie rotiert werden, und der Verbrauch wird täglich pro Nutzer × Schlüssel × Modell konsolidiert. Das Detail, das alle überrascht: Reasoning-Modelle erzeugen interne Schritte, die das Tracking-System nicht sieht, der Anbieter sie aber berechnet — daher wird das Bruttobudget pro Schlüssel unterhalb der gewünschten Obergrenze gesetzt.

Was ausgeführt werden kann, ohne dass Daten die Maschine verlassen

Für Schritte, die kein großes Modell erfordern — das Extrahieren von Feldern aus einem bekannten Format, Namensabgleich, Konsistenzprüfungen — ist kein externer Anbieter nötig; das ist gewöhnlicher Code. Das Modell wird nur für den Einordnungsschritt aufgerufen. Wenn Ihre Richtlinie den Datenausgang verbietet, geht es darum, was genau an das Modell gesendet wird, nicht darum, ob KI verwendet wird: Es kann die Beschreibung der Transaktion ohne Kontokennungen gesendet werden.

Was ein Agent dieser Art nicht tut und nicht tun wird

Er genehmigt keine Zahlung und führt keine Überweisung aus. Er trifft keine Kreditentscheidung — Regeln, Schwellenwerte und Genehmigung sind die Politik der Institution. Er gibt keine Anlageempfehlungen und antwortet dem Kunden nicht in Ihrem Namen ohne einen separaten Genehmigungsweg. Und er garantiert Ihnen keine Genauigkeit: Der Vertrauenswert ist die Ausgabe des Modells über sich selbst, keine unabhängige Messung.

Traseul

Wie eine Anfrage durch das System läuft.

01

Wir legen die geschlossene Ergebnissliste fest, vor jeglichem Code

Die erste Lieferung ist kein Agent, sondern eine Liste: die Kategorien, in die er einordnen darf, welche Pflichtfelder jede Kategorie verlangt, und was bei Ihnen „unbekannt“ bedeutet. Wenn sich die Liste nicht auf einer Seite aufschreiben lässt, ist die Aufgabe nicht für einen Agenten geeignet — und es ist billiger, das jetzt herauszufinden.

02

Wir bauen die Ingestion und die Deduplizierung, ohne Modell

Das Einlesen aus E-Mail, PDF oder Webhook, das Extrahieren der Felder, die Berechnung der externen Kennung und das Schreiben in die Datenbank werden ohne jeden Modellaufruf durchgeführt und geprüft. Wir liefern eine Pipeline, die korrekt ingestiert und nicht doppelt erfasst. Wenn dieser Schritt nicht robust ist, erzeugt ein Modell darüber nur überzeugendere Fehler.

03

Wir fügen die Einordnung hinzu und messen sie an Ihren Fällen

Über die funktionierende Pipeline setzen wir die Klassifizierungswerkzeuge und laufen über einen Satz Ihrer realen Transaktionen, mit dem korrekten Ergebnis, festgelegt von der Person, die die Arbeit heute erledigt. Wir liefern die Tabelle mit Übereinstimmungen und Abweichungen, nicht eine Aussage über die Genauigkeit. Der Schwellenwert, ab dem die Zeile an einen Menschen geht, wird aus dieser Tabelle gewählt.

04

Wir setzen Budget, Protokoll und Schranken

Projektschlüssel mit Whitelist von Modellen und Budget, tägliche Konsolidierung des Verbrauchs, Journal mit aufgerufenem Werkzeug und Wert, und ein Gate, das alles, was unter dem Schwellenwert liegt oder unbekannt ist, an einen Menschen sendet. Wir liefern die Zugänge, das Inbetriebnahmedokument und die schriftliche Liste dessen, was der Agent allein macht und was nicht.

1E-mail, PDF sauwebhook2extragerea câmpurilor3amprentă SHA-2564scriere cu ONCONFLICT DO NOTHING5încadrare prin unadin șapte unelte, cuscorrândurile„necunoscut” către om
Traseul, în 6 pași

Die Daten

Was wir anfassen, wo die Daten liegen und wie lange sie bleiben

Die Regeln unterscheiden sich von einer Branche zur anderen. Dies sind die, die im Finanzdienstleistungsbereich gelten.

Welche Art von Daten es konkret berührt
Geldbewegungen, mit Datum, Betrag, Währung, Beschreibung und Gegenpartei. Ein Teil der Gegenparteien sind natürliche Personen — ein Gehalt trägt den Namen des Mitarbeiters — daher enthält die Tabelle personenbezogene Daten von Mitarbeitern, nicht nur Geschäftsdaten. Das ändert, wer die Tabelle öffnen darf.
Was zum Modell gelangt und was zu Hause bleibt
Zum Modell gelangen der Text der Transaktionsbeschreibung und der Betrag. Kontokennungen, IBANs und die übrigen Felder gehören nicht in die Anfrage, damit die Zuordnung funktioniert, also können Sie sie weglassen. Die Regel, die wir allgemein anwenden: Was für den jeweiligen Schritt nicht erforderlich ist, wird nicht gesendet, denn was nicht rausgeht, kann von niemandem behalten werden.
Wo die extrahierten Daten liegen
PostgreSQL, mit `external_id` als eindeutigem Feld und Index darauf. Die Datenbank bleibt Ihre, auf Ihrer Infrastruktur oder auf einer, die wir für Sie betreiben. Es gibt keinen gemeinsamen Speicher über Kunden hinweg, weil es keinen technischen Grund dafür gibt, dass es einen geben sollte.
Die Spur der automatischen Entscheidung
Jede Zeile speichert, welches Werkzeug aufgerufen wurde, mit welchem Score und, falls zutreffend, den Grund für „unbekannt“. Das ist das Minimum, damit in sechs Monaten jemand die Frage beantworten kann: „Warum wurde diese Transaktion als Betriebsausgabe eingestuft“ — mit einer Antwort, nicht mit Achselzucken.
Die Aufbewahrungsfrist, die Sie hier nicht allein wählen
Finanzunterlagen haben Aufbewahrungsfristen, die durch die Buchhaltungs- und Steuergesetzgebung festgelegt sind, nicht durch unsere oder Ihre Vorliebe. In einem Finanzprojekt wird die Frist aus diesen Regeln übernommen, im Verzeichnis der Verarbeitungstätigkeiten festgehalten und erst dann die Löschung umgesetzt. Die umgekehrte Reihenfolge — erst umsetzen, später prüfen — führt zu Systemen, die das löschen, was hätte aufbewahrt werden müssen.

Ein Fall

Eine Ingestion-Pipeline, die ohne Angst neu gestartet werden kann

Die Ausgangslage

Bankbenachrichtigungen und Monatsauszüge kamen in ein Postfach und wurden von einem Menschen gelesen, der sie kategorisierte. Die naheliegende erste Variante — ein Skript, das das Postfach liest und in die Datenbank schreibt — hat ein Problem, das erst in der dritten Woche sichtbar wird: Bei jedem Neustart oder erneutem Lesen werden dieselben Transaktionen erneut eingetragen.

Was wir gebaut haben

Wir haben fünf Module geschrieben, 1.526 Zeilen Python: zwei Analysatoren für Benachrichtigungen per IMAP, einen PDF-Auszug-Extraktor, den Klassifikator über Werkzeuge und das Schreiben in PostgreSQL. Die zentrale Regel ist der externe Identifikator — ein 16-stelliges Präfix aus einem SHA-256-Fingerabdruck über die Transaktionsfelder — mit der eindeutigen Spalte in der Tabelle und Einfügen `ON CONFLICT DO NOTHING`. Die Klassifizierung gibt keinen Text zurück: Das Modell ruft eines von sieben Werkzeugen auf, mit obligatorischem Vertrauensscore, und „unbekannt“ verlangt einen Grund.

Was dabei herauskam

Das Postfach kann jederzeit erneut gelesen werden, und die bereits verarbeiteten Zeilen werden übersprungen und im Journal als Duplikat vermerkt. Die Transaktionen, die das Modell nicht einordnen kann, erscheinen als Arbeitsliste, mit dem Grund daneben, statt in eine Kategorie gedrückt zu werden, damit es so aussieht, als wäre alles gut gelaufen.

Was der Fall nicht sagt

Es ist eine interne Pipeline, kein an einen Finanzkunden ausgeliefertes System: Sie ist nicht unter git, die Testverzeichnisse sind leer, und die ungefähre Namensübereinstimmung verwendet eine n-Gramm-Heuristik, die der Code ausdrücklich als vorläufig markiert. Ich habe sie hier beschrieben, weil sie die Methode zeigt, nicht weil es ein Produkt ist.

Fragen

Was jemand aus dem Finanzdienstleistungsbereich fragt

Genehmigt der Agent Zahlungen oder Kredite?

Nein, und das ist keine technische Einschränkung, die wir in der nächsten Version überwinden werden. Die Genehmigung ist eine Entscheidung mit rechtlichen Folgen, die einer autorisierten Person in der Institution zusteht. Der Agent bereitet vor: ordnet zu, vervollständigt, signalisiert, was nicht passt. Ein System, das selbst genehmigt, müsste einem Prüfer gegenüber Rechenschaft ablegen können, und ein Vertrauensscore ist keine Antwort.

Woher weiß ich, dass es richtig zugeordnet wurde?

Nicht vom Vertrauensscore — das ist die Selbsteinschätzung des Modells, keine Messung. Man weiß es aus dem Vergleich mit den Entscheidungen des Menschen, der heute die Arbeit macht, anhand eines Satzes realer Transaktionen, der erstellt wurde, bevor etwas im Automatikmodus gestartet wird. Das Ergebnis dieses Vergleichs ist eine Tabelle, die wir liefern, einschließlich der Zeilen, in denen der Agent sich geirrt hat.

Was passiert, wenn es sich nicht sicher ist?

Rufen Sie das Werkzeug „unbekannt“ auf und schreiben Sie den Grund. Die Zeile landet in der Arbeitsliste des Menschen, nicht in einer zufällig gewählten Kategorie, nur damit es so aussieht, als hätte das System funktioniert. Ein Klassifikator ohne „weiß nicht“-Ausgabe irrt genau dort, wo der Fehler kostet: bei ungewöhnlichen Transaktionen.

Wenn wir dieselbe Benachrichtigung zweimal lesen, verdoppelt sich der Betrag?

Nein. Jede Transaktion hat eine externe Kennung, die als Fingerabdruck über ihre Felder berechnet wird, die Spalte ist eindeutig, und das Einfügen verwendet `ON CONFLICT (external_id) DO NOTHING`. Die übersprungene Zeile wird im Journal als Duplikat notiert, also ist sichtbar, dass sie erneut gelesen wurde.

Gehen unsere Daten an einen Modellanbieter?

Für den Zuordnungsschritt ja: Die Transaktionsbeschreibung und der Betrag gehen über unser Gateway mit Projektschlüssel, Modell-Whitelist und Budget an das gewählte Modell. Die restlichen Schritte — Lesen, Extraktion, Deduplizierung, Namensabgleich — sind normaler Code und gehen nirgends hin. Was genau hinausgehen darf, wird vorher schriftlich festgelegt, nicht erst später aus den Protokollen entdeckt.

Können Sie PDF-Auszüge lesen, nicht nur Benachrichtigungen per E-Mail?

Ja, das ist eines der Module der Pipeline. Wichtig ist, dass ein PDF-Auszug ein fragiles Format ist: Er wird nach der Struktur gelesen, die die jeweilige Bank erzeugt, und wenn die Bank die Vorlage ändert, muss das Modul angepasst werden. Deshalb wird mit Prüfungen geschrieben, die laut scheitern, nicht raten.

Warum steht auf dieser Seite „Angebot“ und nicht „geliefert“?

Weil unsere Regel mindestens zwei eigene Implementierungen verlangt, damit wir „geliefert“ schreiben, und die hier beschriebene Pipeline auf unseren Daten läuft, nicht produktiv bei einem Kunden aus dem Finanzsektor. Sie hat auch Einschränkungen, die wir benennen: Sie ist nicht unter git, hat keine Tests, und der Namensabgleich verwendet eine im Code als vorläufig markierte Heuristik. Wenn wir zwei Implementierungen bei Kunden zitieren können, ändern wir das Wort.

Was brauchen wir von uns, damit die Arbeit beginnt?

Drei Dinge: die geschlossene Liste der Kategorien, in die es einordnen darf, einen Satz echter Transaktionen mit der korrekten Antwort der Person, die die Arbeit heute macht, und die schriftliche Entscheidung darüber, welche Felder Ihr Netzwerk verlassen dürfen. Ohne den dritten Punkt beginnen wir nicht, weil er der einzige ist, der sich später nicht mehr reparieren lässt.

Was sollte bei Ihnen besser laufen?

Erzählen Sie uns von Ihrem Prozess. Gemeinsam legen wir fest, was sich zu bauen lohnt, was wir anbinden können und wie wir das Ergebnis prüfen.

Lassen Sie uns sprechen