第七篇:AI Agent 如何自主规划任务?ReAct、Plan-and-Execute 与状态机实战

ReAct、Plan-and-Execute与工作流Agent怎么选?三种架构的成本、稳定性和适用场景 ReAct、Plan-and-Execute和工作流Agent经常被混为一谈,但三者在决策方式、模型调用次数、可预测性、恢复能力和开发成本上差异很大。本文以企业报表、客服查询和高风险审批为例,比较三种架构,并给出从任务类型、流程稳定度、工具风险和预算约束出发的选型方法 阅读详情

第七篇:AI Agent 如何自主规划任务?ReAct、Plan-and-Execute 与状态机实战

系列:《2026 可验证企业级 AI Agent 工程》
本文关键词:AI Agent、ReAct、Plan-and-Execute、状态机、任务规划、Spring AI

文章目录

前言

前面我们已经为 Agent 提供了 RAG、Memory 和 MCP 工具。

现在用户提出:

分析一号车间昨天能耗升高的原因。如果确认存在设备异常,就创建检修工单。

Agent 需要完成的并不是一次模型问答,而是一组相互依赖的任务:

识别“一号车间”
→ 查询车间能耗
→ 定位异常设备
→ 查询设备告警
→ 检索历史案例
→ 分析异常原因
→ 判断证据是否充分
→ 请求用户确认
→ 创建检修工单

这里会遇到几个关键问题:

  • Agent 如何拆解任务?
  • 如何选择下一步工具?
  • 工具失败后如何调整计划?
  • 如何避免无限循环?
  • 哪些步骤允许自主执行?
  • 如何从中断位置恢复?
  • 如何证明任务确实完成?

这就是 Agent Planning,即智能体任务规划。


一、Tool Calling 不等于 Agent

单次 Tool Calling 的流程通常是:

用户问题
→ 模型选择工具
→ 执行工具
→ 模型生成答案

例如:

用户:查询设备AC-001昨天的能耗。
模型:调用queryDeviceEnergy。

这是一次相对明确的工具调用。

复杂 Agent 则需要执行多轮决策:

用户目标
→ 拆解任务
→ 选择工具
→ 获取结果
→ 判断信息是否充分
→ 修改计划
→ 执行下一步
→ 验证最终结果

因此,一个完整 Agent 至少包含:

Model:负责理解和决策
Tools:负责执行外部操作
State:保存当前任务状态
Planner:制定计划
Executor:执行步骤
Evaluator:验证结果
Policy:约束权限与预算

大模型只是 Agent 的决策组件,而不是整个 Agent 系统。


二、三种常见规划模式

企业 Agent 通常采用三类规划模式:

模式特点适用场景
ReAct边思考边执行开放式查询、探索任务
Plan-and-Execute先规划再执行多步骤分析任务
状态机流程和转移明确审批、工单、高风险操作

它们并不是互斥关系。

生产系统更常见的组合是:

状态机控制主流程
+ Plan-and-Execute 拆解复杂目标
+ ReAct 完成局部探索

三、ReAct:边推理边行动

ReAct 来自 Reasoning and Acting。

它的基本循环是:

观察当前状态
→ 判断下一步行动
→ 调用工具
→ 获取观察结果
→ 再次判断

典型过程如下:

目标:
分析空压机AC-001昨天能耗升高的原因。

行动:
调用queryDeviceEnergy。

观察:
能耗比历史基线高23.7%。

行动:
调用queryAlarmHistory。

观察:
14:32出现排气温度高告警。

行动:
查询历史维修案例。

观察:
历史相似案例原因为冷却器堵塞。

结论:
当前异常可能与冷却系统效率下降有关。

1. ReAct 的优势

ReAct 不要求 Agent 一开始就掌握完整计划。

它可以根据工具返回结果动态调整:

如果能耗正常
→ 不再查询告警

如果能耗异常
→ 查询异常设备

如果存在告警
→ 检索告警相关故障案例

如果证据冲突
→ 补充查询实时运行数据

适合以下场景:

  • 问题路径不确定;
  • 需要探索多个数据源;
  • 工具结果会影响下一步;
  • 无法预先确定完整步骤。

2. ReAct 的问题

ReAct 也容易出现失控:

重复调用同一个工具
无意义地更换查询条件
检索轮数不断增加
忘记原始任务目标
在证据不足时提前结束
执行了不应自动执行的写操作

因此,ReAct 循环必须受到预算约束。


四、实现一个受控的 ReAct 循环

先定义 Agent 动作:

public enum ActionType {
    CALL_TOOL,
    ASK_USER,
    FINISH,
    ABORT
}

定义模型每轮必须返回的决策:

public record AgentDecision(
        ActionType actionType,
        String toolName,
        Map<String, Object> arguments,
        String userQuestion,
        String decisionSummary,
        String finalAnswer
) {
}

这里保存的是面向审计的简短决策摘要,而不是要求模型暴露完整内部推理过程。

定义执行状态:

public record AgentState(
        String taskId,
        String goal,
        List<ToolObservation> observations,
        Set<String> executedActionKeys,
        int currentStep,
        int maxSteps,
        long startedAt,
        long timeoutMillis,
        AgentStatus status
) {
}

执行循环:

public AgentResult run(AgentState state) {

    while (state.currentStep() < state.maxSteps()) {

        checkTimeout(state);

        AgentDecision decision =
                decisionService.decide(state);

        if (decision.actionType() == ActionType.FINISH) {
            return AgentResult.completed(
                    decision.finalAnswer()
            );
        }

        if (decision.actionType() == ActionType.ASK_USER) {
            return AgentResult.inputRequired(
                    decision.userQuestion(),
                    state
            );
        }

        if (decision.actionType() == ActionType.ABORT) {
            return AgentResult.failed(
                    decision.decisionSummary()
            );
        }

        String actionKey =
                generateActionKey(decision);

        if (state.executedActionKeys().contains(actionKey)) {
            return AgentResult.failed(
                    "检测到重复工具调用,任务已停止"
            );
        }

        ToolObservation observation =
                toolExecutor.execute(decision);

        state = stateUpdater.append(
                state,
                actionKey,
                observation
        );

        checkpointRepository.save(state);
    }

    return AgentResult.failed(
            "超过最大执行步骤:" + state.maxSteps()
    );
}

这里加入了四个关键限制:

最大执行步数
任务超时时间
重复动作检测
每步状态持久化

五、不要把完整思维链保存到数据库

Agent 系统需要可解释性,但可解释性不等于保存模型完整的 Chain of Thought。

更适合记录的是:

{
  "step": 3,
  "decision": "查询设备告警",
  "reasonSummary": "能耗较基线升高23.7%,需要确认是否存在同期故障",
  "tool": "queryAlarmHistory",
  "resultSummary": "发现1条排气温度高告警",
  "evidenceIds": [
    "ALARM-20260921-001"
  ]
}

这样既能支持审计,也能避免:

  • 保存冗长、不稳定的模型推理文本;
  • 将内部推理误认为业务事实;
  • 大量占用存储;
  • 泄露无关上下文和敏感信息。

企业需要的是可验证的决策轨迹:

输入是什么
选择了什么动作
调用了什么工具
获得了什么证据
最终结论是什么

六、Plan-and-Execute:先规划,再逐步执行

ReAct 每轮只决定下一步,容易缺少全局目标。

Plan-and-Execute 会先生成完整计划:

目标:分析一号车间昨日能耗异常并处理。

计划:
1. 查询车间昨日总能耗;
2. 与近七个工作日基线比较;
3. 定位贡献度最高的异常设备;
4. 查询异常设备同期告警;
5. 检索历史相似故障;
6. 形成诊断结论;
7. 请求用户确认;
8. 创建检修工单。

然后由 Executor 按步骤执行。

是

否

否

是

用户目标

Planner生成计划

Executor执行当前步骤

Evaluator验证结果

计划是否仍然有效

执行下一步

Replanner调整计划

全部完成

生成最终结果


七、定义结构化计划

不要让 Planner 返回一段不可解析的自然语言。

定义计划对象:

public record AgentPlan(
        String goal,
        List<PlanStep> steps,
        String successCriteria
) {
}

每个步骤:

public record PlanStep(
        String stepId,
        String description,
        String toolName,
        Map<String, Object> arguments,
        List<String> dependencies,
        StepRiskLevel riskLevel,
        StepStatus status
) {
}

风险等级:

public enum StepRiskLevel {
    READ_ONLY,
    ANALYSIS,
    WRITE,
    HIGH_RISK
}

计划示例:

{
  "goal": "分析一号车间昨日能耗异常",
  "successCriteria": "找到主要异常设备并给出有数据依据的原因",
  "steps": [
    {
      "stepId": "S1",
      "description": "查询车间总能耗",
      "toolName": "queryWorkshopEnergy",
      "dependencies": [],
      "riskLevel": "READ_ONLY",
      "status": "PENDING"
    },
    {
      "stepId": "S2",
      "description": "定位异常设备",
      "toolName": "queryDeviceEnergyContribution",
      "dependencies": ["S1"],
      "riskLevel": "ANALYSIS",
      "status": "PENDING"
    },
    {
      "stepId": "S3",
      "description": "查询异常设备告警",
      "toolName": "queryAlarmHistory",
      "dependencies": ["S2"],
      "riskLevel": "READ_ONLY",
      "status": "PENDING"
    }
  ]
}

结构化计划便于:

  • 校验工具是否存在;
  • 判断依赖是否满足;
  • 执行风险审查;
  • 计算成本预算;
  • 展示任务进度;
  • 中断后恢复。

八、使用 Spring AI 生成结构化计划

下面是一个简化的 Planner:

@Service
public class AgentPlanner {

    private final ChatClient chatClient;
    private final ToolRegistry toolRegistry;

    public AgentPlanner(
            ChatClient.Builder builder,
            ToolRegistry toolRegistry) {
        this.chatClient = builder.build();
        this.toolRegistry = toolRegistry;
    }

    public AgentPlan createPlan(
            String goal,
            UserContext userContext) {

        String availableTools =
                toolRegistry.describeAllowedTools(
                        userContext
                );

        return chatClient.prompt()
                .system("""
                        你是企业任务规划器。

                        请将用户目标拆分为可执行步骤。

                        规则:
                        1. 只能使用提供的工具;
                        2. 每一步只能执行一个明确动作;
                        3. 明确步骤依赖关系;
                        4. 写操作必须标记为WRITE;
                        5. 高风险操作必须标记为HIGH_RISK;
                        6. 不得将未知参数编造成确定值;
                        7. 信息不足时生成询问用户的步骤。
                        """)
                .user("""
                      用户目标:
                      {goal}

                      当前用户权限:
                      {permissions}

                      可用工具:
                      {tools}
                      """)
                .param("goal", goal)
                .param(
                        "permissions",
                        userContext.permissions()
                )
                .param("tools", availableTools)
                .call()
                .entity(AgentPlan.class);
    }
}

不同 Spring AI 版本的结构化输出 API 可能有所差异,应结合当前版本配置转换器和 Schema。

即使模型返回了 AgentPlan,也不能立即执行,必须先校验。


九、计划校验比计划生成更重要

模型生成的计划可能包含:

  • 不存在的工具;
  • 用户无权调用的工具;
  • 缺失参数;
  • 循环依赖;
  • 未经确认的写操作;
  • 超出预算的步骤;
  • 与用户目标无关的动作。

计划验证器:

@Component
public class PlanValidator {

    private static final int MAX_PLAN_STEPS = 12;

    private final ToolRegistry toolRegistry;
    private final PermissionService permissionService;

    public void validate(
            AgentPlan plan,
            UserContext userContext) {

        if (plan.steps().isEmpty()) {
            throw new IllegalArgumentException(
                    "执行计划不能为空"
            );
        }

        if (plan.steps().size() > MAX_PLAN_STEPS) {
            throw new IllegalArgumentException(
                    "计划步骤超过限制"
            );
        }

        Set<String> stepIds = plan.steps()
                .stream()
                .map(PlanStep::stepId)
                .collect(Collectors.toSet());

        for (PlanStep step : plan.steps()) {
            if (!toolRegistry.exists(step.toolName())) {
                throw new IllegalArgumentException(
                        "工具不存在:" + step.toolName()
                );
            }

            if (!permissionService.canUse(
                    userContext,
                    step.toolName())) {
                throw new AccessDeniedException(
                        "无权调用工具:" + step.toolName()
                );
            }

            if (!stepIds.containsAll(step.dependencies())) {
                throw new IllegalArgumentException(
                        "步骤依赖不存在:" + step.stepId()
                );
            }
        }

        detectCircularDependencies(plan);
    }
}

核心原则是:

模型负责提出计划,程序负责决定计划是否允许执行。


十、Executor 如何执行计划?

Executor 每次只查找依赖已经完成的步骤。

public Optional<PlanStep> findNextStep(
        AgentPlan plan) {

    Set<String> completedIds = plan.steps()
            .stream()
            .filter(step ->
                    step.status() == StepStatus.COMPLETED)
            .map(PlanStep::stepId)
            .collect(Collectors.toSet());

    return plan.steps()
            .stream()
            .filter(step ->
                    step.status() == StepStatus.PENDING)
            .filter(step ->
                    completedIds.containsAll(
                            step.dependencies()
                    ))
            .findFirst();
}

执行前进行风险判断:

public StepExecutionResult execute(
        PlanStep step,
        ExecutionContext context) {

    if (step.riskLevel() == StepRiskLevel.HIGH_RISK) {
        return StepExecutionResult.rejected(
                "高风险操作禁止Agent自动执行"
        );
    }

    if (step.riskLevel() == StepRiskLevel.WRITE
            && !context.hasValidConfirmation(step.stepId())) {
        return StepExecutionResult.inputRequired(
                "该步骤将修改业务数据,是否继续?"
        );
    }

    return toolExecutor.execute(
            step.toolName(),
            step.arguments(),
            context
    );
}

十一、为什么需要 Evaluator?

工具调用成功,不代表任务完成。

例如:

目标:找出能耗升高原因
工具结果:查询成功,返回100条能耗记录

技术上查询成功了,但仍未证明已经找到原因。

Evaluator 需要判断:

  • 当前步骤的目标是否完成;
  • 工具结果是否有效;
  • 数据质量是否合格;
  • 证据是否足够;
  • 是否出现冲突;
  • 是否需要补充查询;
  • 是否应该调整计划。

定义评估结果:

public record EvaluationResult(
        boolean stepCompleted,
        boolean evidenceSufficient,
        boolean replanRequired,
        List<String> missingInformation,
        List<String> evidenceIds,
        String summary
) {
}

评估时应尽量结合确定性规则。

例如:

public EvaluationResult evaluateEnergyQuery(
        DeviceEnergyResult result) {

    if (!"GOOD".equals(result.dataQuality())) {
        return new EvaluationResult(
                false,
                false,
                true,
                List.of("高质量能耗数据"),
                List.of(),
                "数据质量不足,需要更换数据源"
        );
    }

    return new EvaluationResult(
            true,
            true,
            false,
            List.of(),
            List.of(result.deviceId()),
            "能耗数据查询完成"
    );
}

可以通过代码判断的问题,不要全部交给大模型判断。


十二、什么时候需要重新规划?

计划执行过程中可能出现:

设备不存在
查询结果为空
数据质量不足
工具调用超时
用户拒绝写操作
发现新的异常设备
原计划假设不成立

此时 Replanner 根据当前状态调整剩余计划:

public AgentPlan replan(
        AgentPlan originalPlan,
        List<StepExecutionResult> results,
        List<String> missingInformation) {

    return chatClient.prompt()
            .system("""
                    你是任务重规划器。

                    只允许修改尚未执行的步骤。
                    已完成步骤及其结果不可伪造或覆盖。
                    不得增加用户无权调用的工具。
                    如果目标无法完成,应明确终止原因。
                    """)
            .user("""
                  原始计划:
                  {plan}

                  已完成结果:
                  {results}

                  缺失信息:
                  {missing}

                  请输出调整后的计划。
                  """)
            .param("plan", originalPlan)
            .param("results", results)
            .param("missing", missingInformation)
            .call()
            .entity(AgentPlan.class);
}

重新规划也必须经过 PlanValidator。


十三、状态机:把关键流程控制权交还给程序

对于创建工单、设备控制和审批流程,不应该完全依赖大模型自由规划。

可以使用有限状态机:

用户同意

用户拒绝

RECEIVED

ANALYZING

EVIDENCE_INSUFFICIENT

WAITING_CONFIRMATION

CREATING_ORDER

CANCELLED

COMPLETED

FAILED

定义任务状态:

public enum EnergyTaskStatus {
    RECEIVED,
    ANALYZING,
    EVIDENCE_INSUFFICIENT,
    WAITING_CONFIRMATION,
    CREATING_ORDER,
    COMPLETED,
    CANCELLED,
    FAILED
}

定义允许的状态转移:

private static final Map<
        EnergyTaskStatus,
        Set<EnergyTaskStatus>> ALLOWED_TRANSITIONS =
        Map.of(
            EnergyTaskStatus.RECEIVED,
            Set.of(EnergyTaskStatus.ANALYZING),

            EnergyTaskStatus.ANALYZING,
            Set.of(
                EnergyTaskStatus.EVIDENCE_INSUFFICIENT,
                EnergyTaskStatus.WAITING_CONFIRMATION,
                EnergyTaskStatus.FAILED
            ),

            EnergyTaskStatus.EVIDENCE_INSUFFICIENT,
            Set.of(
                EnergyTaskStatus.ANALYZING,
                EnergyTaskStatus.FAILED
            ),

            EnergyTaskStatus.WAITING_CONFIRMATION,
            Set.of(
                EnergyTaskStatus.CREATING_ORDER,
                EnergyTaskStatus.CANCELLED
            ),

            EnergyTaskStatus.CREATING_ORDER,
            Set.of(
                EnergyTaskStatus.COMPLETED,
                EnergyTaskStatus.FAILED
            )
        );

状态转移校验:

public void transition(
        EnergyTask task,
        EnergyTaskStatus target) {

    Set<EnergyTaskStatus> allowed =
            ALLOWED_TRANSITIONS.getOrDefault(
                    task.status(),
                    Set.of()
            );

    if (!allowed.contains(target)) {
        throw new IllegalStateException(
                "不允许从%s转换到%s"
                        .formatted(task.status(), target)
        );
    }

    task.changeStatus(target);
    taskRepository.save(task);
}

即使模型要求跳过确认,状态机也不会允许:

ANALYZING → CREATING_ORDER

因为合法路径必须经过:

ANALYZING
→ WAITING_CONFIRMATION
→ CREATING_ORDER

十四、状态机中的 Agent 应该负责什么?

状态机负责确定:

现在处于哪个阶段
允许进入哪些状态
哪些操作必须审批
失败后如何恢复

Agent 负责处理状态内部的非确定性任务:

如何拆解分析问题
选择哪些查询工具
如何解释查询结果
是否需要补充证据
如何生成自然语言报告

职责划分:

能力Agent状态机
理解自然语言是否
动态选择查询工具是部分
分析复杂数据是否
控制合法状态转移否是
强制人工审批否是
限制重试次数否是
中断恢复部分是
业务事务一致性否是

十五、三种模式应该如何选择?

场景一:简单查询

查询设备AC-001昨天的能耗。

使用:

单次 Tool Calling

没有必要引入复杂规划。

场景二:探索性诊断

分析空压机能耗异常的可能原因。

使用:

受控 ReAct

因为下一步取决于查询结果。

场景三:多步骤研究

分析全厂过去一个月的异常耗能,并生成改进方案。

使用:

Plan-and-Execute

先拆分任务,再分步执行。

场景四:包含写操作

分析异常并创建检修工单。

使用:

状态机
+ Plan-and-Execute
+ Human-in-the-Loop

场景五:设备控制

判断异常后自动关闭设备。

仅靠 Agent 自主规划风险过高,必须采用:

固定工作流
+ 硬编码安全策略
+ 多级审批
+ 可回滚机制

十六、能源诊断 Agent 的混合架构

最终可以采用以下结构:

确定性业务步骤

探索性分析

外部能力

写操作

否

是

用户目标

任务状态机

Planner

Plan Validator

Executor

当前步骤类型

固定代码执行

受控ReAct循环

MCP Tool

Human-in-the-Loop

Evaluator

证据充分

Replanner

状态转移

持久化检查点

这套架构并没有把所有控制权交给模型。

它采用的是:

LLM处理不确定性
代码控制确定性
状态机控制安全边界
人工处理高风险决策

十七、检查点与中断恢复

长任务可能因为以下原因中断:

  • 服务重启;
  • 模型调用超时;
  • MCP Server 不可用;
  • 等待用户确认;
  • 数据查询任务尚未完成;
  • 达到当前执行时间限制。

因此,每一步执行后都应该保存检查点:

public record AgentCheckpoint(
        String taskId,
        EnergyTaskStatus status,
        AgentPlan currentPlan,
        List<StepExecutionResult> completedSteps,
        int modelCallCount,
        int toolCallCount,
        BigDecimal estimatedCost,
        Instant updatedAt,
        long version
) {
}

恢复任务时:

加载最后检查点
→ 验证任务状态
→ 检查已完成步骤
→ 检查外部操作是否已提交
→ 从下一个安全步骤继续

写操作恢复时必须检查幂等键,不能直接重新执行。


十八、Agent 执行预算

每个任务都应该配置执行预算:

public record AgentBudget(
        int maxPlanningRounds,
        int maxToolCalls,
        int maxSameToolCalls,
        int maxReplanCount,
        int maxInputTokens,
        int maxOutputTokens,
        Duration timeout,
        BigDecimal maxCost
) {
}

参考限制:

最大规划次数:2
最大工具调用:12
同一工具最大调用:3
最大重新规划次数:2
任务超时:120秒
写操作自动执行次数:0

预算耗尽后,Agent 应返回:

任务尚未完成。

已确认:
1. 一号车间能耗增长18.6%;
2. 空压机AC-001贡献了67%的增量。

尚未确认:
1. 冷却系统是否发生故障。

停止原因:
已达到本次任务的最大工具调用次数。

不能为了给出完整答案而编造缺失结论。


十九、如何防止 Agent 无限循环?

可以从五个层面控制。

1. 步骤上限

currentStep < maxSteps

2. 重复调用检测

将工具名称和规范化参数生成指纹:

String actionKey =
        toolName + ":" + hash(normalize(arguments));

相同调用连续出现时停止或要求重新规划。

3. 无进展检测

如果连续多轮没有新增证据:

newEvidenceCount == 0

则认为 Agent 停滞。

4. 工具级重试策略

参数错误:不重试,重新生成参数
网络超时:最多重试2次
权限不足:禁止重试
数据不存在:调整计划
业务冲突:请求用户处理

5. 终止条件

任务必须具备明确的成功和失败条件。

不能只让模型自行判断“什么时候觉得完成”。


二十、Agent 规划的安全规则

生产系统应至少遵循以下原则:

1. 模型不能扩大自己的权限

Agent 不能因为计划需要某个工具,就自动获得该工具权限。

2. 模型不能修改安全策略

检索文档、用户输入和工具结果都不能改变系统级规则。

3. 写操作必须独立确认

不能把用户最初提出的模糊目标视为对所有后续操作的授权。

4. 高风险操作不能仅由模型批准

例如:

停止设备
删除数据
修改告警阈值
批量关闭工单

必须经过确定性的审批流程。

5. 工具结果视为不可信输入

外部系统返回的文本也可能包含 Prompt Injection,不能将其作为更高优先级指令。


二十一、如何评测 Agent 的规划能力?

不能只看最终回答是否流畅。

指标说明
Plan Validity计划是否可执行
Tool Selection Accuracy是否选择正确工具
Parameter Accuracy参数是否正确
Step Efficiency是否存在冗余步骤
Goal Completion Rate是否真正完成目标
Evidence Coverage是否获得必要证据
Replan Accuracy失败后是否正确调整
Loop Rate是否出现重复调用
Recovery Rate中断后能否恢复
Unauthorized Action Rate是否尝试越权操作
Human Confirmation Accuracy是否在正确时机请求确认
Cost per Successful Task每个成功任务的平均成本

测试用例应该覆盖:

正常流程
工具超时
空结果
错误参数
权限不足
证据冲突
用户拒绝确认
任务中断恢复
重复执行
恶意提示注入

二十二、常见反模式

1. 用一个巨大 Prompt 描述完整流程

随着规则增加,Prompt 会越来越难以维护。

应该将状态、权限、预算和转移规则放入代码。

2. 每一步都调用最强模型

简单参数提取和状态判断不需要使用高成本模型。

可以使用模型路由:

意图分类 → 小模型
复杂规划 → 强推理模型
内容总结 → 普通模型
确定性校验 → Java代码

3. Planner 生成计划后直接执行

计划必须经过工具、权限、依赖和预算校验。

4. 只保存最终答案

如果不保存步骤状态,系统无法审计和恢复。

5. 允许模型自由决定高风险操作

模型可以提出建议,但不能成为最终授权者。


总结

AI Agent 的自主规划不是让模型不受限制地循环调用工具。

三种规划模式分别解决不同问题:

ReAct
→ 解决动态探索问题

Plan-and-Execute
→ 解决复杂目标拆解问题

状态机
→ 解决流程控制和安全约束问题

生产级架构通常采用三者结合:

让大模型负责理解、规划和处理不确定性,让 Java 代码负责权限、状态、预算、事务和安全边界。

一个可靠 Agent 的关键,不是它能够自主执行多少操作,而是:

每个步骤可验证
每次调用可追踪
每个状态可恢复
每项权限不可绕过
每个任务能够终止

下一篇:

《A2A 多智能体协作实战:让能源分析、设备诊断与工单 Agent 协同工作》

参考资料:

AI智能体开发:Plan-and-Solve范式解析与LangGraph实战 在AI智能体开发领域,如何让大语言模型高效、可靠地处理复杂任务是一个核心挑战。传统的‘感知-行动’循环虽然灵活,但容易因缺乏全局规划而导致结果混乱、效率低下。为此,业界提出了‘先规划,再解决’的系统性方法论,即Plan-and-Solve范式。该范式强调在处理复杂任务前,先进行前置的、结构化的思考,生成明确的步骤蓝图,再按图执行,从而提升任务的成功率、可控性和可解释性。其技术价值在于将宏观规划与微观执行解耦,尤其适合代码生成、数据分析、流程自动化等高结构化场景。通过结合LangGraph等工作流框架,开发者 阅读详情

相关推荐

AI Agent规划与推理:从ReAct到ToT,构建可靠智能体的核心技术

在人工智能领域,智能体(Agent)的规划与推理能力是其实现自主决策和复杂任务处理的核心。其基本原理是让系统能够分解目标、评估状态、制定步骤序列,并在执行过程中动态调整策略,从而超越简单的指令-反应模式。这一技术价值在于将大语言模型的强大生成能力与结构化思维过程相结合,显著提升了任务执行的可靠性、可解释性和适应性。在应用场景上,规划与推理技术广泛应用于智能客服、自动化流程、创意生成、复杂问题求解等领域,是构建能够在开放环境中可靠工作的智能助手的关键。本文深入探讨了实现这一能力的两种主流范式:ReAct(Re

weixin_34326429的博客 469

AI Agent 架构原理深度解析:从 ReAct 到 Plan-Execute 再到 Reflection

本文系统讲解AI Agent三大核心架构:ReAct(推理与行动交织)、Plan-Execute(先规划后执行)、Reflection(自我反思改进),涵盖混合架构、记忆系统、框架对比及未来趋势,帮助你建立对Agent架构的深层理解。

热爱技术与前沿创新,深耕科技领域,在科创中精进自我;探索技术乐趣,分享技术干货与成长心得,以技术为伴,热爱生活,在科创与生活中双向成长。 910

Agent运行模式对比:ReAct、Plan-and-Execute与状态机选型指南

在构建智能体时,循环控制与状态管理是决定任务成败的核心。ReAct模式通过单轮循环实现快速响应,但易导致上下文膨胀和重复调用;Plan-and-Execute先规划后执行,适合可拆解任务,却可能因首轮规划错误而偏离;状态机模式将控制权交还开发者,行为可预测但灵活性受限。理解这些运行模式的原理,能帮助开发者在不同场景下平衡效率与稳定性,例如短链路探索、流程型任务或生产环境固定流程。本文深入源码骨架与参数调优,结合轨迹日志分析,助你避开常见陷阱,选择最合适的Agent循环架构。

weixin_29058331的博客 294

AI学习第10天·实战:Agent 中的计划生成器(Planner)用 ReAct / Plan-and-Execute 提升决策能力

ReAct 解决不确定环境下的“即时适应”,Plan-and-Execute提供“可控与可审计”。把二者用“再规划门”串起来,你的 Agent 就具备既灵活又可控的决策与执行力。

瓦罗兰特顶级C位的博客 1125

ISP Tuning实战指南:从基础到高级的色彩与亮度优化

本文详细介绍了ISP Tuning的基础概念与高级调优技术,包括黑电平校正(BLC)、自动白平衡(AWB)、色彩校正矩阵(CCM)和Gamma曲线调整等核心算法。通过实战案例和调试技巧,帮助工程师提升摄像头成像质量,解决高光过曝、暗部噪点等常见问题,适用于智能门铃、车载摄像头等多种场景。

weixin_30879169的博客 108

TensorRT-LLM.V1.1.0rc0:在无 GitHub 访问权限的服务器上编译 TensorRT-LLM 的完整实践

1.NGC上的预构建发布容器进行部署,见《2.通过pip进行部署。3.从源头构建再部署。在实际开发中,我们常常面临这样的场景:本地笔记本为 Windows 系统,虽然可以访问 GitHub,但受限于硬件性能,编译大型项目(如 TensorRT-LLM)耗时过长;而公司或实验室提供的 Linux 服务器性能强劲,适合编译任务,但却因网络策略限制无法连接外网,尤其是无法访问 GitHub。。

xinvictory的专栏 1203

【AI Agent实战手册】AG07 Plan-and-Execute:让Agent先想清楚再干活

第三章:架构篇。

baiyanggudao的博客 560

ROS环境下UR机械臂与Realsense相机手眼标定实战指南

本文提供了在ROS环境下,对UR机械臂与Realsense相机进行手眼标定的完整实战指南。详细介绍了从环境搭建、软件包安装、硬件配置到分步数据采集与计算的完整流程,并分享了常见的避坑技巧与精度优化方法,旨在帮助开发者高效、准确地完成标定,为后续的机器人视觉应用奠定坚实基础。

sunny的博客 647

2026年AI Agent开发完整学习路线 | 后端工程师转型指南 | 从零到手搓生产级多Agent系统

《后端工程师手搓AI Agent全攻略》是一个17篇系列教程,专为有后端开发经验、想转型AI Agent开发的工程师设计。教程采用"纯原生手搓"方式,从ReAct循环底层原理开始,逐步实现Function Calling、流式输出、记忆管理等核心功能,最终构建生产级多Agent系统。目前已更新前10篇,涵盖Agent核心原理、协议工程化、记忆管理和产品化等关键阶段,后续将扩展RAG检索和多Agent系统开发。所有代码均无框架依赖,采用分层设计思路,强调工程实践与底层原理理解。

llwszx的博客 1598

485芯片AB波形正负半周的问题探讨

      本人做的一个产品,产品的其中一个接口是RS485的,我们使用的芯片是MAX13487E。MCU是STM32F103,MCU的USART通过光耦隔离后,接到MAX13487E。因为STM32F103的VCC是3.3V的,MAX13487E的VCC是5V。      部分原理图如下,上述部分电路参考了官方的参考设计,现在测试的AB波形时候发现如下问题。1.把R10和R16改为1k,示波器C...

qq_26308521的博客 1万+

科研党必备:5分钟搞定Arxiv论文批量导入NoteExpress(附PDF自动下载技巧)

本文为科研人员提供了一套高效的自动化工作流,实现从Arxiv批量检索论文、自动下载PDF到无缝导入NoteExpress的全过程。通过Python脚本和NASA ADS等工具,可大幅提升文献管理效率,特别适合需要追踪前沿动态的研究生和科研团队。

orange的博客 398

【智能体】Plan and Execute 深度解析:先想后做的智能体范式

Plan and Execute = 先全局规划再逐步执行 + 动态重规划。Planner 拆解任务为子任务计划,Executor 逐个执行(通常用 ReAct),Verifier 主动验证中间结果,Re-planner 根据反馈调整计划。本文从起源、原理、四组件、工作流程、发展史、混合架构、优缺点到含 Verifier 的伪代码,系统拆解这一长任务 Agent 核心范式。

m0_66705151的博客 357

24年电赛H题 | 想要小车走直线,正在调角度环,但不知道怎么把角度偏航角偏差转化成电机速度输出?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1313

大模型应用开发--Agent笔记1(定义,ReAct、Plan-and-execute范式,Coze、Dify低代码平台,LangChain、LlamaIndex、AutoGen框架,评估,含代码)

本文基于datawhale的Hello-Agents开源项目及其他大模型开发资料整理而成。内容分为四个部分: 智能体基础概念、智能体构建范式、智能体框架比较和智能体性能评估。笔记重点分析了不同范式的优缺点,并通过实际代码示例展示了各框架的具体实现方式。作者将持续更新学习内容,深入探索智能体开发的实践应用。

zhuai.blog.youkuaiyun.com 2008

RK3588 部署 YOLO26-Pose 人体姿态检测:Windows Docker 环境全流程

YOLO26-Pose 在 RK3588 上的部署流程是 PC 端 ONNX 导出 → RKNN 转换(INT8 量化)→ 板端推理。INT8 量化后 YOLO26s-Pose 约 35ms,YOLO26n-Pose 约 15ms,可以覆盖实时姿态检测的需求。后处理是 Python 实现的常见瓶颈——如果帧率不达标,先用 npy 保存模型输出在 PC 上验证解析逻辑的正确性,确认无误后再迁移到 C++ 实现。

m0_64661770的博客 543

apollo自动驾驶进阶学习之:如何实现施工路段限速绕行及其参数调试

首先需要理解Planning模块是基于Scenario、Stage、Task这样的层次来进行的,即场景->步骤->具体的决策方法。Apollo可以应对自动驾驶所面临的不同道路场景,都是通过Scenario统一注册与管理。Scenario通过一个有限状态机来判断选择当前行车场景,每个Scenario下又有多个Stage,指当前场景下需要执行的粗略步骤。.........

qq_41593516的博客 6598

从ReAct到Reflexion:Planning Agent架构演进与工程实践

在人工智能应用开发中,任务分解与执行是核心挑战。其基本原理在于将复杂问题拆解为可管理的子任务,并通过有序执行来达成目标。这一技术价值在于显著提升了大语言模型处理长链条、多步骤任务的可靠性与可控性,使其从简单的对话工具转变为能够自主工作的智能体。在应用场景上,它广泛适用于自动化工作流、智能客服、数据分析与报告生成等领域。本文聚焦于Planning Agent的架构演进,深入剖析了ReAct、Plan-and-Execute和Reflexion三种核心模式,并结合工程实践中的工具调用与状态管理等热词,探讨了如何

weixin_34034670的博客 311

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

「AI Agent 全栈开发 50 讲」——从本地模型部署到多智能体系统,一年省 87 万 第 27 课 | Plan-and-Execute:先规划再执行

本课介绍Plan-and-Execute模式,强调在复杂分析任务中先制定完整计划再执行,相比ReAct的“边想边做”,更具全局性、可控性和效率。通过规划阶段生成明确步骤,支持并行识别与流程管理,适用于多维度对比、报表生成等结构化任务。结合LangGraph实现状态驱动的执行流程,提升结果完整性与用户体验。

71

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

2026年最新AI agent面试(01)_Agent基础与推理范式

大家好,我是浩哥,本专栏第一篇,后续总结10篇关于ai agent面试题,感兴趣可以点点关注。导语:本题型是 P7 / Agent 架构师面试的第一道分水岭。面试官真正考察的不是"背定义",而是。常见失分点集中在三处:①把 Agent 等同于「大模型 + 一个 Prompt」,说不清它相对纯 LLM 到底多了什么;②分不清三者的粒度关系,把它们当成"三选一"而非"可嵌套的三层结构";

浩哥学JavaAI的专栏 789

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Agent架构全景图:ReAct/Plan-Execute/Multi-Agent怎么选

上周面试官问我:「你的Agent项目用的什么架构?」 我答:「ReAct,让大模型自己想一步做一步。」 他追问:「那如果任务有20个步骤,ReAct还能撑住吗?」

xx_nm98的博客 235

Agent任务拆解实战:从翻车到稳定交付的完整方案

大模型在单步推理中表现惊艳,但面对复杂业务任务时却频繁失控,本质是任务组织方式出了问题。Agent开发的核心挑战,在于将多步任务转化为可编排、可校验、可重试的单步执行流程。本文从大模型能力边界出发,解析思维链、ReAct、Plan-and-Execute等经典任务拆解模式,并给出一个最小可运行的Python示例,覆盖规划器、执行器、状态管理、重试机制等关键组件。针对上下文隔离、错误累积、规划不稳定等工程痛点,提供了从日志观测到安全边界的实践建议,帮助开发者将Agent从‘偶尔聪明’提升为‘始终可靠’,真正落

weixin_30781107的博客 350

【第一部分:认识 Agentic AI】4. 智能体的工作循环——从 ReAct 到 Plan-Execute

文章摘要:AI Agent的核心在于"决策-行动-观察"的持续执行循环,而非简单的Prompt或工具调用。本文系统梳理了Agent的三种核心运行模式:ReAct(推理与行动交织)、Plan-and-Execute(先规划后执行)和Reflect(执行后反思修正),并深入探讨了进阶的事件驱动和状态机驱动模式。通过分析文档转换故障案例,指出实际应用中往往需要混合多种模式。最后强调Agent本质是"目标驱动、状态为基础、通过反馈推进"的运行循环,其可靠性取决于对终止条件、状

weixin_42258782的博客 443

大模型智能体四层能力构建:可控生成、RAG增强、工具调度与自主规划

大模型智能体不是简单调用API的聊天机器人,而是具备可控输出、知识增强、工具执行和任务规划四大核心能力的数字员工。其技术原理植根于Prompt工程与结构化解析协同、检索增强生成(RAG)的端到端知识供应链优化、基于Function Calling的弹性工具编排协议,以及分层可验证的Plan-and-Execute决策机制。这类能力组合显著提升智能体在客服、金融、医疗等关键场景中的可靠性、准确率与业务适配性。本文聚焦真实生产环境验证的四层递进式构建路径,涵盖Chroma向量库选型依据、BGE-reranker

dfdfadsf3443的博客 395

AI 客服 Day8:复杂任务别靠 Prompt 硬撑,Plan-Execute-Replan Agent 才是正解

上一章让 AI 能调工具了,但大部分时候它还是"一个问题调一次工具就完事"。现实中的客服问题可没这么简单——用户可能一次提好几个需求,或者某个问题的解决需要先查 A、再查 B、根据 B 的结果决定下一步。这一章教大家用 LangGraph 实现"规划→执行→调整"的循环,让 AI 能自己拆解复杂问题。

m0_59163425的博客 155

【高级】SmartWriter v0.13:自主写作 Agent(上)— 思考-行动循环与规划-执行模式深度实战

核心痛点: 前面 12 篇文章构建的 SmartWriter 从 Chain 到 RAG 到 StateGraph,本质上都是"预设流程"——你事先定义好每一步做什么、数据怎么流转。但当写作任务变得开放(“写一篇关于量子计算的技术综述”),你无法预先知道需要检索多少资料、检索什么关键词、大纲该分几章、每章需要多少轮打磨——你需要的不是流水线,而是一个能自主思考、自主调用工具、自主决定下一步做什么的写作 Agent。前置知识。

我的博客 310

AI Agent(Agentic)规划模式

AIAgent的规划模式是实现大模型从聊天转向任务执行的关键,主要分为单路径规划和动态规划两种基础模式。单路径规划适用于确定性强、步骤清晰的任务,通过一次性生成完整步骤序列实现全局最优;动态规划则适用于开放环境,采用实时反馈调整策略。在此基础上,高层设计模式如自我反思、工具使用和多智能体协作能进一步提升Agent能力。主流规划范式包括Plan-and-Execute、ReAct循环、思维链/树以及多智能体协作等,各具特点以适应不同任务需求。这些规划模式使Agent能够主动拆解任务、制定策略并动态调整,从而有

博客 395
上一篇: 第六篇:Spring AI 实战:将 Java 业务接口封装成企业级 MCP Server
下一篇: 第八篇:A2A 多智能体协作实战:让能源分析、设备诊断与工单 Agent 协同工作
yychen_java
博客等级 码龄8年 1451粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值