HostAgent 🤖
Der HostAgent übernimmt drei Hauptaufgaben
-
Aufgabendekomposition. Ausgehend von der natürlichsprachlichen Eingabe des Benutzers identifiziert der
HostAgentdas zugrunde liegende Aufgabenziel und zerlegt es in einen abhängigkeitsgeordneten Unteraufgabengraphen. -
Anwendungslebenszyklus-Management. Für jede Unteraufgabe prüft der
HostAgentdie Metadaten der Systemprozesse (über UIA-APIs), um festzustellen, ob die Zielanwendung läuft. Wenn nicht, startet er das Programm und registriert es beim Runtime. -
AppAgentInstanziierung. DerHostAgentstartet den entsprechendenAppAgentfür jede aktive Anwendung und stellt ihm den Aufgabenkontext, Speicherreferenzen und relevante Toolchains (z. B. APIs, Dokumentation) zur Verfügung. -
Aufgabenplanung und -steuerung. Der globale Ausführungsplan wird in eine endliche Zustandsmaschine (FSM) serialisiert, die es dem
HostAgentermöglicht, die Ausführungsreihenfolge zu erzwingen, Fehler zu erkennen und Abhängigkeiten zwischen Agenten aufzulösen. -
Gemeinsame Zustandskommunikation. Der
HostAgentliest von und schreibt in ein globales Whiteboard, das die Kommunikation zwischen Agenten und die Systembeobachtbarkeit für Debugging und Wiedergabe ermöglicht.
Unten sehen Sie ein Diagramm, das die Architektur des HostAgent und seine Interaktionen mit anderen Komponenten veranschaulicht
Der HostAgent aktiviert seinen Processor, um die Anfrage des Benutzers zu verarbeiten und sie in Unteraufgaben zu zerlegen. Jede Unteraufgabe wird dann einem AppAgent zur Ausführung zugewiesen. Der HostAgent überwacht den Fortschritt der AppAgents und stellt die erfolgreiche Erledigung der Anfrage des Benutzers sicher.
HostAgent Eingabe
Der HostAgent empfängt die folgenden Eingaben
| Input | Beschreibung | Typ |
|---|---|---|
| Benutzeranfrage | Die Anfrage des Benutzers in natürlicher Sprache. | String |
| Anwendungsinformationen | Informationen über die vorhandenen aktiven Anwendungen. | Liste von Zeichenketten |
| Desktop-Screenshots | Screenshots des Desktops, um dem HostAgent Kontext zu geben. |
Bild |
| Vorherige Unteraufgaben | Die vorherigen Unteraufgaben und deren Abschlussstatus. | Liste von Zeichenketten |
| Vorheriger Plan | Der vorherige Plan für die folgenden Unteraufgaben. | Liste von Zeichenketten |
| Blackboard | Der gemeinsame Speicherbereich zum Speichern und Teilen von Informationen zwischen den Agenten. | Dictionary |
Durch die Verarbeitung dieser Eingaben bestimmt der HostAgent die geeignete Anwendung zur Erfüllung der Benutzeranfrage und orchestriert die AppAgents zur Ausführung der notwendigen Aktionen.
HostAgent Ausgabe
Mit den bereitgestellten Eingaben generiert der HostAgent die folgenden Ausgaben
| Ausgabe | Beschreibung | Typ |
|---|---|---|
| Beobachtung | Die Beobachtung aktueller Desktop-Screenshots. | String |
| Gedanke | Der logische Denkprozess des HostAgent. |
String |
| Aktuelle Unteraufgabe | Die aktuelle Unteraufgabe, die vom AppAgent ausgeführt werden soll. |
String |
| Nachricht | Die Nachricht, die an den AppAgent zur Erledigung der Unteraufgabe gesendet werden soll. |
String |
| ControlLabel | Der Index der ausgewählten Anwendung zur Ausführung der Unteraufgabe. | String |
| ControlText | Der Name der ausgewählten Anwendung zur Ausführung der Unteraufgabe. | String |
| Plan | Der Plan für die folgenden Unteraufgaben nach der aktuellen Unteraufgabe. | Liste von Zeichenketten |
| Status | Der Status des Agenten, zugeordnet dem AgentState. |
String |
| Kommentar | Zusätzliche Kommentare oder Informationen für den Benutzer. | String |
| Fragen | Die Fragen, die dem Benutzer zur zusätzlichen Information gestellt werden. | Liste von Zeichenketten |
| Bash | Der Bash-Befehl, der vom HostAgent ausgeführt werden soll. Er kann zum Öffnen von Anwendungen oder zur Ausführung von Systembefehlen verwendet werden. |
String |
Unten ist ein Beispiel für die Ausgabe des HostAgent
{
"Observation": "Desktop screenshot",
"Thought": "Logical reasoning process",
"Current Sub-Task": "Sub-task description",
"Message": "Message to AppAgent",
"ControlLabel": "Application index",
"ControlText": "Application name",
"Plan": ["Sub-task 1", "Sub-task 2"],
"Status": "AgentState",
"Comment": "Additional comments",
"Questions": ["Question 1", "Question 2"],
"Bash": "Bash command"
}
Info
Die Ausgabe des HostAgent wird von LLMs als JSON-Objekt formatiert und kann von der Methode json.loads in Python geparst werden.
HostAgent Zustand
Der HostAgent durchläuft verschiedene Zustände, wie im Modul ufo/agents/states/host_agent_states.py definiert. Die Zustände umfassen
| Status | Beschreibung |
|---|---|
FORTSETZEN |
Standardzustand für Aktionsplanung und -ausführung. |
AUSSTEHEND |
Aufgerufen für sicherheitskritische Aktionen (z. B. zerstörerische Operationen); erfordert Benutzerbestätigung. |
BEENDEN |
Aufgabe abgeschlossen; Ausführung endet. |
FEHLGESCHLAGEN |
Irrecoverable Fehler erkannt (z. B. Anwendungsabsturz, Berechtigungsfehler). |
Das Zustandsdiagramm für den HostAgent ist unten dargestellt
Der HostAgent wechselt zwischen diesen Zuständen basierend auf der Anfrage des Benutzers, den Anwendungsinformationen und dem Fortschritt der AppAgents bei der Ausführung der Unteraufgaben.
Aufgabendekomposition
Nach Erhalt der Benutzeranfrage zerlegt der HostAgent diese in Unteraufgaben und weist jede Unteraufgabe einem AppAgent zur Ausführung zu. Der HostAgent ermittelt die geeignete Anwendung zur Erfüllung der Benutzeranfrage basierend auf den Anwendungsinformationen und der Benutzeranfrage. Er orchestriert dann die AppAgents, um die notwendigen Aktionen zur Erledigung der Unteraufgaben auszuführen. Wir zeigen den Prozess der Aufgabendekomposition in der folgenden Abbildung
Erstellung und Registrierung von AppAgents
Wenn der HostAgent die Notwendigkeit eines neuen AppAgent zur Erfüllung einer Unteraufgabe feststellt, erstellt er eine Instanz des AppAgent und registriert ihn beim HostAgent, indem er die Methode create_subagent aufruft
def create_subagent(
self,
agent_type: str,
agent_name: str,
process_name: str,
app_root_name: str,
is_visual: bool,
main_prompt: str,
example_prompt: str,
api_prompt: str,
*args,
**kwargs,
) -> BasicAgent:
"""
Create an SubAgent hosted by the HostAgent.
:param agent_type: The type of the agent to create.
:param agent_name: The name of the SubAgent.
:param process_name: The process name of the app.
:param app_root_name: The root name of the app.
:param is_visual: The flag indicating whether the agent is visual or not.
:param main_prompt: The main prompt file path.
:param example_prompt: The example prompt file path.
:param api_prompt: The API prompt file path.
:return: The created SubAgent.
"""
app_agent = self.agent_factory.create_agent(
agent_type,
agent_name,
process_name,
app_root_name,
is_visual,
main_prompt,
example_prompt,
api_prompt,
*args,
**kwargs,
)
self.appagent_dict[agent_name] = app_agent
app_agent.host = self
self._active_appagent = app_agent
return app_agent
Der HostAgent weist dann die Unteraufgabe dem AppAgent zur Ausführung zu und überwacht dessen Fortschritt.
Referenz
Basiert auf: BasicAgent
Die HostAgent-Klasse ist der Manager der AppAgents.
Initialisiere den HostAgent. :name: Der Name des Agenten.
| Parameter |
|
|---|
Quellcode in agents/agent/host_agent.py
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 | |
blackboard property
Hole das Whiteboard.
default_state property
Hole den Standardzustand.
status_manager Eigenschaft
Ruft den Statusmanager ab.
sub_agent_amount property
Hole die Anzahl der Sub-Agenten.
| Rückgabe |
|
|---|
create_app_agent(application_window_name, application_root_name, request, mode)
Erstelle den App-Agenten für den Host-Agenten.
| Parameter |
|
|---|
| Rückgabe |
|
|---|
Quellcode in agents/agent/host_agent.py
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 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 | |
create_puppeteer_interface()
Erstelle die Puppeteer-Schnittstelle zur Automatisierung der App.
| Rückgabe |
|
|---|
Quellcode in agents/agent/host_agent.py
209 210 211 212 213 214 | |
create_subagent(agent_type, agent_name, process_name, app_root_name, *args, **kwargs)
Erstelle einen SubAgent, der vom HostAgent gehostet wird.
| Parameter |
|
|---|
| Rückgabe |
|
|---|
Quellcode in agents/agent/host_agent.py
103 104 105 106 107 108 109 110 111 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 | |
get_active_appagent()
Hole den aktiven App-Agenten.
| Rückgabe |
|
|---|
Quellcode in agents/agent/host_agent.py
146 147 148 149 150 151 | |
get_prompter(is_visual, main_prompt, example_prompt, api_prompt)
Ruft den Prompt für den Agenten ab.
| Parameter |
|
|---|
| Rückgabe |
|
|---|
Quellcode in agents/agent/host_agent.py
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | |
message_constructor(image_list, os_info, plan, prev_subtask, request, blackboard_prompt)
Konstruiert die Nachricht.
| Parameter |
|
|---|
| Rückgabe |
|
|---|
Quellcode in agents/agent/host_agent.py
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 | |
print_response(response_dict)
Gibt die Antwort aus.
| Parameter |
|
|---|
Quellcode in agents/agent/host_agent.py
300 301 302 303 304 305 306 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 343 344 345 346 347 348 349 | |
process(context)
Verarbeitet den Agenten.
| Parameter |
|
|---|
Quellcode in agents/agent/host_agent.py
198 199 200 201 202 203 204 205 206 207 | |
process_comfirmation()
TODO: Die Bestätigung verarbeiten.
Quellcode in agents/agent/host_agent.py
294 295 296 297 298 | |