team - TeamAgen 关键属性
2026年1月15日 下午6:14:31
1、name、title、description、systemPrompt
name,description,systemPrompt 是极为关键的属性。
| 属性 | 默认值 | 描述 |
|---|---|---|
| name | react_agent | 加入团队协作时,身份标识(必须团队内唯一) |
| title | / | 标题方便管理显示 |
| description | / | 加入团队协作时,给告诉团队我是谁?干什么的?(单独使用,可省略)。支持 #{xxx} 模板形式 |
| systemPrompt | TeamSystemPromptCn | 定义自己我是谁,干什么的?支持 #{xxx} 模板形式 |
示例:
// 1. 底层团队:研发小组 (dev_team)
TeamAgent devTeam = TeamAgent.of(chatModel)
.name("dev_team")
.description("研发小组。输入需求,直接给出代码实现。完成后必须回复:[FINISH] 研发已完成")
.addAgent(createSimpleAgent("Coder", "负责写代码"))
.maxTotalIterations(2) // 严格限制子团队迭代次数
.build();
// 2. 顶层团队:项目管理组 (project_team)
TeamAgent projectTeam = TeamAgent.of(chatModel)
.name("project_team")
.systemPrompt(TeamSystemPrompt.builder()
.role("你是一个严谨的项目主管。")
.instruction("1. 先指派 Analyst 进行分析;" +
"2. 拿到分析结果后指派 dev_team 执行;" +
"3. 当 dev_team 回复完成后,直接输出 [FINISH]。")
.build())
.addAgent(createSimpleAgent("Analyst", "需求分析师"))
.addAgent(devTeam) // 嵌套子团队
.maxTotalIterations(5)
.build();
systemPrompt 的两个属性:
| 属性 | 默认值 | 描述 |
|---|---|---|
| role | 角色定义 | 表达:我是什么人?如:我是个程序员 |
| instruction | 核心指令 | 表达:我要注意什么?或做什么? |
2、systemPrompt(TeamSystemPrompt) 接口
package org.noear.solon.ai.agent.team;
import org.noear.solon.core.util.SnelUtil;
import org.noear.solon.flow.FlowContext;
import org.noear.solon.lang.Preview;
import java.util.Locale;
import java.util.function.Function;
/**
* Team 协作模式系统提示词提供者
*
* <p>该接口负责为团队主管 (Supervisor) 构造其决策大脑的核心提示词(System Prompt)。</p>
* <p>设计上采用分段构建模式,将管理逻辑与业务逻辑解耦:</p>
* <ul>
* <li><b>Role (身份)</b>: 定义主管的人格设定,决定决策的严谨度与管理风格。</li>
* <li><b>Instruction (约束)</b>: 注入协作协议指令(如:任务指派逻辑、状态转换约束)及业务准则。</li>
* <li><b>Dynamic Rendering</b>: 基于 Snel 模板引擎,支持在执行期从 {@link FlowContext} 动态注入业务变量。</li>
* </ul>
*/
@Preview("3.8.1")
public interface TeamSystemPrompt {
/**
* 获取提示词关联的语言区域
*
* @return 默认返回 {@link Locale#CHINESE}
*/
Locale getLocale();
/**
* 为当前上下文生成并渲染最终的系统提示词
*
* <p>执行流:{@link #getSystemPrompt(TeamTrace)} (获取模板) -> {@link SnelUtil#render} (变量填充)。</p>
*
* @param trace 协作轨迹,提供团队配置信息、成员名录及当前协作状态
* @param context 流程上下文,用于渲染模板中的动态业务数据
* @return 最终交付给 LLM 的完整提示词文本
*/
default String getSystemPromptFor(TeamTrace trace, FlowContext context) {
return SnelUtil.render(getSystemPrompt(trace), context.model());
}
/**
* 获取未渲染的原始系统提示词模板
*
* <p>通常由 {@link #getRole(TeamTrace)}、{@link #getInstruction(TeamTrace)} 以及协议特定的引导词组合而成。</p>
*
* @param trace 协作轨迹
* @return 包含模板占位符的原始字符串
*/
String getSystemPrompt(TeamTrace trace);
/**
* 获取角色定义片段
*
* <p>描述主管的职能身份。例如:“你是一个资深研发专家,负责协调多名开发与测试人员完成任务”。</p>
*
* @param trace 协作轨迹
* @return 角色设定文案
*/
String getRole(TeamTrace trace);
/**
* 获取核心指令片段
*
* <p>描述主管的行动逻辑。包含输出格式约束(如 JSON/XML)、协议指令(如指派逻辑)及特定的业务红线。</p>
*
* @param trace 协作轨迹
* @return 指令约束文案
*/
String getInstruction(TeamTrace trace);
/**
* 获取构建器实例
*/
static Builder builder() {
return TeamSystemPromptCn.builder();
}
/**
* TeamSystemPrompt 构建器
*/
static interface Builder {
/**
* 设置静态角色描述
*/
default Builder role(String role) {
return role(trace -> role);
}
/**
* 设置静态业务指令
*/
default Builder instruction(String instruction) {
return instruction(trace -> instruction);
}
/**
* 设置动态角色提供逻辑
* <p>支持根据团队成员组成或当前协作深度动态调整主管的人格表现。</p>
*/
Builder role(Function<TeamTrace, String> roleProvider);
/**
* 设置动态业务指令逻辑
* <p>支持根据执行状态(如:重试次数、已消耗 Token)实时调整任务约束。</p>
*/
Builder instruction(Function<TeamTrace, String> instructionProvider);
/**
* 构建系统提示词实例
*/
TeamSystemPrompt build();
}
}