Application Puppeteer
Der Puppeteer ist ein Werkzeug, das es UFO ermöglicht, Aktionen auf Anwendungen zu automatisieren und auszuführen. Derzeit unterstützt UFO zwei Arten von Aktionen: GUI und API. Jede Anwendung verfügt über eine gemeinsame GUI-Aktionsschnittstelle für die Interaktion mit Maus- und Tastaturereignissen und eine private API-Aktionsschnittstelle für die Interaktion mit der nativen API der Anwendung. Wir illustrieren die Puppeteer-Architektur in der folgenden Abbildung.
Das Zustandsdiagramm für den HostAgent ist unten dargestellt.
Hinweis
UFO kann auch In-App-KI-Tools wie Copilot aufrufen, um den Automatisierungsprozess zu unterstützen. Dies geschieht durch die Verwendung von GUI oder API zur Interaktion mit dem In-App-KI-Tool.
- UI Automator - Dieser Aktionstyp wird verwendet, um mit den UI-Steuerelementen der Anwendung wie Schaltflächen, Textfeldern und Menüs zu interagieren. UFO verwendet die UIA- oder Win32-APIs, um mit den UI-Steuerelementen der Anwendung zu interagieren.
- API - Dieser Aktionstyp wird verwendet, um mit der nativen API der Anwendung zu interagieren. Benutzer und App-Entwickler können eigene API-Aktionen erstellen, um mit spezifischen Anwendungen zu interagieren.
- Web - Dieser Aktionstyp wird verwendet, um mit Webanwendungen zu interagieren. UFO verwendet die crawl4ai-Bibliothek, um Informationen von Webseiten zu extrahieren.
- Bash - Dieser Aktionstyp wird verwendet, um mit der Befehlszeilenschnittstelle (CLI) einer Anwendung zu interagieren.
- AI Tool - Dieser Aktionstyp wird verwendet, um mit LLM-basierten KI-Tools zu interagieren.
Action Design Patterns
Aktionen in UFO werden mithilfe des Command-Design-Musters implementiert, das einen Receiver, einen Command und einen Invoker kapselt. Der Receiver ist das Objekt, das die Aktion ausführt, der Command ist das Objekt, das die Aktion kapselt, und der Invoker ist das Objekt, das die Aktion auslöst.
Die Basisklassen für die Implementierung von Aktionen in UFO sind wie folgt:
| Rolle | Klasse | Beschreibung |
|---|---|---|
| Empfänger | ufo.automator.basic.ReceiverBasic |
Die Basisklasse für alle Receiver in UFO. Receiver sind Objekte, die Aktionen auf Anwendungen ausführen. |
| Befehl | ufo.automator.basic.CommandBasic |
Die Basisklasse für alle Commands in UFO. Commands sind Objekte, die Aktionen kapseln, die von Receivern ausgeführt werden sollen. |
| Invoker | ufo.automator.puppeteer.AppPuppeteer |
Die Basisklasse für den Invoker in UFO. Invoker sind Objekte, die Commands zum Ausführen durch Receiver auslösen. |
Der Vorteil der Verwendung des Command-Design-Musters im Agent-Framework besteht darin, dass es die Entkopplung von Sender und Empfänger der Aktion ermöglicht. Diese Entkopplung ermöglicht es dem Agenten, Aktionen auf verschiedenen Objekten auszuführen, ohne die Details des Objekts oder der auszuführenden Aktion zu kennen, was den Agenten flexibler und erweiterbarer für neue Aktionen macht.
Empfänger
Der Receiver ist eine zentrale Komponente in der Automator-Anwendung, die Aktionen auf der Anwendung ausführt. Er stellt Funktionalitäten zur Interaktion mit der Anwendung und zur Ausführung der Aktion bereit. Alle verfügbaren Aktionen werden mit der Klasse ReceiverManager registriert.
Sie finden die Referenz für eine grundlegende Receiver-Klasse unten.
Basen: ABC
Die abstrakte Receiver-Schnittstelle.
command_registry property
Ruft die Befehlsregistrierung ab.
supported_command_names property
Ruft die Liste der Befehlsnamen ab.
register(command_class) classmethod
Dekorator zum Registrieren der Zustandsklasse beim Zustandsmanager.
| Parameter |
|
|---|
| Rückgabe |
|
|---|
Quellcode in automator/basic.py
46 47 48 49 50 51 52 53 54 | |
register_command(command_name, command)
Zur Befehlsregistrierung hinzufügen.
| Parameter |
|
|---|
Quellcode in automator/basic.py
24 25 26 27 28 29 30 31 | |
self_command_mapping()
Ruft die Zuordnung von Befehl zu Receiver ab.
Quellcode in automator/basic.py
40 41 42 43 44 | |
Befehl
Der Command ist eine spezifische Aktion, die der Receiver auf der Anwendung ausführen kann. Er kapselt die Funktion und die Parameter, die zur Ausführung der Aktion erforderlich sind. Die Klasse Command ist eine Basisklasse für alle Commands in der Automator-Anwendung.
Sie finden die Referenz für eine grundlegende Command-Klasse unten.
Basen: ABC
Die abstrakte Command-Schnittstelle.
Initialisiert den Befehl.
| Parameter |
|
|---|
Quellcode in automator/basic.py
67 68 69 70 71 72 73 | |
execute() abstractmethod
Führt den Befehl aus.
Quellcode in automator/basic.py
75 76 77 78 79 80 | |
redo()
Wiederholt den Befehl.
Quellcode in automator/basic.py
88 89 90 91 92 | |
undo()
Macht den Befehl rückgängig.
Quellcode in automator/basic.py
82 83 84 85 86 | |
Hinweis
Jeder Befehl muss mit einem spezifischen Receiver registriert werden, um ausgeführt zu werden, indem der Dekorator register_command verwendet wird. Zum Beispiel: @ReceiverExample.register class CommandExample(CommandBasic): ...
Invoker (AppPuppeteer)
Der AppPuppeteer spielt die Rolle des Invokers in der Automator-Anwendung. Er löst die Ausführung von Befehlen durch die Receiver aus. Der AppPuppeteer stattet den AppAgent mit der Fähigkeit aus, mit den UI-Steuerelementen der Anwendung zu interagieren. Er bietet Funktionalitäten, um Aktionszeichenfolgen in spezifische Aktionen zu übersetzen und auszuführen. Alle verfügbaren Aktionen werden im Puppeteer mit der Klasse ReceiverManager registriert.
Sie finden die Implementierung der Klasse AppPuppeteer in der Datei ufo/automator/puppeteer.py, und ihre Referenz ist unten dargestellt.
Die Klasse für den App-Puppeteer zur Automatisierung der App in der Windows-Umgebung.
Initialisiert den App-Puppeteer.
| Parameter |
|
|---|
Quellcode in automator/puppeteer.py
22 23 24 25 26 27 28 29 30 31 32 | |
full_path property
Ruft den vollständigen Pfad des Prozesses ab. Funktioniert nur für COM-Receiver.
| Rückgabe |
|
|---|
add_command(command_name, params, *args, **kwargs)
Fügt den Befehl zur Befehlswarteschlange hinzu.
| Parameter |
|
|---|
Quellcode in automator/puppeteer.py
94 95 96 97 98 99 100 101 102 103 | |
close()
Schließt die App. Funktioniert nur für COM-Receiver.
Quellcode in automator/puppeteer.py
145 146 147 148 149 150 151 | |
create_command(command_name, params, *args, **kwargs)
Erstellt den Befehl.
| Parameter |
|
|---|
Quellcode in automator/puppeteer.py
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | |
execute_all_commands()
Führt alle Befehle in der Befehlswarteschlange aus.
| Rückgabe |
|
|---|
Quellcode in automator/puppeteer.py
82 83 84 85 86 87 88 89 90 91 92 | |
execute_command(command_name, params, *args, **kwargs)
Führt den Befehl aus.
| Parameter |
|
|---|
| Rückgabe |
|
|---|
Quellcode in automator/puppeteer.py
68 69 70 71 72 73 74 75 76 77 78 79 80 | |
get_command_queue_length()
Ruft die Länge der Befehlswarteschlange ab.
| Rückgabe |
|
|---|
Quellcode in automator/puppeteer.py
105 106 107 108 109 110 | |
get_command_string(command_name, params) staticmethod
Generiert eine Funktionsaufrufzeichenfolge.
| Parameter |
|
|---|
| Rückgabe |
|
|---|
Quellcode in automator/puppeteer.py
153 154 155 156 157 158 159 160 161 162 163 164 165 | |
get_command_types(command_name)
Ruft die Befehlstypen ab.
| Parameter |
|
|---|
| Rückgabe |
|
|---|
Quellcode in automator/puppeteer.py
53 54 55 56 57 58 59 60 61 62 63 64 65 66 | |
save()
Speichert den aktuellen Zustand der App. Funktioniert nur für COM-Receiver.
Quellcode in automator/puppeteer.py
124 125 126 127 128 129 130 | |
save_to_xml(file_path)
Speichert den aktuellen Zustand der App als XML. Funktioniert nur für COM-Receiver.
| Parameter |
|
|---|
Quellcode in automator/puppeteer.py
132 133 134 135 136 137 138 139 140 141 142 143 | |
Receiver Manager
Der ReceiverManager verwaltet alle Receiver und Befehle in der Automator-Anwendung. Er bietet Funktionalitäten zur Registrierung und zum Abrufen von Receivern und Befehlen. Er ist eine ergänzende Komponente zum AppPuppeteer.
Die Klasse für den Receiver-Manager.
Initialisiert den Receiver-Manager.
Quellcode in automator/puppeteer.py
175 176 177 178 179 180 181 182 183 | |
com_receiver property
Ruft den COM-Receiver ab.
| Rückgabe |
|
|---|
receiver_factory_registry property
Ruft die Receiver-Factory-Registrierung ab.
| Rückgabe |
|
|---|
receiver_list property
Ruft die Receiver-Liste ab.
| Rückgabe |
|
|---|
create_api_receiver(app_root_name, process_name)
Ruft den API-Receiver ab.
| Parameter |
|
|---|
Quellcode in automator/puppeteer.py
208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 | |
create_ui_control_receiver(control, application)
Erstellt den UI-Controller.
| Parameter |
|
|---|
| Rückgabe |
|
|---|
Quellcode in automator/puppeteer.py
185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 | |
get_receiver_from_command_name(command_name)
Ruft den Receiver anhand des Befehlsnamens ab.
| Parameter |
|
|---|
| Rückgabe |
|
|---|
Quellcode in automator/puppeteer.py
235 236 237 238 239 240 241 242 243 244 | |
register(receiver_factory_class) classmethod
Dekorator zum Registrieren der Receiver-Factory-Klasse beim Receiver-Manager.
| Parameter |
|
|---|
| Rückgabe |
|
|---|
Quellcode in automator/puppeteer.py
276 277 278 279 280 281 282 283 284 285 286 287 288 289 | |
Weitere Details finden Sie in der spezifischen Dokumentation für jede Komponente und Klasse im Automator-Modul.