前文介绍了 Human-in-the-Loop 和 Checkpoint 的基本概念,以及如何在 Agent Framework 中利用 Checkpoint 实现 Workflow 的故障恢复与回滚。
Agent Framework 中构建 Human-in-the-Loop 工作流
Agent Framework 中使用 Checkpoint 构建支持故障恢复的工作流
Agent Framework 中使用 Checkpoint 回滚(Rollback)工作流
Loop 确保工作流内部循环,Human-in-the-Loop (HITL) 保障用户交互,Checkpoint 则用于保存 Workflow 的运行状态。
对于 Human-in-the-Loop 工作流,Checkpoint 虽非必备,但能确保工作流在遭遇灾难时持续运行。
示例场景
本示例延续猜数字游戏场景。
Workflow 首先通过 RequestPort 请求用户输入数字。
RequestPort 将用户输入传导至 JudgeExecutor。
若数字过大或过小,JudgeExecutor 将结果返回给 RequestPort,后者再次请求用户输入新数字。
该流程循环往复,直至猜中目标数字。
此例与前文 Human-in-the-Loop 示例逻辑一致,区别在于引入了 Checkpoint。
本示例在整个 Workflow 运行过程中启用了 Checkpoint。
这不仅能在故障发生时恢复执行,还能根据业务需求回滚至特定检查点,重新执行后续流程。
核心代码
本例代码结构与前述 Human-in-the-Loop 示例完全相同,唯一差异在于启动 Workflow 时增加了 CheckpointManager:
var checkpointManager = CheckpointManager.Default;
await using StreamingRun checkpointedRun =
await InProcessExecution.RunStreamingAsync(
workflow,
new SignalWithNumber(NumberSignal.Init),
checkpointManager);
启用后,Framework 会在每个 Super Step 完成后自动创建 Checkpoint。
开发者无需手动保存 Workflow。
从第 2 个 Checkpoint 恢复
示例末尾使用以下代码:
const int CheckpointIndex = 1;
Console.WriteLine($"\n\n从第 {CheckpointIndex + 1} 个检查点恢复.");
CheckpointInfo savedCheckpoint = checkpoints[CheckpointIndex];
// 注意,我们将状态直接恢复到同一个运行实例。
await checkpointedRun.RestoreCheckpointAsync(savedCheckpoint, CancellationToken.None);
我们从第 2 个 Checkpoint 恢复 Workflow 运行状态。恢复后可见首次输入的数字值被保留,Workflow 继续执行。
小结
本节将 Human-in-the-Loop 与 Checkpoint 知识深度融合,旨在保障工作流的可恢复性,这是企业级工作流中最常见的技术手段之一。
源代码地址
https://github.com/bingbing-gui/dotnet-agent-playbook/tree/master/src/ai-agent/Agent-Framework/47-Checkpoint-Human-In-Loop

