Bildschirme für KI-Agenten verständlich machen: Praktische Anleitung zur Jetpack Compose Semantics-Gestaltung

Bildschirme für KI-Agenten verständlich machen: Praktische Anleitung zur Jetpack Compose Semantics-Gestaltung

Bildschirme für KI-Agenten verständlich machen: Praktische Anleitung zur Jetpack Compose Semantics-Gestaltung

Einführung

Damit KI-Agenten und automatisierte Test-Tools in Jetpack Compose "was macht dieser Button" genau verstehen können, ist die richtige Gestaltung von Semantics (Semantik) der Schlüssel.

Compose verfügt intern über einen "Semantics Tree", der als Bedeutungsstruktur für Barrierefreiheit, UI-Tests und automatisierte Bedienung (Appium/UIAutomator/MCP usw.) fungiert. Es ist sozusagen das Äquivalent zu ARIA und DOM im Web.

Hauptattribute von Semantics

contentDescription

Das grundlegendste Attribut zur Zuweisung einer Bedeutung zu reinen Icon-Buttons.

IconButton(
    onClick = onDelete,
    modifier = Modifier.semantics {
        contentDescription = "削除"
    }
) {
    Icon(Icons.Default.Delete, contentDescription = null)
}

KI und Barrierefreiheitstools erkennen dies als "Delete-Button · anklickbar · Button-Rolle" an.

role

Macht den UI-Typ für benutzerdefinierte UIs explizit. Ein einfaches Box(clickable) wird als "anklickbare Etwas" erkannt, aber durch die Angabe einer Rolle wird deutlich, dass es sich um Button, Switch, Checkbox, Tab usw. handelt.

Modifier.semantics {
    role = Role.Button
}

stateDescription

Vermittelt der KI den aktuellen Zustand der UI.

Modifier.semantics {
    stateDescription =
        if (subscribed) "購読中"
        else "未購読"
}

testTag

Der wichtigste Identifikator für die Zusammenarbeit mit MCP, Appium und automatisierten UI-Agenten. Er ermöglicht eine stabile Identifizierung unabhängig von Koordinaten, OCR oder Textänderungen.

Modifier.testTag("login_button")

Konfiguration für UIAutomator-Integration

Da Compose keine View-Hierarchie direkt erstellt, ist testTag von UIAutomator manchmal nicht sichtbar. Dies kann durch das Folgende am Root gelöst werden.

Scaffold(
    modifier = Modifier.semantics {
        testTagsAsResourceId = true
    }
)

testTag wird als resource-id erkannt und kann direkt von UIAutomator abgerufen werden.

Implementierungsmuster, die KI am leichtesten versteht

Die beste Praktik ist die Kombination mehrerer Attribute.

Button(
    onClick = login,
    modifier = Modifier
        .testTag("login_button")
        .semantics {
            contentDescription = "ログイン"
            role = Role.Button
        }
) {
    Text("ログイン")
}
Attribut KI-Verständnis
testTag Eindeutige Identifizierung
contentDescription Bedeutungsverständnis
role UI-Typ-Verständnis
clickable Ausführungsverständnis

Komplexe UIs zu einer einzigen Bedeutung zusammenfassen

Wenn komplexe Zusammensetzungen wie Icon, Text und Badge der KI als ein einziger Button gezeigt werden sollen, verwenden Sie clearAndSetSemantics.

Modifier.clearAndSetSemantics {
    contentDescription = "商品をカートに追加"
    role = Role.Button
}

Die interne Verschachtelungsstruktur und Icon-Gruppen werden ignoriert und nur die Bedeutung an die KI übermittelt.

Was Semantics-Gestaltung ermöglicht

Stabilisierung der automatisierten Bedienung

Mit testTag ist eine stabile Bedienung ohne Koordinaten oder OCR möglich. Selbst nach einem UI-Redesign funktioniert die Automatisierung, solange der testTag gleich bleibt. Auch bei mehrsprachigen Versionen wird die Automatisierung robuster.

Reduktion der Token-Menge

Nur mit Screenshots ist eine große Menge an Tokens für Bildanalyse erforderlich, aber mit dem Semantics Tree können Sie strukturierte Daten leicht handhaben.

[
  {"type": "Button", "label": "ログイン"},
  {"type": "TextField", "label": "メール"},
  {"type": "TextField", "label": "パスワード"}
]

Dies ist besonders wirksam bei langer Automatisierung und großflächiger Bildschirmanalyse und trägt auch zur Vermeidung von Context-Überfluss bei.

Zustandsverständnis durch KI

Mit stateDescription kann die KI den aktuellen Zustand des Bildschirms abschätzen und Entscheidungen treffen wie "es ist paused, also sollte ich den Play-Button drücken". Es wird möglich, den Bildschirm als Zustandsmaschine verstehen zu lassen.

Strukturierte Analyse durch MCP-Integration

Der Semantics Tree kann von einem MCP Server abgerufen und an den LLM-Agenten übermittelt werden, was Bedeutungsverständnis des gesamten Bildschirms, Schätzung der nächsten Bedienungsoptionen und Zustandsübergangsanalyse ermöglicht.

Compose UI → Semantics Tree → MCP Server → LLM Agent

Zusammenfassung zur Verwendung von Semantics-Attributen

Attribut Verwendung
testTag Eindeutige Identifizierung
contentDescription Bedeutung
role UI-Typ
stateDescription Zustand
collectionInfo Listenstruktur
traversalIndex Navigation-Reihenfolge
customActions Benutzerdefinierte Aktionen für KI

Fazit

Compose ermöglicht die Trennung von "Erscheinungsbild" und "Bedeutung". Das Wesen von Semantics-Gestaltung liegt darin, dass Sie Benutzeroberfläche für Menschen und Bedeutungsstruktur für KI unabhängig voneinander gestalten können.

Wenn Sie KI-Agenten, MCP, UIAutomator und automatisierte E2E-Tests nutzen, erzielen Sie durch die folgende Standardisierung für jede Komponente ein hohes Kosten-Nutzen-Verhältnis.

Modifier
    .testTag(...)
    .semantics {
        contentDescription = ...
        role = ...
    }

Statt Farbe, Position und Größe die Information "was ist dieser Button, was passiert beim Drücken, wie ist der aktuelle Zustand" über Semantics zu übermitteln — das ist der Kern von KI-freundlichem UI-Design.