跳到主要内容

01-agent-loop与控制流

核对日期:2026-05-13。

不稳定项:Agent SDK、模型工具调用能力、computer use、浏览器自动化、长上下文和规划框架变化较快;生产实现前必须以目标模型和 SDK 的最新能力为准。

1. 学习目标

本专题聚焦 Agent 的核心:受控循环。Agent 不是“会聊天的模型”,而是模型在系统约束下不断观察、决策、行动、更新状态并判断终止的执行系统。

学完后你应该能做到:

  • 画出一个最小 Agent loop。
  • 区分单次 LLM、Workflow、Agent 和多 Agent。
  • 设计最大步数、预算、停止条件和升级条件。
  • 识别循环、计划漂移、重复行动和目标丢失。
  • 判断什么时候不应该使用 Agent。

2. Agent 的工程定义

工程上,Agent 可以定义为:

模型在一个受控循环中,根据目标、状态和环境反馈,动态选择工具、更新状态并推进任务的系统。

它至少包含:

  • 目标:用户真正要完成什么。
  • 状态:当前进展、事实、约束和未决问题。
  • 决策:下一步做什么。
  • 工具:搜索、读取、写入、执行或调用业务系统。
  • 观察:工具返回和环境反馈。
  • 控制流:循环、停止、重试、降级和交接。
  • 权限:系统层允许或拒绝动作。
  • 评测:任务和轨迹是否成功。

如果没有工具、状态和控制流,通常只是普通 LLM 调用;如果步骤完全固定,通常是 Workflow。

3. Workflow 与 Agent

维度WorkflowAgent
控制流代码预定义模型动态选择
步骤数量固定或有限分支随任务变化
可预测性中到低
成本可控波动较大
调试看流程节点看轨迹
适合稳定流程、规则明确开放任务、多步探索
风险灵活性不足循环、漂移、越权

判断原则:

能用规则解决 -> 规则
能用单次 LLM 解决 -> 单次 LLM
能用固定步骤解决 -> Workflow
路径难以预定义且工具反馈有价值 -> Agent

4. 最小 Agent Loop

state = init(task)

for step in 1..max_steps:
decision = model.decide(state, allowed_tools)

if decision.type == "final":
return final_answer(decision, state)

if !policy.allowed(decision.tool, decision.args, state):
return escalate("tool_not_allowed", state)

observation = tool.run(decision.tool, decision.args)
state = update_state(state, decision, observation)
trace.record(step, decision, observation, state)

if budget.exceeded(state):
return escalate("budget_exceeded", state)

if stuck_detector.repeated(state):
return escalate("agent_stuck", state)

return escalate("max_steps_exceeded", state)

关键控制点:

  • allowed_tools 由系统给定,不由模型自己发现高风险工具。
  • policy.allowed 是系统判断,不能只靠 Prompt。
  • update_state 要结构化,不是把所有历史塞回上下文。
  • trace 要能回放每一步。
  • max_stepsbudget 是硬约束。

5. Stop Conditions

Agent 必须知道什么时候停。

停止条件说明
完成任务达到成功标准
信息不足缺少必要证据或权限
达到最大步数防止循环
达到预算控制 token、时间和工具成本
工具失败超过重试阈值
需要人工确认高风险动作或证据冲突
安全策略拦截注入、越权、敏感动作

没有停止条件的 Agent 不是真正的自动化,而是不可控的循环。

6. 计划与执行

计划可以帮助 Agent 组织任务,但计划不是合同。

计划字段建议:

字段说明
goal原始目标
success_criteria成功标准
steps初始步骤
current_step当前步骤
assumptions当前假设
blocked_by阻塞项
revision_reason计划修改原因

每次计划变化都应记录原因,例如:

  • 发现原假设不成立。
  • 工具返回新证据。
  • 用户补充约束。
  • 权限不足。
  • 成本或时间超预算。

7. 计划漂移

计划漂移常见表现:

  • 忘记用户原始目标。
  • 做无关子任务。
  • 重复搜索相同关键词。
  • 工具结果不支持下一步仍继续推进。
  • 把“草稿”误当成“已执行”。
  • 计划变化没有解释。

防护:

  • 状态中保存 goalsuccess_criteria
  • 每步决策要求说明服务目标的关系。
  • 检测重复工具调用。
  • 高风险动作前做人工确认。
  • trace 评测每一步是否必要。

8. Orchestrator Patterns

常见 agentic 模式:

模式适用风险
ReAct搜索、工具使用、资料整理思考漂移、工具误用
Plan-and-Execute多步任务计划过早失效
Evaluator-Optimizer写作、代码修复循环成本高
Orchestrator-Workers可拆分复杂任务子任务边界模糊
Supervisor多 specialist 调度过度架构

选择模式之前先问:固定 Workflow 是否足够?是否真的需要模型动态决定下一步?

9. 工程案例

9.1 只读代码库分析 Agent

目标:定位某功能实现和风险点。

循环:

  1. 解析问题。
  2. 搜索文件。
  3. 读取候选文件。
  4. 总结调用链。
  5. 如果证据不足,继续搜索。
  6. 输出带路径引用的结论。

控制:

  • 最大 8 步。
  • 只读工具。
  • 不允许执行写入命令。
  • 输出必须引用文件路径。

9.2 研究资料整理 Agent

目标:生成带引用的主题简报。

控制:

  • 来源必须可访问。
  • 快速变化信息标核对日期。
  • 观点和事实分离。
  • 不把未核实内容写成结论。

10. 常见反模式

反模式表现后果修正
固定流程强行 Agent明明 3 步固定还让模型规划成本高、不可控用 Workflow
无最大步数一直搜索和重试成本失控max_steps
状态靠聊天历史上下文膨胀遗忘和污染结构化状态
停止条件模糊不知道何时完成输出随机success criteria
计划不更新原因行为不可解释难复盘revision_reason

11. 练习

为“代码库只读分析 Agent”写一段 loop 伪代码,要求:

  • 最大 8 步。
  • 工具只允许 search/read。
  • 每步记录 trace。
  • 找不到证据时拒答。
  • 重复搜索 2 次后停止并升级。

12. 验收题

  1. Agent 和 Workflow 的控制流差异是什么?
  2. 最小 Agent loop 必须包含哪些机制?
  3. 为什么 policy.allowed 不能交给模型自己判断?
  4. 计划漂移有哪些表现?
  5. Agent 应该在哪些情况下停止或升级?
  6. 为什么“多个模型聊天”不等于多 Agent 系统?