AI CXYKK AI 教程
LOOP Agent Loop:规划、执行、观察、继续
面向程序员 · Agent 执行机制课

Agent Loop:规划、执行、观察、继续

Agent 不是一次性把答案写完,而是像一个有任务状态的执行器:先规划下一步,执行一个动作,观察结果,再判断是继续、修正、追问、交付还是停止。

规划不是一次性的 计划会随着工具结果、资料缺口和用户反馈不断调整。
执行不是随便做 每个动作都要有目标、输入、权限和可观察结果。
观察决定下一步 工具失败、资料冲突、结果不完整都会改变后续路径。
继续必须有边界 Agent 要有完成条件、预算限制、失败处理和人工介入点。
Agent loop state machine plan / act / observe
Plan 根据目标和状态决定下一步。
Act 调用工具、检索资料或生成中间产物。
Observe 读取结果、错误、证据和质量信号。
Continue 继续、修正、追问、交付或停止。
state
目标和进度
budget
步数和成本
guard
权限和确认
01 · 先给定义

Agent Loop 是 Agent 持续工作的核心机制

它让 Agent 不再只是“一次输入,一次输出”,而是能在任务过程中不断读取新信息、更新状态、调整计划,直到满足完成条件。

Plan

规划

根据目标、上下文、当前进度和可用工具,决定下一步最应该做什么。

Act

执行

执行一个有限动作,例如查资料、调用工具、生成草稿、运行校验。

Observe

观察

读取动作结果,识别成功、失败、缺口、冲突和新的约束。

Continue

继续

判断是继续下一轮,还是修正计划、追问用户、交付结果或停止。

一句话面试版 可直接背

Agent Loop 是 Agent 的任务推进循环:先根据目标和状态规划下一步,再执行工具或动作,观察返回结果并更新状态,最后判断继续、修正、追问、完成或停止。

02 · 为什么需要循环

真实任务经常无法一次生成到底

因为 Agent 在开始时通常不知道全部事实。它需要边查边判断:资料是否够、工具是否成功、结果是否可信、下一步是否要换方向。

一次性生成

容易假完整

模型可能在资料不足时直接写完整答案,看起来流畅,但关键事实、字段和约束可能都是猜出来的。

循环推进

边做边校正

先查现有资料,拿到结果后再决定是否继续查接口、追问用户、修正范围或输出假设,结果更可控。

哪些任务最需要 Loop 判断
  • 1资料不完整:需要先检索,再根据检索结果决定下一步。
  • 2工具会失败:API 可能超时、权限不足、返回空,需要重试或换方案。
  • 3结果要校验:代码、PRD、表格、JSON 都需要检查和修正。
  • 4目标会变化:用户补充信息后,计划需要继续而不是重来。
03 · 状态管理

Loop 能继续,是因为它保存了任务状态

没有状态,Agent 每一轮都像重新开始。状态记录目标、计划、已完成步骤、工具结果、待确认问题和预算。

Loop State 常见字段 结构
字段 作用
goal 最终要完成的目标和验收标准。
plan 当前任务拆解和下一步候选动作。
observations 工具返回、检索证据、错误信息和用户反馈。
artifacts 草稿、表格、代码、PRD、检查报告等中间产物。
budget 最大步数、时间、成本、工具调用次数。
blockedBy 缺少权限、缺少参数、需要人工确认等阻塞原因。
loop state example JSON
{
  "goal": "生成商品导入失败明细 PRD",
  "currentStep": "查接口字段",
  "completedSteps": ["澄清范围", "检索历史 PRD"],
  "observations": [
    "历史 PRD 只有任务级失败统计",
    "接口文档未提供行级错误字段"
  ],
  "artifacts": {
    "prdDraft": "draft-v1"
  },
  "budget": {
    "maxSteps": 8,
    "usedSteps": 3
  },
  "blockedBy": null
}
04 · 规划下一步

Plan 阶段只规划“下一步最有价值的动作”

很多人以为规划就是一次性列十几步。工程里更稳的做法是滚动规划:先确定下一步,再用观察结果更新计划。

看目标

离交付还差什么

根据验收标准判断缺资料、缺字段、缺验证,还是只差整理输出。

看状态

已经做过什么

避免重复查同一份资料,也避免忘记上一轮发现的错误和假设。

选动作

下一步要可执行

动作要具体到可以执行,例如“查接口字段”,不是“深入分析”。

next step planning 规划示例
Given:
  goal = "PRD must include import failure fields"
  observations = ["current PRD lacks row-level errors"]

Next step:
  action = "api_schema_lookup"
  reason = "Need to verify whether backend already exposes row-level error data"
  expectedObservation = "List of available fields and missing fields"
  fallback = "If schema is missing, mark backend requirement as open dependency"
05 · 执行动作

Act 阶段只做一个清楚、可观察、可回滚的动作

Agent 每一轮不应该同时做太多事。动作越明确,后面越容易观察结果、定位失败、决定下一步。

检索

找事实依据

搜索知识库、读取文档、查历史记录,为后续判断提供证据。

调用工具

拿实时结果

查接口、查订单、跑测试、调用业务 API,拿到确定性结果。

生成产物

产出中间版本

写草稿、生成表格、整理清单,作为下一轮观察和修正对象。

校验

检查是否达标

跑测试、校验 JSON、检查 PRD 章节、验证引用来源。

执行动作的四个要求 工程化
  • 1输入明确:用什么参数、查什么范围、基于什么上下文。
  • 2权限明确:当前用户是否能访问资料或执行工具。
  • 3结果明确:成功时返回什么,失败时返回什么错误。
  • 4影响明确:是否只读,是否会改数据,是否需要人工确认。
06 · 观察结果

Observe 阶段不是把结果塞进上下文,而是提取对下一步有用的信号

观察要回答三个问题:动作有没有成功、结果说明了什么、它如何改变下一步计划。

工具成功 拿到了接口字段、文档片段或测试结果,提取关键事实和证据。
更新状态 把关键结果写进 observations,并标记哪些验收项已经满足。
工具失败 超时、无权限、参数错误、返回空、格式不符合预期。
决定恢复方式 重试、换工具、缩小范围、追问用户,或标记为阻塞。
观察记录应该短而有用 不要堆原文

不要把整个工具返回都原样塞进状态。更好的做法是保存摘要、证据 ID、关键字段、错误类型和下一步影响。完整原文可以放在 artifact 或日志里。

07 · 继续判断

Continue 阶段决定下一轮走哪条路

继续不等于永远循环。每一轮都要明确选择:继续执行、修正计划、追问用户、交付结果、暂停等待或失败退出。

继续

还差资料或步骤

下一步明确、预算充足、没有权限阻塞,就继续执行下一轮。

追问

缺用户决策

缺业务范围、缺关键参数、存在多个可能方向时,不要猜,先问。

交付

满足完成条件

产物达到验收标准,剩余问题已标记,就输出最终结果。

应该继续
  • 1当前结果产生了新的明确下一步。
  • 2还没达到验收标准,但路径清楚。
  • 3工具失败可恢复,例如重试或改参数。
  • 4预算还够,风险也在可控范围内。
不该继续
  • 1继续只是在重复同一个失败动作。
  • 2缺少用户授权或高风险动作未确认。
  • 3已经达到成本、时间或步数上限。
  • 4关键信息必须由用户或系统补充。
08 · 停止条件

一个可靠的 Loop,必须知道什么时候停

没有停止条件,Agent 可能无限重试、反复检索、过度优化,或者在无法完成时继续消耗成本。

完成条件

产物达标

输出满足用户目标和质量检查项,可以交付。

预算条件

资源用完

达到最大步数、最大工具调用次数、最大耗时或成本上限。

阻塞条件

需要外部输入

缺用户确认、缺权限、缺必要参数,继续做只会猜。

失败条件

无法恢复

连续失败、工具不可用、数据不存在,应该明确说明失败原因。

stop condition 伪代码
shouldStop(state):
  if qualityCheckPassed(state.artifacts.final):
    return "deliver"
  if state.budget.usedSteps >= state.budget.maxSteps:
    return "stop_with_partial_result"
  if state.blockedBy:
    return "ask_user_or_escalate"
  if repeatedSameFailure(state.observations):
    return "fail_with_reason"
  return "continue"
09 · 失败恢复

失败不是问题,重复同一种失败才是问题

Agent Loop 要能识别失败类型,并选择合适恢复策略。不要让模型把失败包装成成功。

重试

短暂失败

网络超时、临时 500,可以有限重试,但要有次数上限。

换工具

路径不通

知识库没查到,可以改查接口文档、历史 PRD 或负责人信息。

降级

信息不足

无法拿到实时数据时,可以输出基于已有资料的部分结果,并标注假设。

升级人工

需要判断或授权

权限、审批、业务口径冲突、高风险动作,需要人工确认。

恢复策略要写进状态 可复盘

每次失败恢复都要记录:失败类型、尝试次数、换过哪些方案、为什么最后继续或停止。否则出了问题很难复盘。

10 · 工具和 RAG

Agent Loop 经常围绕工具结果和检索结果转动

RAG 和 Tool Calling 是 Agent Loop 里最常见的动作来源。检索提供资料,工具提供实时数据或确定性动作。

RAG 进入 Loop

检索后要观察资料质量

检索不是结束。Agent 要看资料是否相关、是否过期、是否冲突、是否足以支持答案。如果不够,要改写查询或换数据源。

Tool Calling 进入 Loop

调用后要观察工具结果

工具返回会改变状态:成功则继续生成或校验,失败则重试、换工具、追问用户或停止。

Plan:需要接口字段 决定调用 api_schema_lookup,而不是直接编字段。
Act:执行工具 查询商品导入任务结果接口的返回字段。
Observe:发现缺口 接口只有失败数量,没有行级错误明细。
Continue:修正计划 把“新增行级错误明细字段”写入 PRD 后端需求。
11 · 运行时设计

企业级 Agent Loop 需要运行时,而不只是提示词

提示词可以描述流程,但真正可靠的 Loop 需要运行时记录状态、执行工具、控制预算、处理错误和输出日志。

运行时要做什么 工程职责
  • 1保存任务状态,支持暂停、继续和复盘。
  • 2管理可用工具,做参数校验、权限检查和风险分级。
  • 3控制预算,避免无限循环和过度调用。
  • 4记录执行链路,方便评测、审计和故障排查。
loop runtime 伪代码
while true:
  decision = planner.next(state)

  if decision.type == "ask_user":
    return pauseForUser(decision.question)

  if decision.type == "deliver":
    return deliver(state.artifacts.final)

  action = guard.validate(decision.action, user)
  result = executor.run(action)
  observation = observer.extract(result)
  state = stateStore.update(state, observation)

  if stopPolicy.shouldStop(state):
    return stopWithReason(state)
12 · 评测指标

评测 Agent Loop,要看每一轮是否让任务更接近完成

好的 Loop 不一定步数多,而是每一步都有信息增量。无效循环会反复查相同资料、重复失败动作或过度润色。

01 有效推进率

每轮是否产生新证据、新产物、新判断或明确阻塞。

02 工具成功率

工具选择是否正确,参数是否有效,失败是否能合理恢复。

03 停止准确率

该交付时能交付,该追问时能追问,该停止时不继续消耗。

04 最终质量

交付物是否完整、准确、可验证,并且清楚标注假设和风险。

反例信号 需要报警
  • 1连续多轮调用同一个工具,但没有新信息。
  • 2工具失败后不换策略,只是重复请求。
  • 3预算耗尽后仍然生成“看似完整”的结果。
  • 4观察结果和下一步计划没有因果关系。
13 · 企业案例

用 Agent Loop 生成商品导入失败明细 PRD

这个案例适合面试:它展示了 Agent 如何边查资料边更新计划,而不是一次性编完整 PRD。

1
Plan 目标是生成 PRD,下一步先查现有商品导入流程,避免重复设计。
2
Act 调用知识库检索历史 PRD、接口文档和错误码说明。
3
Observe 发现现有系统只有任务级失败统计,没有行级错误明细。
4
Continue 下一轮改查接口 schema,确认后端是否已有字段支持。
5
Deliver PRD 中明确新增字段、页面交互、异常处理、验收标准和风险依赖。
loop trace 执行轨迹
Round 1:
  plan: search current import flow
  act: kb_search("商品导入 失败明细")
  observe: found only task-level failure count
  continue: need API schema

Round 2:
  plan: verify backend fields
  act: api_schema_lookup("importTaskResult")
  observe: missing rowIndex, fieldName, errorCode
  continue: add backend field requirement

Round 3:
  plan: draft PRD
  act: generate PRD sections
  observe: acceptance criteria missing analytics
  continue: add event tracking and final check
这个案例的讲解重点 面试友好

Agent Loop 的价值是让每轮动作都有证据和信息增量。它先查现状,再发现缺口,再调整计划,最后把缺口转化为 PRD 里的后端需求、前端展示和验收标准。

14 · 面试问答

回答 Agent Loop,要讲出状态、边界和停止条件

只说“规划、执行、观察”还不够。面试里最好补上状态管理、预算控制、失败恢复和人工介入点。

Q1:Agent Loop 是什么?

A:Agent Loop 是 Agent 持续推进任务的循环机制。它先根据目标和当前状态规划下一步,再执行工具或动作,观察结果并更新状态,最后判断继续、修正、追问、交付或停止。

Q2:为什么 Agent 需要 Loop?

A:因为复杂任务通常无法一次拿到全部信息。Agent 需要边查资料、边调用工具、边观察结果,再根据新信息调整计划。这样比一次性生成更可靠,也更容易处理失败和不确定性。

Q3:Loop 里最重要的状态有哪些?

A:包括目标、当前计划、已完成步骤、工具返回、关键观察、中间产物、预算、阻塞原因和待确认问题。没有这些状态,Agent 就无法稳定地跨轮继续工作。

Q4:怎么避免 Agent 无限循环?

A:要设置明确停止条件,包括完成条件、最大步数、最大工具调用次数、时间和成本预算、连续失败上限,以及需要人工确认的阻塞条件。每一轮都要判断是否真的产生了信息增量。

Q5:企业落地 Agent Loop 要注意什么?

A:要做工具权限控制、参数校验、日志审计、预算限制、失败恢复和人工介入。尤其是写操作和高风险工具,不能让 Agent 自由循环执行,必须有确认和审批。

15 · 练习和速查

练习目标:能画出一张 Agent Loop 状态机

学完这一课,要能把一个复杂任务拆成多轮,并说明每轮的 plan、act、observe 和 continue 决策。

练习 1

客服订单 Loop

用户问订单未发货。写出三轮 Loop:查订单、查库存、生成解释或创建工单。

练习 2

排障 Loop

接口 500 增多。写出查监控、查日志、查发布记录、验证根因的观察和继续条件。

练习 3

PRD Loop

从粗略需求生成 PRD,列出每轮的检索、工具调用、观察结果和停止条件。

一页速查卡 复习
  • 1Agent Loop 是 Plan、Act、Observe、Continue 的任务推进循环。
  • 2Loop 能继续,靠的是状态:目标、计划、观察、产物、预算、阻塞。
  • 3每轮动作要小而清楚,结果要可观察,失败要可恢复。
  • 4Continue 阶段要决定:继续、修正、追问、交付、暂停或失败退出。
  • 5可靠 Loop 必须有停止条件、预算限制、日志审计和人工介入点。