Agent 工作流设计:从单次对话到多步骤自动化 · Lesson 4 of 6

第 4 课:状态管理和上下文传递

学习目标:

  • 区分工作流状态和 Agent 上下文
  • 掌握三种状态管理模式
  • 理解检查点和恢复机制

前置要求:第 3 课:如何拆解复杂任务 | 下一课 第 5 课 >>

为什么状态管理是工作流的核心

你设计了一个完美的工作流,10 个步骤,清晰的依赖关系。第 8 步时,服务器重启了。工作流崩溃。

重新运行?那前 7 步的工作(可能花了 30 分钟)全部白费。

这就是没有状态管理的代价。

状态管理解决三个问题:1

  1. 步骤间数据传递: 步骤 3 如何拿到步骤 1 和 2 的结果?
  2. 进度追踪: 工作流做到哪一步了?还剩多少?
  3. 故障恢复: 崩溃后能从中断点继续,而不是从头开始

没有状态管理,Agent 只能通过对话历史传递信息。对话历史会溢出,会丢失,会被 Agent 遗忘。

有了状态管理,工作流有一个明确的"内存",持久化、可查询、可恢复。2

状态 vs 上下文 vs 内存

这三个词容易混淆,先厘清概念:1

状态(State)

  • 当前任务的所有信息:做到哪一步、每步的结果、接下来做什么
  • 是快照:此时此刻工作流知道的一切
  • 存储:脚本变量、数据库、文件

上下文(Context)

  • 传递给单个 Agent 调用的信息
  • 是输入:这个 Agent 需要知道什么才能完成任务
  • 从状态中选择性提取:不是所有状态都给 Agent,只给相关的部分

内存(Memory)

  • 从过去学到的经验:之前做过什么、遇到过什么问题、解决方案是什么
  • 是历史:跨任务、跨会话的长期知识
  • 本课不涉及(长期内存是另一个复杂话题)

举个例子:

关键原则: 状态是全局的,上下文是局部的。3

状态管理模式 1:脚本变量(内存状态)

适用场景: 短工作流(< 10 分钟),不需要跨进程或跨机器。

优点: 简单、快速、无需外部依赖。

缺点: 进程崩溃后状态丢失,无法恢复。

基本模式

状态存在哪里? 在函数的局部变量里(processedresultserrors)。

如果进程崩溃? 状态全部丢失,必须从头开始。

改进:结构化状态对象

好处: 状态结构清晰,容易传递给其他函数,容易序列化(如果需要持久化)。

状态管理模式 2:检查点(Checkpointing)

适用场景: 中等时长工作流(10-60 分钟),耗时操作后需要保存进度。

优点: 崩溃后可以从最近的检查点恢复,避免重复工作。

缺点: 需要设计检查点位置和恢复逻辑。1

检查点位置选择

检查点策略:

  • 定期检查点: 每 N 个任务或每 M 分钟保存一次
  • 阶段检查点: 每个大阶段完成后保存(如"分析阶段完成")
  • 关键操作前: 不可逆操作(如部署、删除)之前保存

状态管理模式 3:外部存储(持久化状态)

适用场景: 长时间运行的工作流(> 1 小时)、需要跨机器协调、需要人工审批。

优点: 状态持久化,进程崩溃、机器重启都不影响,支持暂停/恢复。

缺点: 需要外部依赖(数据库、Redis)、增加复杂度。4

基本实现

关键模式: 状态机(State Machine)2

工作流的阶段就是状态机的状态:

init → processing → awaiting_approval → approved → finalizing → completed                     rejected → cancelled

每个阶段转换都保存到外部存储,确保工作流可以从任何阶段恢复。

上下文传递的最佳实践

原则 1: 只传递必要的信息

为什么? 上下文越大,Agent 越容易分心,推理质量下降,成本上升。3

原则 2: 结构化上下文

为什么? 结构化上下文更容易被 Agent 理解,也更容易被你调试。

原则 3: 累积式上下文 vs 重置式上下文

累积式上下文: 每步的结果加到上下文中,越来越大。

重置式上下文: 每步清空上下文,只保留必要信息。

选择: 大部分情况用重置式,避免上下文爆炸。累积式只在后续步骤真的需要前面所有结果时使用(如最后的汇总步骤)。5

状态的可观察性

好的工作流应该能回答这些问题:

  • 当前在哪个阶段?
  • 完成了多少?还剩多少?
  • 遇到了多少错误?
  • 预计什么时候完成?

实现进度追踪


下一课: 第 5 课:错误处理和重试策略 — 学习如何让工作流在失败时优雅恢复,而不是直接崩溃

Footnotes

  1. MachineLearningMastery:AI 代理中的持久化内存和状态的 5 种架构模式 — https://machinelearningmastery.com/5-architectural-patterns-for-persistent-memory-and-state-in-ai-agents/ 2 3

  2. MindStudio:工作流状态 vs 会话状态 — https://www.mindstudio.ai/blog/workflow-state-vs-session-state-ai-agents 2

  3. Chrono Innovation:可扩展的代理 AI 工作流架构 — https://www.chronoinnovation.com/resources/agentic-ai-workflows-architecture/ 2

  4. Appamass:可靠 AI 代理工作流的状态管理模式 — https://appamass.com/en/blog/state-management-patterns-for-reliable-ai-agent-workflows-5yemlru6ui6cacast3l5

  5. Ranjan Kumar:构建会记忆的代理 — https://ranjankumar.in/building-agents-that-remember-state-management-in-multi-agent-ai-systems

Exercises

01

为下面三个工作流选择合适的状态管理模式(脚本变量、检查点、外部存储)并说明理由:

Level 1: 选择状态管理模式

工作流 A: 批量压缩 20 张图片,每张耗时 5 秒,总共 100 秒

工作流 B: 训练一个机器学习模型,需要 50 个 epoch,每个 epoch 10 分钟,总共 500 分钟(8 小时)

工作流 C: 审查 100 个 PR,每个 PR 需要人工批准后才能合并,整个流程可能持续几天

Done criteria · checked locally
02

为"多服务部署"工作流设计状态对象。工作流需要: (1) 构建 5 个服务的 Docker 镜像 (2) 推送到镜像仓库 (3) 依次部署到测试环境 (4) 运行集成测试 (5) 如果测试通过,部署到生产环境。

Level 2: 设计状态结构

要求:

  • 设计一个 JSON 对象表示工作流状态
  • 包含: 当前阶段、每个服务的状态、错误信息、时间戳
  • 说明在哪些点应该保存检查点
Done criteria · checked locally

My note

Jot down thoughts, sticking points, things you didn't get. Written to this course's appendix only — the lesson file is never touched.