规划
根据目标、上下文、当前进度和可用工具,决定下一步最应该做什么。
Agent 不是一次性把答案写完,而是像一个有任务状态的执行器:先规划下一步,执行一个动作,观察结果,再判断是继续、修正、追问、交付还是停止。
它让 Agent 不再只是“一次输入,一次输出”,而是能在任务过程中不断读取新信息、更新状态、调整计划,直到满足完成条件。
根据目标、上下文、当前进度和可用工具,决定下一步最应该做什么。
执行一个有限动作,例如查资料、调用工具、生成草稿、运行校验。
读取动作结果,识别成功、失败、缺口、冲突和新的约束。
判断是继续下一轮,还是修正计划、追问用户、交付结果或停止。
Agent Loop 是 Agent 的任务推进循环:先根据目标和状态规划下一步,再执行工具或动作,观察返回结果并更新状态,最后判断继续、修正、追问、完成或停止。
因为 Agent 在开始时通常不知道全部事实。它需要边查边判断:资料是否够、工具是否成功、结果是否可信、下一步是否要换方向。
模型可能在资料不足时直接写完整答案,看起来流畅,但关键事实、字段和约束可能都是猜出来的。
先查现有资料,拿到结果后再决定是否继续查接口、追问用户、修正范围或输出假设,结果更可控。
没有状态,Agent 每一轮都像重新开始。状态记录目标、计划、已完成步骤、工具结果、待确认问题和预算。
| 字段 | 作用 |
|---|---|
goal |
最终要完成的目标和验收标准。 |
plan |
当前任务拆解和下一步候选动作。 |
observations |
工具返回、检索证据、错误信息和用户反馈。 |
artifacts |
草稿、表格、代码、PRD、检查报告等中间产物。 |
budget |
最大步数、时间、成本、工具调用次数。 |
blockedBy |
缺少权限、缺少参数、需要人工确认等阻塞原因。 |
{
"goal": "生成商品导入失败明细 PRD",
"currentStep": "查接口字段",
"completedSteps": ["澄清范围", "检索历史 PRD"],
"observations": [
"历史 PRD 只有任务级失败统计",
"接口文档未提供行级错误字段"
],
"artifacts": {
"prdDraft": "draft-v1"
},
"budget": {
"maxSteps": 8,
"usedSteps": 3
},
"blockedBy": null
}
很多人以为规划就是一次性列十几步。工程里更稳的做法是滚动规划:先确定下一步,再用观察结果更新计划。
根据验收标准判断缺资料、缺字段、缺验证,还是只差整理输出。
避免重复查同一份资料,也避免忘记上一轮发现的错误和假设。
动作要具体到可以执行,例如“查接口字段”,不是“深入分析”。
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"
Agent 每一轮不应该同时做太多事。动作越明确,后面越容易观察结果、定位失败、决定下一步。
搜索知识库、读取文档、查历史记录,为后续判断提供证据。
查接口、查订单、跑测试、调用业务 API,拿到确定性结果。
写草稿、生成表格、整理清单,作为下一轮观察和修正对象。
跑测试、校验 JSON、检查 PRD 章节、验证引用来源。
观察要回答三个问题:动作有没有成功、结果说明了什么、它如何改变下一步计划。
不要把整个工具返回都原样塞进状态。更好的做法是保存摘要、证据 ID、关键字段、错误类型和下一步影响。完整原文可以放在 artifact 或日志里。
继续不等于永远循环。每一轮都要明确选择:继续执行、修正计划、追问用户、交付结果、暂停等待或失败退出。
下一步明确、预算充足、没有权限阻塞,就继续执行下一轮。
缺业务范围、缺关键参数、存在多个可能方向时,不要猜,先问。
产物达到验收标准,剩余问题已标记,就输出最终结果。
没有停止条件,Agent 可能无限重试、反复检索、过度优化,或者在无法完成时继续消耗成本。
输出满足用户目标和质量检查项,可以交付。
达到最大步数、最大工具调用次数、最大耗时或成本上限。
缺用户确认、缺权限、缺必要参数,继续做只会猜。
连续失败、工具不可用、数据不存在,应该明确说明失败原因。
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"
Agent Loop 要能识别失败类型,并选择合适恢复策略。不要让模型把失败包装成成功。
网络超时、临时 500,可以有限重试,但要有次数上限。
知识库没查到,可以改查接口文档、历史 PRD 或负责人信息。
无法拿到实时数据时,可以输出基于已有资料的部分结果,并标注假设。
权限、审批、业务口径冲突、高风险动作,需要人工确认。
每次失败恢复都要记录:失败类型、尝试次数、换过哪些方案、为什么最后继续或停止。否则出了问题很难复盘。
RAG 和 Tool Calling 是 Agent Loop 里最常见的动作来源。检索提供资料,工具提供实时数据或确定性动作。
检索不是结束。Agent 要看资料是否相关、是否过期、是否冲突、是否足以支持答案。如果不够,要改写查询或换数据源。
工具返回会改变状态:成功则继续生成或校验,失败则重试、换工具、追问用户或停止。
提示词可以描述流程,但真正可靠的 Loop 需要运行时记录状态、执行工具、控制预算、处理错误和输出日志。
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)
好的 Loop 不一定步数多,而是每一步都有信息增量。无效循环会反复查相同资料、重复失败动作或过度润色。
每轮是否产生新证据、新产物、新判断或明确阻塞。
工具选择是否正确,参数是否有效,失败是否能合理恢复。
该交付时能交付,该追问时能追问,该停止时不继续消耗。
交付物是否完整、准确、可验证,并且清楚标注假设和风险。
这个案例适合面试:它展示了 Agent 如何边查资料边更新计划,而不是一次性编完整 PRD。
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 里的后端需求、前端展示和验收标准。
只说“规划、执行、观察”还不够。面试里最好补上状态管理、预算控制、失败恢复和人工介入点。
A:Agent Loop 是 Agent 持续推进任务的循环机制。它先根据目标和当前状态规划下一步,再执行工具或动作,观察结果并更新状态,最后判断继续、修正、追问、交付或停止。
A:因为复杂任务通常无法一次拿到全部信息。Agent 需要边查资料、边调用工具、边观察结果,再根据新信息调整计划。这样比一次性生成更可靠,也更容易处理失败和不确定性。
A:包括目标、当前计划、已完成步骤、工具返回、关键观察、中间产物、预算、阻塞原因和待确认问题。没有这些状态,Agent 就无法稳定地跨轮继续工作。
A:要设置明确停止条件,包括完成条件、最大步数、最大工具调用次数、时间和成本预算、连续失败上限,以及需要人工确认的阻塞条件。每一轮都要判断是否真的产生了信息增量。
A:要做工具权限控制、参数校验、日志审计、预算限制、失败恢复和人工介入。尤其是写操作和高风险工具,不能让 Agent 自由循环执行,必须有确认和审批。
学完这一课,要能把一个复杂任务拆成多轮,并说明每轮的 plan、act、observe 和 continue 决策。
用户问订单未发货。写出三轮 Loop:查订单、查库存、生成解释或创建工单。
接口 500 增多。写出查监控、查日志、查发布记录、验证根因的观察和继续条件。
从粗略需求生成 PRD,列出每轮的检索、工具调用、观察结果和停止条件。