12.7 Agent 团队与池化管理

workflow-pro 提供 Agent 团队组织(`AgentTeam`)、连接池管理(`AgentPool`)和动态路由(`DynamicRouter`)能力,支持多 Agent 系统中的角色划分、负载均衡和智能调度。

AgentTeam — 角色与能力注册

`AgentTeam` 将 Agent 按角色和能力分组,支持按能力查找 Agent。

use rust_agent_workflow_pro::{AgentTeam, AgentRole, AgentCapability};

let mut team = AgentTeam::new("code-review-team");

// 定义角色
let code_role = AgentRole {
    name: "code_expert".into(),
    description: "代码审查专家".into(),
    capabilities: vec![
        AgentCapability { name: "rust".into(), tags: vec!["async".into(), "tokio".into()] },
        AgentCapability { name: "python".into(), tags: vec!["data".into()] },
    ],
};

let review_role = AgentRole {
    name: "reviewer".into(),
    description: "代码审查员".into(),
    capabilities: vec![
        AgentCapability { name: "review".into(), tags: vec![] },
    ],
};

// 注册 Agent
team.register_agent(rust_expert, code_role);
team.register_agent(review_agent, review_role);

// 按能力查找
let experts = team.find_agent_by_capability("rust");
// → 返回所有 capability.name == "rust" 或 capability.tags 含 "rust" 的 Agent

AgentCapability

pub struct AgentCapability {
    pub name: String,       // 能力名称(如 "rust", "code_review")
    pub tags: Vec<String>,  // 附加标签(如 ["async", "backend"])
}

查找策略

- 精确匹配 `capability.name` - 模糊匹配 `capability.tags` - 无匹配时返回所有已注册 Agent

AgentPool — 连接池与健康检查

`AgentPool` 管理 Agent 实例池,支持连接复用、心跳检测和健康状态跟踪。

use rust_agent_workflow_pro::{AgentPool, AgentPoolConfig, AgentHealth};

let config = AgentPoolConfig {
    min_size: 1,
    max_size: 10,
    idle_timeout: Duration::from_secs(300),
    heartbeat_interval: Duration::from_secs(30),
};

let pool = AgentPool::new(config);

// 添加 Agent
pool.add_agent(agent_a);
pool.add_agent(agent_b);

// 获取健康 Agent
if let Some(agent) = pool.acquire() {
    // 使用 agent...
    // 自动记录 last_used、request_count
}

// 定时心跳(检查空闲超时)
pool.heartbeat();

// 查看健康状态
let status: Vec<(String, AgentHealth)> = pool.health_status();

健康状态

| 状态 | 含义 | |------|------| | `Healthy` | 上次使用未超过 idle_timeout | | `Degraded` | 空闲超时,可能需回收 | | `Unhealthy` | 不可用 |

获取策略

`pool.acquire()` 优先返回 `Healthy` 状态的 Agent。如果无健康 Agent 可用,返回 `None`(合理回退至上层处理)。

PooledAgent 指标

每个池化 Agent 自动维护: - `last_used`:最后使用时间 - `health`:当前健康状态 - `request_count`:已处理的请求数

DynamicRouter — 能力路由

`DynamicRouter` 实现 `IEdgeCondition`,可附加在图边上按消息内容动态路由到匹配的 Agent。

use rust_agent_workflow_pro::DynamicRouter;

let router = DynamicRouter::new(
    vec![code_agent, writing_agent, search_agent],
    "code"  // capability_keyword
);

// 作为 IEdgeCondition 附加到边上
// 当消息内容(String)包含 "code" 时该边被激活
builder = builder.add_edge_with_condition(
    "source",
    "code_expert",
    Arc::new(router),
);

路由匹配基于 `AgentMetadata` 的以下字段: - `description`:Agent 功能描述 - `agent_type`:Agent 类型名(如 "ChatClientAgent") - `capability_tags`:能力标签列表