openmanus 代码分析 #2 - agent classes
根据你提供的 agent
目录下各个类的信息,下面是对应的 PlantUML 代码,用于绘制类图展示这些类之间的关系:
@startuml
' 定义抽象基类
abstract class BaseAgent {
+ name: str
+ description: Optional[str]
+ system_prompt: Optional[str]
+ next_step_prompt: Optional[str]
+ llm: LLM
+ memory: Memory
+ state: AgentState
+ max_steps: int
+ current_step: int
+ duplicate_threshold: int
+ initialize_agent(): BaseAgent
+ state_context(new_state: AgentState): ContextManager
+ update_memory(role: ROLE_TYPE, content: str, **kwargs): None
+ run(request: Optional[str] = None): str
+ abstract step(): str
+ handle_stuck_state(): None
+ is_stuck(): bool
+ messages: List[Message]
+ messages.setter(value: List[Message]): None
}
' 定义其他代理类
class ToolCallAgent {
+ name: str
+ description: str
+ system_prompt: str
+ next_step_prompt: str
+ available_tools: ToolCollection
+ tool_choices: TOOL_CHOICE_TYPE
+ special_tool_names: List[str]
+ tool_calls: List[ToolCall]
+ max_steps: int
+ max_observe: Optional[Union[int, bool]]
+ think(): bool
+ act(): str
+ execute_tool(command: ToolCall): str
+ _handle_special_tool(name: str, result: Any, **kwargs): None
+ _should_finish_execution(**kwargs): bool
+ _is_special_tool(name: str): bool
}
class PlanningAgent {
+ name: str
+ description: str
+ system_prompt: str
+ next_step_prompt: str
+ available_tools: ToolCollection
+ tool_choices: TOOL_CHOICE_TYPE
+ special_tool_names: List[str]
+ tool_calls: List[ToolCall]
+ active_plan_id: Optional[str]
+ step_execution_tracker: Dict[str, Dict]
+ current_step_index: Optional[int]
+ max_steps: int
+ initialize_plan_and_verify_tools(): PlanningAgent
+ think(): bool
+ act(): str
+ get_plan(): str
+ run(request: Optional[str] = None): str
+ update_plan_status(tool_call_id: str): None
+ _get_current_step_index(): Optional[int]
+ create_initial_plan(request: str): None
}
class Manus {
+ name: str
+ description: str
+ system_prompt: str
+ next_step_prompt: str
+ max_observe: int
+ max_steps: int
+ available_tools: ToolCollection
+ _handle_special_tool(name: str, result: Any, **kwargs): None
}
' 定义继承关系
ToolCallAgent --|> BaseAgent
PlanningAgent --|> ToolCallAgent
Manus --|> ToolCallAgent
@enduml
代码解释:
-
抽象基类
BaseAgent
:- 包含了代理的核心属性和方法,如名称、描述、提示信息、状态管理、内存管理和执行控制等。
step
方法被定义为抽象方法,需要子类实现。
-
ToolCallAgent
类:- 继承自
BaseAgent
,增强了工具/函数调用的功能。 - 包含了工具调用的相关属性和方法,如
think
、act
和execute_tool
等。
- 继承自
-
PlanningAgent
类:- 继承自
ToolCallAgent
,用于执行规划任务。 - 包含了规划流程的相关属性和方法,如
initialize_plan_and_verify_tools
、get_plan
和create_initial_plan
等。
- 继承自
-
Manus
类:- 继承自
ToolCallAgent
,可能是一个通用的代理类,具有特定的工具和功能。
- 继承自
-
继承关系:
- 使用
--|>
表示继承关系,展示了各个类之间的层次结构。
- 使用
你可以将上述 PlantUML 代码复制到 PlantUML 编辑器(如 PlantText、Visual Studio Code 的 PlantUML 扩展等)中,即可生成相应的类图。