📷 [图片 token=KYx3br0ueo9g0axOLKVcTr7NnKe(未能下载,见飞书原文)]

前言

关键代码:SuperBizAgent/src/main/java/org/example/service/AiOpsService.java

📷 [图片 token=LwtAbnjmHo7qrwxHl6acnYEonmd(未能下载,见飞书原文)]

流程梳理

运维Agent的核心目标是 规划->执行->评估->调整。整体流程就是三个步骤:

  1. Planer:拆解排查步骤

  2. Executer:执行计划第一步

  3. Replaner:评估结果并调整计划

📷 [图片 token=I7jFbBmF7oxsfOxyoYScsNNtnNh(未能下载,见飞书原文)]

实战

创建Plan、Executer Agent

  1. 首先我们先使用Spring AI创建两个ReAct类型的Agent

  2. Replanner可以创建新的Agent,也可以复用Plan Agent。因为他们两个做的事情都是规划,我们代码简单点,复用Plan

/**
 * 构建 Planner Agent
 */
private ReactAgent buildPlannerAgent(DashScopeChatModel chatModel, ToolCallback[] toolCallbacks) {
    return ReactAgent.builder()
            .name("planner_agent")
            .description("负责拆解告警、规划与再规划步骤")
            .model(chatModel)
            .systemPrompt(buildPlannerPrompt())
            .methodTools(buildMethodToolsArray())
            .tools(toolCallbacks)
            .outputKey("planner_plan")
            .build();
}

/**
 * 构建 Executor Agent
 */
private ReactAgent buildExecutorAgent(DashScopeChatModel chatModel, ToolCallback[] toolCallbacks) {
    return ReactAgent.builder()
            .name("executor_agent")
            .description("负责执行 Planner 的首个步骤并及时反馈")
            .model(chatModel)
            .systemPrompt(buildExecutorPrompt())
            .methodTools(buildMethodToolsArray())
            .tools(toolCallbacks)
            .outputKey("executor_feedback")
            .build();
}

构建 Supervisor Agent

Plan- Execute设计模式本质上就是多个Agent进行协作,这里我们使用框架里的Supervisor来完成。

Multi-agent:https://java2ai.com/docs/frameworks/agent-framework/advanced/multi-agent

📷 [图片 token=FawUbTdQyoQhIIxFV3acuWUyn4g(未能下载,见飞书原文)]

使用框架的Supervisor Agent能力,可以自动的帮助我们管理Plan Agent和Executor Agent之间的执行扭转

// 构建 Supervisor Agent
SupervisorAgent supervisorAgent = SupervisorAgent.builder()
        .name("ai_ops_supervisor")
        .description("负责调度 Planner 与 Executor 的多 Agent 控制器")
        .model(chatModel)
        .systemPrompt(buildSupervisorSystemPrompt())
        .subAgents(List.of(plannerAgent, executorAgent))
        .build();

// 执行
String taskPrompt = "你是企业级 SRE,接到了自动化告警排查任务。请结合工具调用,执行**规划→执行→再规划**的闭环,并最终按照固定模板输出《告警分析报告》。禁止编造虚假数据,如连续多次查询失败需诚实反馈无法完成的原因。";
return supervisorAgent.invoke(taskPrompt);
        

Plan Agent Prompt

/**
 * 构建 Planner Agent 系统提示词
 */
private String buildPlannerPrompt() {
    return """
你是 Planner Agent,同时承担 Replanner 角色,负责:
1. 读取当前输入任务 {input} 以及 Executor 的最近反馈 {executor_feedback}。
2. 分析 Prometheus 告警、日志、内部文档等信息,制定可执行的下一步步骤。
3. 在执行阶段,输出 JSON,包含 decision (PLAN|EXECUTE|FINISH)、step 描述、预期要调用的工具、以及必要的上下文。
4. 调用任何腾讯云日志/主题相关工具时,region 参数必须使用连字符格式(如 ap-guangzhou),若不确定请省略以使用默认值。
5. 严格禁止编造数据,只能引用工具返回的真实内容;如果连续 3 次调用同一工具仍失败或返回空结果,需停止该方向并在最终报告的结论部分说明"无法完成"的原因。

## 最终报告输出要求(CRITICAL)

当 decision=FINISH 时,你必须:
1. **不要输出 JSON 格式**
2. **直接输出完整的 Markdown 格式报告文本**
3. **报告必须严格遵循以下模板**:

告警分析报告

        """;

}


## Executor Agent Prompt

```java
/**
 * 构建 Executor Agent 系统提示词
 */
private String buildExecutorPrompt() {
    return """
你是 Executor Agent,负责读取 Planner 最新输出 {planner_plan},只执行其中的第一步。
- 确认步骤所需的工具与参数,尤其是 region 参数要使用连字符格式(ap-guangzhou);若 Planner 未给出则使用默认区域。
- 调用相应的工具并收集结果,如工具返回错误或空数据,需要将失败原因、请求参数一并记录,并停止进一步调用该工具(同一工具失败达到 3 次时应直接返回 FAILED)。
- 将日志、指标、文档等证据整理成结构化摘要,标注对应的告警名称或资源,方便 Planner 填充"告警根因分析 / 处理方案执行"章节。
- 以 JSON 形式返回执行状态、证据以及给 Planner 的建议,写入 executor_feedback,严禁编造未实际查询到的内容。

输出示例:
{
  "status": "SUCCESS",
  "summary": "近1小时未见 error 日志,仅有 info",
  "evidence": "...",
  "nextHint": "建议转向高占用进程"
}
            """;
}

Supervisor Agent Prompt

/**
 * 构建 Supervisor Agent 系统提示词
 */
private String buildSupervisorSystemPrompt() {
    return """
你是 AI Ops Supervisor,负责调度 planner_agent 与 executor_agent:
1. 当需要拆解任务或重新制定策略时,调用 planner_agent。
2. 当 planner_agent 输出 decision=EXECUTE 时,调用 executor_agent 执行第一步。
3. 根据 executor_agent 的反馈,评估是否需要再次调用 planner_agent,直到 decision=FINISH。
4. FINISH 后,确保向最终用户输出完整的《告警分析报告》,格式必须严格为:
   告警分析报告\n---\n# 告警处理详情\n## 活跃告警清单\n## 告警根因分析N\n## 处理方案执行N\n## 结论。
5. 若步骤涉及腾讯云日志/主题工具,请确保使用连字符区域 ID(ap-guangzhou 等),或省略 region 以采用默认值。
6. 如果发现 Planner/Executor 在同一方向连续 3 次调用工具仍失败或没有数据,必须终止流程,直接输出"任务无法完成"的报告,明确告知失败原因,严禁凭空编造结果。

只允许在 planner_agent、executor_agent 与 FINISH 之间做出选择。

""";
}

总结

通过上面的分析,我们已经了解了Planner、Executer、Replanner的作用和相关prompt。但是你可能会有一种意犹未尽的感觉,因为我们在这里全部都是调用sdk,实际代码只是组装而已。不要慌,我们再回过头来看看Plan-Execute-Replan的流程。

  1. 首先用Planner Agent生成了一份计划

  2. 将计划发送给Executor Agent,让Executor按照计划执行

  3. 每次执行完,都将计划和执行结果一起发送给Replanner评估

  4. Replanner评估后决定修改计划还是决定已完成

其实 Planner、Executer、Replanner 之间的交互逻辑很简单,就是上面的4个步骤,只要你搞明白了这4个步骤。我们自己用代码实现这个workflow流程也很简单,其核心就是流程控制,与Plan对象在整个流程中的传递而已。

所以无需担心,面试会问到的所有细节,在面试攻略篇章全部为你准备好了。(想想gorm,jdbc这些数据库sdk,我们也只是使用而已,会用即可,只要八股文准备的好,无需紧张~)

📷 [图片 token=KsjGbgtTOo3Pdlxlex6cb7lVn0c(未能下载,见飞书原文)]