多 Agent
phi-agent 支持生成子 Agent 进行并行任务执行。此功能由 multi-agent feature flag 控制,需主动开启。
概述
多 Agent 允许主 Agent 生成子 Agent,每个子 Agent 独立拥有自己的 system prompt 和工具集 - 与父 Agent 及兄弟 Agent 并发运行 - 通过消息(而非共享状态)通信 - 按名称/路径追踪,便于观测
启用后,Agent 不会无条件生成子 Agent。 它会根据任务复杂度自行判断:简单问题直接回答,只有涉及多个独立维度(如同时搜索和审核)时,Agent 才选择并行生成。这是 LLM 基于 6 个工具定义做出的自主决策,不是硬编码的规则。
你可以通过 system prompt 引导这一行为,例如:
- 鼓励并行:"对于涉及多个独立信息源的问题,使用子 Agent 并行搜索"
- 限制使用:"分析类任务不要用多 Agent,直接处理即可"
- 定义角色:"将研究类任务委派给 searcher,综合类任务委派给 analyst"
启用方式
或运行时:
工具
启用 multi-agent 后,注册 6 个工具:
| 工具 | 说明 |
|---|---|
spawn_agent |
创建子 Agent,指定名称和 system prompt |
send_message |
发送消息,不触发执行 |
followup_task |
发送任务并立即触发执行 |
wait_agent |
阻塞等待子 Agent 的消息 |
list_agents |
列出所有活跃的子 Agent |
close_agent |
终止指定子 Agent |
Agent 生命周期
sequenceDiagram
participant P as 父 Agent
participant S as searcher
participant A as analyst
P->>S: spawn_agent("searcher")
P->>S: followup_task("查找 X")
activate S
Note over S: 独立工作...
P->>A: spawn_agent("analyst")
P->>A: followup_task("审核发现")
activate A
Note over A: 独立工作...
S-->>P: wait_agent("searcher")
deactivate S
A-->>P: wait_agent("analyst")
deactivate A
P->>S: close_agent("searcher")
P->>A: close_agent("analyst")
配置
use agent_works::multi_agent::MultiAgentConfig;
let config = MultiAgentConfig {
max_agents: 10, // 最大并发子 Agent 数
max_depth: 3, // 最大嵌套深度
agent_timeout_secs: 300, // 子 Agent 空闲超时
..Default::default()
};
let builder = base_agent_builder(llm_client)
.with_multi_agent(config);
禁用
即使 feature 已启用,也可移除多 Agent 工具:
多 Agent 不是什么
- 不是工作流引擎 — 没有 DAG 执行、条件分支图。Agent 自行决定何时生成、委托什么。
- 不是 LangGraph — 没有图编译器、检查点。子 Agent 由父 Agent 在运行时管理。
- 不是预设拓扑 — 不硬编码"管理者/工作者"或"监督者"模式。你通过 system prompt 定义结构。
需要复杂的工作流编排时,在应用层将 phi-agent 与 LangGraph 或 Temporal 结合使用。