AppAgent 👾
Ein AppAgent ist dafür verantwortlich, Aktionen auf den ausgewählten Anwendungen iterativ auszuführen, bis die Aufgabe erfolgreich innerhalb einer bestimmten Anwendung abgeschlossen ist. Der AppAgent wird vom HostAgent erstellt, um eine Teilaufgabe innerhalb einer Round zu erfüllen. Der AppAgent ist für die Ausführung der notwendigen Aktionen innerhalb der Anwendung verantwortlich, um die Anfrage des Benutzers zu erfüllen. Der AppAgent verfügt über die folgenden Funktionen
- ReAct mit der Anwendung - Der
AppAgentinteragiert rekursiv mit der Anwendung in einem Workflow aus Beobachtung->Gedanke->Aktion und nutzt die multimodalen Fähigkeiten von visuellen Sprachmodellen (VLMs), um die Anwendungs-UI zu verstehen und die Anfrage des Benutzers zu erfüllen. - Verbesserung des Verständnisses - Der
AppAgentwird durch Retrieval Augmented Generation (RAG) aus heterogenen Quellen, einschließlich externer Wissensdatenbanken und Demonstrationsbibliotheken, erweitert, was den Agenten zu einem Anwendungs-"Experten" macht. - Vielseitiges Fähigkeitenset - Der
AppAgentist mit einer Vielzahl von Fähigkeiten ausgestattet, um eine umfassende Automatisierung zu unterstützen, wie z. B. Maus, Tastatur, native APIs und "Copilot".
Tipp
Wie Sie den AppAgent mit externen Wissensdatenbanken und Demonstrationsbibliotheken erweitern können, finden Sie in der Dokumentation Reinforcing AppAgent.
Wir zeigen das Framework des AppAgent im folgenden Diagramm
AppAgent Eingabe
Um mit der Anwendung zu interagieren, erhält der AppAgent die folgenden Eingaben
| Input | Beschreibung | Typ |
|---|---|---|
| Benutzeranfrage | Die Anfrage des Benutzers in natürlicher Sprache. | String |
| Teilaufgabe | Die Beschreibung der Teilaufgabe, die vom AppAgent ausgeführt werden soll und die vom HostAgent zugewiesen wurde. |
String |
| Aktuelle Anwendung | Der Name der Anwendung, mit der interagiert werden soll. | String |
| Steuerinformationen | Index, Name und Steuerungsart der verfügbaren Steuerelemente in der Anwendung. | Liste von Wörterbüchern |
| Screenshots der Anwendung | Screenshots der Anwendung, einschließlich eines sauberen Screenshots, eines annotierten Screenshots mit beschrifteten Steuerelementen und eines Screenshots mit einem Rechteck um das ausgewählte Steuerelement im vorherigen Schritt (optional). | Liste von Zeichenketten |
| Vorherige Teilaufgaben | Die vorherigen Teilaufgaben und ihr Abschlussstatus. | Liste von Zeichenketten |
| Vorheriger Plan | Der vorherige Plan für die folgenden Schritte. | Liste von Zeichenketten |
| HostAgent-Nachricht | Die Nachricht vom HostAgent zur Erledigung der Teilaufgabe. |
String |
| Abgerufene Informationen | Die abgerufenen Informationen aus externen Wissensdatenbanken oder Demonstrationsbibliotheken. | String |
| Blackboard | Der gemeinsame Speicherbereich zum Speichern und Teilen von Informationen zwischen den Agenten. | Dictionary |
Unten sehen Sie ein Beispiel für den annotierten Anwendungsscreenshot mit beschrifteten Steuerelementen. Dies folgt dem Set-of-Mark-Paradigma.
Durch die Verarbeitung dieser Eingaben bestimmt der AppAgent die notwendigen Aktionen, um die Anfrage des Benutzers innerhalb der Anwendung zu erfüllen.
Tipp
Ob der saubere Screenshot und der annotierte Screenshot verkettet werden sollen, kann im Feld CONCAT_SCREENSHOT in der Datei config_dev.yaml konfiguriert werden.
Tipp
Ob der Screenshot mit einem Rechteck um das ausgewählte Steuerelement im vorherigen Schritt enthalten sein soll, kann im Feld INCLUDE_LAST_SCREENSHOT in der Datei config_dev.yaml konfiguriert werden.
AppAgent Ausgabe
Mit den bereitgestellten Eingaben generiert der AppAgent die folgenden Ausgaben
| Ausgabe | Beschreibung | Typ |
|---|---|---|
| Beobachtung | Die Beobachtung der aktuellen Anwendungsscreenshots. | String |
| Gedanke | Der logische Denkprozess des AppAgent. |
String |
| ControlLabel | Der Index des ausgewählten Steuerelements zur Interaktion. | String |
| ControlText | Der Name des ausgewählten Steuerelements zur Interaktion. | String |
| Funktion | Die Funktion, die auf dem ausgewählten Steuerelement ausgeführt werden soll. | String |
| Args | Die für die Funktionsausführung erforderlichen Argumente. | Liste von Zeichenketten |
| Status | Der Status des Agenten, zugeordnet dem AgentState. |
String |
| Plan | Der Plan für die folgenden Schritte nach der aktuellen Aktion. | Liste von Zeichenketten |
| Kommentar | Zusätzliche Kommentare oder Informationen für den Benutzer. | String |
| Screenshot speichern | Das Flag zum Speichern des Screenshots der Anwendung im blackboard für zukünftige Referenz. |
Boolean |
Unten sehen Sie ein Beispiel für die Ausgabe des AppAgent
{
"Observation": "Application screenshot",
"Thought": "Logical reasoning process",
"ControlLabel": "Control index",
"ControlText": "Control name",
"Function": "Function name",
"Args": ["arg1", "arg2"],
"Status": "AgentState",
"Plan": ["Step 1", "Step 2"],
"Comment": "Additional comments",
"SaveScreenshot": true
}
Info
Die Ausgabe des AppAgent wird von LLMs als JSON-Objekt formatiert und kann mit der Methode json.loads in Python geparst werden.
AppAgent Zustand
Der Zustand des AppAgent wird von einer Zustandsmaschine verwaltet, die die nächste auszuführende Aktion basierend auf dem aktuellen Zustand bestimmt, wie im Modul ufo/agents/states/app_agent_states.py definiert. Die Zustände umfassen
| Status | Beschreibung |
|---|---|
WEITER |
Hauptausführungsschleife; wertet aus, welche Teilaufgaben bereit zum Starten oder Fortsetzen sind. |
ZUWEISEN |
Wählt einen verfügbaren Anwendungsprozess aus und startet den entsprechenden AppAgent. |
AUSSTEHEND |
Wartet auf Benutzereingaben zur Auflösung von Mehrdeutigkeiten oder zur Sammlung zusätzlicher Aufgabenparameter. |
BEENDEN |
Alle Teilaufgaben abgeschlossen; bereinigt Agenteninstanzen und schließt den Sitzungsstatus ab. |
FEHLER |
Tritt in den Wiederherstellungs- oder Abbruchmodus bei nicht behebbarem Fehler. |
Das Zustandsmaschinendiagramm für den AppAgent ist unten dargestellt
Der AppAgent durchläuft diese Zustände, um die notwendigen Aktionen innerhalb der Anwendung auszuführen und die vom HostAgent zugewiesene Teilaufgabe zu erfüllen.
Wissenserweiterung
Der AppAgent wird durch Retrieval Augmented Generation (RAG) aus heterogenen Quellen, einschließlich externer Wissensdatenbanken und Demonstrationsbibliotheken, erweitert. Der AppAgent nutzt dieses Wissen, um sein Verständnis der Anwendung zu verbessern und aus Demonstrationen zu lernen, um seine Leistung zu steigern.
Lernen aus Hilfedokumenten
Der Benutzer kann dem AppAgent in der Datei config.yaml Hilfedokumente zur Verfügung stellen, um dessen Verständnis der Anwendung zu verbessern und dessen Leistung zu steigern.
Tipp
Details zur Konfiguration finden Sie in der Dokumentation.
Tipp
Sie können sich auch hier darauf beziehen, wie Sie dem AppAgent Hilfedokumente zur Verfügung stellen.
Im AppAgent ruft er build_offline_docs_retriever auf, um einen Retriever für Hilfedokumente zu erstellen, und verwendet retrived_documents_prompt_helper, um den Prompt für den AppAgent zu erstellen.
Lernen aus Bing-Suche
Da Hilfedokumente möglicherweise nicht alle Informationen abdecken oder die Informationen veraltet sein können, kann der AppAgent auch die Bing-Suche nutzen, um die neuesten Informationen abzurufen. Sie können die Bing-Suche aktivieren und die Suchmaschine in der Datei config.yaml konfigurieren.
Tipp
Details zur Konfiguration finden Sie in der Dokumentation.
Tipp
Sie können sich auch hier auf die Implementierung der Bing-Suche im AppAgent beziehen.
Im AppAgent ruft er build_online_search_retriever auf, um einen Bing-Such-Retriever zu erstellen, und verwendet retrived_documents_prompt_helper, um den Prompt für den AppAgent zu erstellen.
Lernen aus Selbstdemonstrationen
Sie können erfolgreiche Aktionsbahnen im AppAgent speichern, um aus Selbstdemonstrationen zu lernen und seine Leistung zu verbessern. Nach Abschluss einer session wird der AppAgent den Benutzer fragen, ob die Aktionsbahnen für zukünftige Referenzen gespeichert werden sollen. Sie können die Nutzung von Selbstdemonstrationen in der Datei config.yaml konfigurieren.
Tipp
Details zur Konfiguration finden Sie in der Dokumentation.
Tipp
Sie können sich auch hier auf die Implementierung von Selbstdemonstrationen im AppAgent beziehen.
Im AppAgent ruft er build_experience_retriever auf, um einen Retriever für Selbstdemonstrationen zu erstellen, und verwendet rag_experience_retrieve, um die Demonstration für den AppAgent abzurufen.
Lernen aus menschlichen Demonstrationen
Zusätzlich zu Selbstdemonstrationen können Sie dem AppAgent auch menschliche Demonstrationen zur Verfügung stellen, um seine Leistung zu verbessern, indem Sie das in das Windows-Betriebssystem integrierte Tool Schritt-Aufzeichner verwenden. Der AppAgent lernt aus den menschlichen Demonstrationen, um seine Leistung zu verbessern und eine bessere Personalisierung zu erzielen. Die Nutzung menschlicher Demonstrationen kann in der Datei config.yaml konfiguriert werden.
Tipp
Details zur Konfiguration finden Sie in der Dokumentation.
Tipp
Sie können sich auch hier auf die Implementierung menschlicher Demonstrationen im AppAgent beziehen.
Im AppAgent ruft er build_human_demonstration_retriever auf, um einen Retriever für menschliche Demonstrationen zu erstellen, und verwendet rag_experience_retrieve, um die Demonstration für den AppAgent abzurufen.
Fähigkeiten zur Automatisierung
Der AppAgent ist mit einem vielseitigen Fähigkeitenset ausgestattet, um eine umfassende Automatisierung innerhalb der Anwendung durch den Aufruf der Methode create_puppeteer_interface zu unterstützen. Die Fähigkeiten umfassen
| Fähigkeit | Beschreibung |
|---|---|
| UI-Automatisierung | Nachahmung von Benutzerinteraktionen mit den UI-Steuerelementen der Anwendung mithilfe der UI Automation und der Win32 API. |
| Native API | Zugriff auf die native API der Anwendung, um spezifische Funktionen und Aktionen auszuführen. |
| In-App-Agent | Nutzung des In-App-Agenten zur Interaktion mit den internen Funktionen und Features der Anwendung. |
Durch die Nutzung dieser Fähigkeiten kann der AppAgent effizient mit der Anwendung interagieren und die Anfrage des Benutzers erfüllen. Weitere Details finden Sie in der Automator-Dokumentation und im Code im Modul ufo/automator.
Referenz
Basiert auf: BasicAgent
Die AppAgent-Klasse, die die Interaktion mit der Anwendung verwaltet.
Initialisiert den AppAgent. :name: Der Name des Agenten.
| Parameter |
|
|---|
Quellcode in agents/agent/app_agent.py
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | |
default_state property
Ruft den Standardzustand ab.
mode property
Ruft den Modus der Sitzung ab.
status_manager property
Ruft den Statusmanager ab.
build_experience_retriever(db_path)
Erstellt den Erfahrung-Retriever.
| Parameter |
|
|---|
| Rückgabe |
|
|---|
Quellcode in agents/agent/app_agent.py
448 449 450 451 452 453 454 455 456 | |
build_human_demonstration_retriever(db_path)
Erstellt den Retriever für menschliche Demonstrationen.
| Parameter |
|
|---|
| Rückgabe |
|
|---|
Quellcode in agents/agent/app_agent.py
458 459 460 461 462 463 464 465 466 | |
build_offline_docs_retriever()
Erstellt den Retriever für Offline-Dokumente.
Quellcode in agents/agent/app_agent.py
430 431 432 433 434 435 436 | |
build_online_search_retriever(request, top_k)
Erstellt den Retriever für Online-Suche.
| Parameter |
|
|---|
Quellcode in agents/agent/app_agent.py
438 439 440 441 442 443 444 445 446 | |
context_provision(request='')
Stellt den Kontext für den App-Agenten bereit.
| Parameter |
|
|---|
Quellcode in agents/agent/app_agent.py
468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 | |
create_puppeteer_interface()
Erstellt die Puppeteer-Schnittstelle zur Automatisierung der App.
| Rückgabe |
|
|---|
Quellcode in agents/agent/app_agent.py
394 395 396 397 398 399 | |
demonstration_prompt_helper(request)
Ruft die Beispiele und Tipps für den AppAgent mithilfe des Demonstrations-Retrievers ab.
| Parameter |
|
|---|
| Rückgabe |
|
|---|
Quellcode in agents/agent/app_agent.py
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 | |
external_knowledge_prompt_helper(request, offline_top_k, online_top_k)
Ruft externes Wissen ab und erstellt den Prompt.
| Parameter |
|
|---|
| Rückgabe |
|
|---|
Quellcode in agents/agent/app_agent.py
256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 | |
get_prompter(is_visual, main_prompt, example_prompt, api_prompt, app_root_name)
Ruft den Prompt für den Agenten ab.
| Parameter |
|
|---|
| Rückgabe |
|
|---|
Quellcode in agents/agent/app_agent.py
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | |
message_constructor(dynamic_examples, dynamic_knowledge, image_list, control_info, prev_subtask, plan, request, subtask, current_application, host_message, blackboard_prompt, last_success_actions, include_last_screenshot)
Konstruiert die Prompt-Nachricht für den AppAgent.
| Parameter |
|
|---|
| Rückgabe |
|
|---|
Quellcode in agents/agent/app_agent.py
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 | |
print_response(response_dict, print_action=True)
Gibt die Antwort aus.
| Parameter |
|
|---|
Quellcode in agents/agent/app_agent.py
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 | |
process(context)
Verarbeitet den Agenten.
| Parameter |
|
|---|
Quellcode in agents/agent/app_agent.py
378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 | |
process_comfirmation()
Verarbeitet die Benutzerbestätigung.
| Rückgabe |
|
|---|
Quellcode in agents/agent/app_agent.py
401 402 403 404 405 406 407 408 409 410 411 412 413 414 | |
rag_demonstration_retrieve(request, demonstration_top_k)
Ruft Demonstrationsbeispiele für die Benutzeranfrage ab.
| Parameter |
|
|---|
| Rückgabe |
|
|---|
Quellcode in agents/agent/app_agent.py
344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 | |
rag_experience_retrieve(request, experience_top_k)
Ruft Erfahrungsbeispiele für die Benutzeranfrage ab.
| Parameter |
|
|---|
| Rückgabe |
|
|---|
Quellcode in agents/agent/app_agent.py
307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 | |