将一个大任务分给多个 Agent 好处:

  1. 每个代理更专注于其核心任务,因此性能更高
  2. 分离记忆可以减少每一步输入 token 的数量,从而降低延迟和成本。

Smolagents 中的 managed_agents 参数允许一个 agent 管理多个其他 agents。

下面一个 agent,它的任务是执行 GoogleSearchToolVisitWebpagecalculate_cargo_travel_time

...
model = InferenceClientModel(
    "Qwen/Qwen2.5-Coder-32B-Instruct", provider="together", max_tokens=8096
)

web_agent = CodeAgent(
    model=model,
    tools=[
        GoogleSearchTool(provider="serper"),
        VisitWebpageTool(),
        calculate_cargo_travel_time,
    ],
    name="web_agent",
    description="Browses the web to find information",
    verbosity_level=0,
    max_steps=10,
)
...

下面的 agent 作用是管理 web_agent:

...
manager_agent = CodeAgent(
    model=InferenceClientModel("deepseek-ai/DeepSeek-R1", provider="together", max_tokens=8096),
    tools=[calculate_cargo_travel_time],
    managed_agents=[web_agent],
    additional_authorized_imports=[
        "geopandas",
        "plotly",
        "shapely",
        "json",
        "pandas",
        "numpy",
    ],
    planning_interval=5,
    verbosity_level=2,
    final_answer_checks=[check_reasoning_and_plot],
    max_steps=15,
)
...

通过 manager_agent.visualize() 可视化,两个 Agent 是如何协同工作的。