Agentenzustand
Die Klasse State ist eine grundlegende Komponente des UFO-Agenten-Frameworks. Sie repräsentiert den aktuellen Zustand des Agenten und bestimmt die nächste Aktion und den nächsten Agenten zur Bearbeitung der Anfrage. Jeder Agent hat eine spezifische Menge von Zuständen, die das Verhalten und den Arbeitsablauf des Agenten definieren.
AgentStatus
Die Menge der Zustände für einen Agenten wird in der Klasse AgentStatus definiert.
class AgentStatus(Enum):
"""
The status class for the agent.
"""
ERROR = "ERROR"
FINISH = "FINISH"
CONTINUE = "CONTINUE"
FAIL = "FAIL"
PENDING = "PENDING"
CONFIRM = "CONFIRM"
SCREENSHOT = "SCREENSHOT"
Jeder Agent implementiert seine eigene Menge von AgentStatus, um die Zustände des Agenten zu definieren.
AgentStateManager
Die Klasse AgentStateManager verwaltet die Zuordnung von Zuständen von einem String zur entsprechenden Zustandsklasse. Jede Zustandsklasse wird mit dem Dekorator register beim AgentStateManager registriert, um die Zustandsklasse einem bestimmten Agenten zuzuordnen, z.B.
@AgentStateManager.register
class SomeAgentState(AgentState):
"""
The state class for the some agent.
"""
Tipp
Beispiele, wie die Zustandsklasse für den AppAgent registriert wird, finden Sie in der Datei ufo/agents/states/app_agent_state.py.
Unten sehen Sie die grundlegende Struktur der Klasse AgentStateManager.
class AgentStateManager(ABC, metaclass=SingletonABCMeta):
"""
A abstract class to manage the states of the agent.
"""
_state_mapping: Dict[str, Type[AgentState]] = {}
def __init__(self):
"""
Initialize the state manager.
"""
self._state_instance_mapping: Dict[str, AgentState] = {}
def get_state(self, status: str) -> AgentState:
"""
Get the state for the status.
:param status: The status string.
:return: The state object.
"""
# Lazy load the state class
if status not in self._state_instance_mapping:
state_class = self._state_mapping.get(status)
if state_class:
self._state_instance_mapping[status] = state_class()
else:
self._state_instance_mapping[status] = self.none_state
state = self._state_instance_mapping.get(status, self.none_state)
return state
def add_state(self, status: str, state: AgentState) -> None:
"""
Add a new state to the state mapping.
:param status: The status string.
:param state: The state object.
"""
self.state_map[status] = state
@property
def state_map(self) -> Dict[str, AgentState]:
"""
The state mapping of status to state.
:return: The state mapping.
"""
return self._state_instance_mapping
@classmethod
def register(cls, state_class: Type[AgentState]) -> Type[AgentState]:
"""
Decorator to register the state class to the state manager.
:param state_class: The state class to be registered.
:return: The state class.
"""
cls._state_mapping[state_class.name()] = state_class
return state_class
@property
@abstractmethod
def none_state(self) -> AgentState:
"""
The none state of the state manager.
"""
pass
AgentState
Jede Zustandsklasse erbt von der Klasse AgentState und muss die Methode handle implementieren, um die Aktion im Zustand zu verarbeiten. Zusätzlich werden die Methoden next_state und next_agent verwendet, um den nächsten Zustand und den nächsten Agenten für den Übergang zu bestimmen. Bitte finden Sie unten die Referenz für die Klasse State in UFO.
Basen: ABC
Die abstrakte Klasse für den Agentenzustand.
agent_class() abstractmethod classmethod
Die Klasse des Agenten.
| Rückgabe |
|
|---|
Quellcode in agents/states/basic.py
165 166 167 168 169 170 171 172 | |
handle(agent, context=None) abstractmethod
Bearbeitet den Agenten für den aktuellen Schritt.
| Parameter |
|
|---|
Quellcode in agents/states/basic.py
122 123 124 125 126 127 128 129 | |
is_round_end() abstractmethod
Prüft, ob die Runde endet.
| Rückgabe |
|
|---|
Quellcode in agents/states/basic.py
149 150 151 152 153 154 155 | |
is_subtask_end() abstractmethod
Prüft, ob die Teilaufgabe endet.
| Rückgabe |
|
|---|
Quellcode in agents/states/basic.py
157 158 159 160 161 162 163 | |
name() abstractmethod classmethod
Der Klassenname des Zustands.
| Rückgabe |
|
|---|
Quellcode in agents/states/basic.py
174 175 176 177 178 179 180 181 | |
next_agent(agent) abstractmethod
Ruft den Agenten für den nächsten Schritt ab.
| Parameter |
|
|---|
| Rückgabe |
|
|---|
Quellcode in agents/states/basic.py
131 132 133 134 135 136 137 138 | |
next_state(agent) abstractmethod
Ruft den Zustand für den nächsten Schritt ab.
| Parameter |
|
|---|
| Rückgabe |
|
|---|
Quellcode in agents/states/basic.py
140 141 142 143 144 145 146 147 | |
Tipp
Die Zustandsdiagramme für den HostAgent und den AppAgent sind in ihren jeweiligen Dokumenten aufgeführt.
Tipp
Eine Round ruft die Methoden handle, next_state und next_agent des aktuellen Zustands auf, um die Benutzeranfrage zu verarbeiten und den nächsten Zustand und Agenten zur Bearbeitung der Anfrage zu bestimmen, und orchestriert die Agenten zur Ausführung der notwendigen Aktionen.