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

代码解释:

  1. 抽象基类 BaseAgent

    • 包含了代理的核心属性和方法,如名称、描述、提示信息、状态管理、内存管理和执行控制等。
    • step 方法被定义为抽象方法,需要子类实现。
  2. ToolCallAgent

    • 继承自 BaseAgent,增强了工具/函数调用的功能。
    • 包含了工具调用的相关属性和方法,如 thinkactexecute_tool 等。
  3. PlanningAgent

    • 继承自 ToolCallAgent,用于执行规划任务。
    • 包含了规划流程的相关属性和方法,如 initialize_plan_and_verify_toolsget_plancreate_initial_plan 等。
  4. Manus

    • 继承自 ToolCallAgent,可能是一个通用的代理类,具有特定的工具和功能。
  5. 继承关系

    • 使用 --|> 表示继承关系,展示了各个类之间的层次结构。

你可以将上述 PlantUML 代码复制到 PlantUML 编辑器(如 PlantText、Visual Studio Code 的 PlantUML 扩展等)中,即可生成相应的类图。

posted @ 2025-03-17 10:24  julian-zhang  阅读(59)  评论(0)    收藏  举报