ai newsDo., 15. Okt.
EilmeldungMeta and Apple team up to make Muse AI models run better on Macs

AI-Agents halten Handlungen oft faelschlich fuer erfolgreich

Eine Aktion ausfuehren zu lassen sei laut Entwicklererfahrung einfach, zu erkennen, ob sie tatsaechlich funktioniert hat, sei das eigentliche Problem. Im Beitrag geht es um mehrstufige Aktionen wie Google-Suche, Messaging und E-Mail, die on-device laufen.

dev.toFreitag 06:12 · 09.10.DE2 Min. Lesezeit
Bild: dev.to

Einer KI-Agenten eine Aktion ausführen zu lassen, ist der einfache Teil.

Ihn wissen zu lassen, ob die Aktion tatsächlich funktioniert hat, das ist das Problem, über das niemand spricht, bis etwas schiefgeht.

Als ich die ersten mehrstufigen Aktionen für StareBrain gebaut habe (Google-Suche, Messaging, E-Mail, alles läuft auf dem Gerät über die Accessibility-Schicht von Android), bin ich jedes Mal auf denselben Fehler gestoßen: Der Agent hat seine Schritte abgeschlossen, Erfolg gemeldet und lag falsch.

Nicht böswillig. Einfach überzeugt falsch.

Ein Agent löst eine Aktion aus, etwa das Senden einer Nachricht. Er prüft: Habe ich die Schritte abgeschlossen? Ja. Also meldet er: SUCCESS.

Aber „Ich habe die Schritte abgeschlossen“ ist nicht dasselbe wie „Die Nachricht wurde gesendet.“ Die Schritte könnten gegen einen veralteten UI-Zustand ausgeführt worden sein. Der Senden-Button könnte abgefangen worden sein. Das Accessibility-Event könnte ausgelöst worden sein, ohne dass die Aktion abgeschlossen wurde.

Der Selbstbericht des Agents ist nicht die maßgebliche Wahrheit. Der Systemzustand ist es.

Vor dem Auslösen sollte definiert werden, wie Erfolg aussieht:

`val SUCCESS_THRESHOLD = mapOf ( "stateChanged" to true, "timestampAfterDispatch" to true, "matchesExpectedOutput" to true ) ` Nach dem Auslösen wird der Zustand geprüft, nicht der Bericht des Agents über den Zustand:

` enum class ActionStatus { CONFIRMED, // Zustand gegen vordefinierten Schwellenwert verifiziert FAILED, // Zustand als unverändert verifiziert DENIED_UNRESOLVED // Zustand nicht verifizierbar, nicht standardmäßig SUCCESS } ` DENIED_UNRESOLVED ist der wichtige Status. Er ist kein Platzhalter. Es ist ein dauerhafter Status erster Klasse für Aktionen, deren Ergebnis nicht verifiziert werden kann. Er verfällt bei einem Timeout nicht zu SUCCESS.

Nachdem der Agent versucht hat, eine Nachricht zu senden:

Prüfe den Gesendet-Ordner auf eine Nachricht, die dem erwarteten Empfänger und Inhalt entspricht Bestätige, dass der Zeitstempel nach dem Auslösen liegt Wenn beides zutrifft, dann CONFIRMED Wenn der Gesendet-Ordner unverändert ist, dann FAILED Wenn der Gesendet-Ordner nicht zugänglich oder mehrdeutig ist, dann DENIED_UNRESOLVED

Der Agent zertifiziert sich nie selbst. Das Artefakt (Nachrichten-ID, Sendeprotokoll) ist der Beweis.

Warum dies für On-Device-Agents wichtiger ist

Cloud-Agents scheitern lautlos, der Fehler landet irgendwo in einem Log. On-Device-Agents scheitern sichtbar, in den eigenen Apps des Nutzers. Eine Nachricht an die falsche Person, eine E-Mail, die verfasst, aber nicht gesendet wurde, eine Suche in einer Schleife, der Nutzer sieht es sofort.

Diese Sichtbarkeit ist tatsächlich ein Vorteil, wenn man dafür baut. Die oben beschriebene Verifikationsschicht fängt die meisten Fehler ab, bevor der Nutzer sie bemerkt. Die Fehler, die sie nicht abfangen kann, werden ehrlich als DENIED_UNRESOLVED gekennzeichnet, anstatt still als Erfolg protokolliert zu werden.

Transparentes Scheitern schlägt überzeugte Falschheit jedes Mal.

StareBrain ist ein On-Device-KI-Agent für Android. Vor dem Launch, die Warteliste finden Sie hier.

Automatisch übersetzt. Das Original auf Englisch ist unten aufklappbar.

Original (Englisch) anzeigen

Getting an AI agent to take an action is the easy part.

Getting it to know whether the action actually worked — that’s the problem nobody talks about until something goes wrong.

When I built the first multi-step actions for StareBrain (Google search, messaging, email — all running on-device via Android’s accessibility layer), I hit the same failure every time: the agent would complete its steps, report success, and be wrong.

Not maliciously. Just confidently wrong.

An agent dispatches an action — say, sending a message. It checks: did I complete the steps? Yes. So it reports: SUCCESS.

But “I completed the steps” is not the same as “the message was sent.” The steps could have run against a stale UI state. The send button could have been intercepted. The accessibility event could have fired without the action completing.

The agent’s self-report is not ground truth. System state is.

Before dispatching, define what success looks like:

`val SUCCESS_THRESHOLD = mapOf ( "stateChanged" to true, "timestampAfterDispatch" to true, "matchesExpectedOutput" to true ) ` Enter fullscreen mode Exit fullscreen mode After dispatch, check state — not the agent’s report of state:

` enum class ActionStatus { CONFIRMED, // State verified against pre-defined threshold FAILED, // State verified as unchanged DENIED_UNRESOLVED // State unverifiable — not SUCCESS by default } ` Enter fullscreen mode Exit fullscreen mode DENIED_UNRESOLVED is the important one. It’s not a placeholder. It’s a permanent first-class status for actions where the outcome can’t be verified. It does not decay into SUCCESS on timeout.

After the agent attempts to send a message:

Check the sent folder for a message matching the expected recipient + content Confirm the timestamp falls after dispatch If both pass → CONFIRMED If sent folder is unchanged → FAILED If the sent folder is inaccessible or ambiguous → DENIED_UNRESOLVED

The agent never self-certifies. The artifact (message ID, sent record) is the proof.

Why this matters more for on-device agents

Cloud agents fail quietly — the error lives in a log somewhere. On-device agents fail visibly, in the user’s own apps. A message sent to the wrong person, an email drafted but not sent, a search that looped — the user sees it immediately.

That visibility is actually an advantage if you build for it. The verification layer I described above catches most failures before the user does. The ones it can’t catch get flagged honestly as DENIED_UNRESOLVED rather than silently logged as success.

Transparent failure beats confident wrongness every time.

StareBrain is an on-device AI agent for Android. Pre-launch — Waitlist here.

Originaltitel: Why Your AI Agent Thinks It Succeeded (And How to Catch When It Didn’t)Quelle: dev.to (dev.to). Original öffnen