Solon v3.9.0

team - TeamAgent 配置与构建

</> markdown
2026年1月24日 下午10:06:54

1、TeamAgent 配置参考(可参考 TeamConfig 字段)

分类参数名称类型默认值说明
身份定义nameString/团队唯一标识,影响 TraceKey(__name)及内部存储。
titleString/视觉标题,多用于可视化 UI 或日志报表的友好显示。
descriptionString/核心字段。定义团队职责,供上级团队调度时识别能力。
决策大脑chatModelChatModel/充当主管(Supervisor),负责理解需求、分派任务与总结。
modelOptionsConsumer/用于精细控制主管模型的参数(如调低 Temperature 以稳健调
systemPromptTeamSystemPrompt英文模板定义团队协作的提示词骨架,包含成员画像与工作流规范。
组织结构agentMapMap/团队成员列表,存储所有参与协作的子智能体(Agent)。
protocolTeamProtocolHIERARCHICAL协作灵魂。决定任务是层级派发、顺序执行还是竞争投标。
执行控制maxTurnsint8总轮数限制。全队协作的最大轮次,防止成员间无限“踢皮球”。
maxRetriesint3主管模型决策失败或解析异常时的自动重试次数。
retryDelayMslong1000L两次重试决策之间的时间间隔(毫秒)。
扩展定制graphAdjusterConsumer/进阶项。允许在协议生成的默认执行图基础上微调链路。
interceptorsList<TeamInterceptor>/生命周期拦截器,用于监控思考过程、工具调用等过程。
toolsMap<String, FunctionTool>/工具。
toolContextMap<String,Object>/工具调用时共享的上下文数据(如数据库连接、用户信息)。
skillsList<Skill>/技能。

关键配置点补充说明

  • 关于职责描述 (description):在 TeamAgent 中,描述不仅是给人看的,更是给“主管模型”看的。一个清晰的描述能让主管更准确地判断何时该把任务交给这个团队处理。
  • 关于协作协议 (protocol):这是 TeamConfig 最强大的地方。只需更改此参数,你就能将团队从“经理负责制 (HIERARCHICAL)”一键切换为“流水线模式 (SEQUENTIAL)”,无需重写业务逻辑。
  • 关于最大轮数 (maxTurns):在多 Agent 协作中,Agent 之间可能会产生反复确认或死循环。该参数是全队的“保险丝”,确保系统不会因为无限对话而耗尽 Token。

2、TeamAgent 构建

  • 基础版:顺序流水线 (Sequential)。

适用于逻辑固定的线性任务,例如:翻译 $\rightarrow$ 润色 $\rightarrow$ 总结。这种模式下,Agent 按照添加顺序依次执行。

// 创建一个简单的翻译润色团队
TeamAgent simpleTeam = TeamAgent.of(chatModel)
        .name("translator_group")
        .description("负责多语言翻译与内容优化的团队")
        // 1. 添加成员(注意描述的重要性)
        .agentAdd(ReActAgent.of(chatModel).name("translator").description("将中文翻译为英文").build())
        .agentAdd(ReActAgent.of(chatModel).name("polisher").description("润色英文表达,使其地道").build())
        // 2. 设置协议为顺序执行
        .protocol(TeamProtocols.SEQUENTIAL)
        .build();

// 执行:任务会自动从 translator 流转到 polisher
String result = simpleTeam.prompt("你好,很高兴认识你").call().getContent();
  • 进阶版:层级专家团队 (Hierarchical)

这是一个模拟真实公司架构的复杂示例。由一个主管(Supervisor)根据任务需求,自主调度下属的“专家智能体”,并包含重试策略、拦截监控及性能调优。

// 创建一个全能的技术支持团队
TeamAgent techTeam = TeamAgent.of(chatModel)
        // --- 1. 身份与职责定义 ---
        .name("tech_support_center")
        .title("技术支持专家中心")
        .description("负责处理复杂的客户技术问题,包括查询数据库和排查日志")

        // --- 2. 招募专家成员 (Members) ---
        .agentAdd(ReActAgent.of(chatModel)
                .name("db_expert")
                .description("数据库专家,擅长编写 SQL 查询用户信息")
                .defaultToolAdd(dbTool)
                .build())
        .agentAdd(ReActAgent.of(chatModel)
                .name("log_analyser")
                .description("日志分析专家,负责从服务器日志中提取异常")
                .defaultToolAdd(logTool)
                .build())

        // --- 3. 配置决策大脑(主管)的运行策略 ---
        .protocol(TeamProtocols.HIERARCHICAL) // 层级调度模式
        .maxTurns(12)               // 允许全队最多协作 12 轮,处理深度问题
        .retryConfig(3, 2000L)                // 决策失败自动重试
        .modelOptions(options -> {
            options.setTemperature(0.1f);     // 调低主管温度,让任务分发更严谨
        })

        // --- 4. 插入定制化逻辑 ---
        .defaultInterceptorAdd(new TeamInterceptor() {
            @Override
            public boolean shouldAgentContinue(TeamTrace trace, Agent agent) {
                System.out.println("🔄 任务转办:从 [" + trace.getLastAgentName() + "] 移交给 [" + agent.name() + "]");
                return true;
            }
        })
        
        // --- 5. 手动微调计算图(高级项) ---
        .graphAdjuster(spec -> {
            // 可以在此处对生成的 Graph 进行链路微调
            // 例如:强制某个节点之后必须经过人工确认节点(预留扩展)
        })
        .build();

// 执行调用:主管会分析问题,决定先找 db_expert 查数据,再找 log_analyser 分析情况
String finalAnswer = techTeam.call("用户 ID 为 9527 的反馈登录失败,请排查原因并给出建议。");

TeamInterceptor 接口参考

public interface TeamInterceptor extends AgentInterceptor, FlowInterceptor, ChatInterceptor {

    // --- [维度 1:团队级 (Team Level)] ---

    /**
     * 团队协作开始
     */
    default void onTeamStart(TeamTrace trace) {}

    /**
     * 团队协作结束
     */
    default void onTeamEnd(TeamTrace trace) {}


    // --- [维度 2:决策级 (Supervisor Level)] ---

    /**
     * 决策准入校验(主管发起思考前)
     * * @return true: 继续执行; false: 熔断并中止协作
     */
    default boolean shouldSupervisorContinue(TeamTrace trace) {
        return true;
    }

    /**
     * 模型请求前置(LLM 调用前)
     * <p>常用于动态调整 Request 参数(如 Temperature, MaxTokens 等)。</p>
     */
    default void onModelStart(TeamTrace trace, ChatRequestDesc req) {}

    /**
     * 模型响应后置(LLM 返回后,解析前)
     * <p>常用于内容安全审计或原始 Token 统计。</p>
     */
    default void onModelEnd(TeamTrace trace, ChatResponse resp) {}

    /**
     * 决策结果输出(指令解析后)
     * * @param decision 经解析确定的目标 Agent 名称或终结指令
     */
    default void onSupervisorDecision(TeamTrace trace, String decision) {}


    // --- [维度 3:成员级 (Agent Level)] ---

    /**
     * 成员执行准入校验(Agent 运行前)
     * * @param agent 即将运行的智能体
     * @return true: 允许运行; false: 跳过并回滚至决策层
     */
    default boolean shouldAgentContinue(TeamTrace trace, Agent agent) {
        return true;
    }

    /**
     * 成员执行结束
     */
    default void onAgentEnd(TeamTrace trace, Agent agent) {}
}



public interface FlowInterceptor {
    /**
     * 拦截执行
     *
     * @param invocation 调用者
     */
    default void doFlowIntercept(FlowInvocation invocation) throws FlowException {
        invocation.invoke();
    }

    /**
     * 节点运行开始时
     */
    default void onNodeStart(FlowContext context, Node node) {

    }

    /**
     * 节点运行结束时
     */
    default void onNodeEnd(FlowContext context, Node node) {

    }
}