Durable Workflow · Temporal 与 Agent 控制面分工
🏠 返回 04-README | ⬅️ 03-Java-Agent编排 | ➡️ 02-Buy领域智能体
定位:回答 Staff 白板「LangGraph checkpoint 够了为什么还要 Temporal?」——Agent 环内状态vs跨天业务流程的分工。Java 编排选型见 03;LangGraph interrupt 见 04-Agent框架;checkpoint 语义见 96 §2.0、13 §9.4。
L1 · 是什么
1.1 一句话定义
Temporal(或同类 durable execution 引擎)管理长寿命、多角色、强审计的业务流程;Agent Runtime(Spring AI loop / LangGraph)管理秒–分钟级的推理–工具循环。二者通过Activity 边界衔接:Workflow 定「何时、谁批、是否可重试」;Agent 定「这一步怎么推理、调哪些 tool」。
1.2 选型决策树
| 场景 | 推荐 | 反例 |
|---|---|---|
| 客服单轮 RAG | Spring AI loop | 上 Temporal 过重 |
| 退款 3 天多级审批 | Temporal + Agent Activity | 纯 checkpoint 难审计 SLA |
| 99% 完成 OOM | LangGraphcheckpoint 续跑 | Temporal 不替代步内状态 |
| 大促批处理补发 | Temporal批 Workflow | 同步 HTTP Agent |
1.3 与 Spring Statemachine 对照(03)
| 方案 | 甜区 | 与 Temporal |
|---|---|---|
| Spring Statemachine | 单 JVM、表单式状态 | 无跨进程 durability |
| Plan-Execute 自研 | 中等复杂度 | 自研持久化 ≈ 半套 Temporal |
| Temporal | 分布式、重试、定时器、审计 | 生产首选(长流程) |
L2 · 架构分工
2.1 两平面模型
| 存储 | 内容 | 续跑问题 |
|---|---|---|
| Workflow History | 活动完成记录、定时器、信号 | 「审批到了吗」 |
| Agent Checkpoint | messages、plan[]、tool 轨迹 | 「这一步 LLM 跑到哪」 |
| 向量库 | 知识 | 「政策文本是什么」——不用于续跑 |
2.2 Activity 设计原则
- Activity 要幂等:
executeRefund(orderId, idempotencyKey)。 - Activity 粒度 = 业务原子步,不是「一次 LLM call」。
- LLM 环放在 Activity 内,Activity 超时 > LLM P99 + 工具链。
- HITL 用
Workflow.awaitCondition/ Signal,不要阻塞 HTTP 线程。
2.3 Java 示意(Temporal Java SDK · L1)
API 以 Temporal Java SDK 为准;以下为面试示意结构。
@WorkflowInterfacepublicinterfaceRefundWorkflow{@WorkflowMethodRefundResultrun(RefundRequestreq);}publicclassRefundWorkflowImplimplementsRefundWorkflow{privatefinalRefundActivitiesacts=Workflow.newActivityStub(RefundActivities.class,ActivityOptions.newBuilder().setStartToCloseTimeout(Duration.ofMinutes(5)).setRetryOptions(RetryOptions.newBuilder().setMaximumAttempts(3).build()).build());@OverridepublicRefundResultrun(RefundRequestreq){SlotBundleslots=acts.collectSlots(req);AgentPlanplan=acts.runAgentPlan(req,slots);// 内部 Spring AI + checkpointacts.waitHumanApproval(req.orderId(),plan.riskSummary());returnacts.executeRefund(req.orderId(),req.idempotencyKey());}}Agent Activity 内部仍可用 03 Plan-Execute + Redis checkpoint;Temporal 只保证Activity 级至少一次执行与超时重试。
2.4 LangGraph interrupt vs Temporal Signal
| 机制 | 层次 | 典型用法 |
|---|---|---|
LangGraphinterrupt() | Agent 图内人审 | 单会话暂停/恢复 |
| TemporalSignal | 业务流程 | 经理手机点「批准」恢复 Workflow |
| TemporalQuery | 只读状态 | 工单系统展示进度 |
组合:客服 Agent 图内interrupt收集材料 → Workflow 进入waitHumanApproval→ Signalapproved→ 下一 Activity 调写工具。
L3 · 生产要点
3.1 版本与部署
| 对象 | 策略 |
|---|---|
| Workflow 代码 | Workflow.getVersion()做兼容迁移(Temporal L1) |
| Agent 四维 | Activity 入参带release_id(11-Registry) |
| Worker 部署 | Agent Worker 与 Temporal Worker可同 Pod 可拆;拆则 gRPC 调 Agent 服务 |
3.2 失败模式
| ID | 现象 | 分工 |
|---|---|---|
RUN_99P_CRASH | 最后一步 OOM | Checkpoint续跑步内;Workflow 不重放已完成 Activity |
RUN_99P_DUPLICATE_WRITE | 重试双写 | Activity幂等键+ 业务去重表 |
RUN_RESUME_FULL_REPLAN | 恢复后计划漂移 | Checkpoint 存plan[]状态,禁止全量重规划(96 §4) |
ACTIVITY_TIMEOUT | LLM 太慢 | 调超时 / 环内降级小模型 |
3.3 观测
- Workflow:
workflow_id=order_id等业务键。 - Agent span:挂
parent_trace= Activity span。 - 统一
release_id进 08-可观测。
3.4 与 Camunda / Step Functions
| 引擎 | 何时口述 |
|---|---|
| Temporal | 云原生、代码即流程、强重试语义 |
| Camunda | 已有 BPMN 资产、业务分析师改图 |
| AWS Step Functions | 全 AWS、Agent 在 Lambda 内 |
Staff 原则:选已落地引擎,不为了面试换栈。
L4 · Staff 答辩
4.1 STAR-M-P:退款审批 3 天超时
| 要素 | 内容 |
|---|---|
| S | 退款需 L1/L2 审批,平均 2.8 天;纯 Redis session 丢状态 |
| T | 可审计、可恢复、不重复退款 |
| A | Temporal Workflow;runAgentPlanActivity 内 Spring AI;审批 Signal;executeRefund幂等键 |
| M | 会话丢失因无 durable workflow |
| P | 重复退款 0;审计 100% 关联workflow_id |
4.2 大厂追问答
Q1 · 全用 LangGraph 行不行?
答:步内可以;跨天审批、定时器、多系统回调应用 Workflow 引擎。否则自研调度 ≈ 重写 Temporal。
Q2 · Activity 里 LLM 调用 90s 怎么办?
答:startToCloseTimeout> P99;环内 streaming;超长则拆 Activity或异步回调 Pattern。
Q3 · Temporal 与 Kafka?
答:Kafka事件通知;Temporal状态机与重试。Agent 侧「任务完成」可发 Kafka,编排不交给 Kafka 消费组随意重试。
Q4 · Python Agent + Java Workflow?
答:常见:Java Temporal Worker+Python Agent gRPC Activity(见 05-python-agent §集成)。契约:protobuf +release_id。
Q5 · 何时用 Spring Statemachine 代替 Temporal?
答:单服务、无跨天、团队无 Temporal 运维时 Statemachine 够用;多服务、审计、定时器选 Temporal。
4.3 与03 Supervisor 组合
| 模式 | Temporal | Supervisor |
|---|---|---|
| 跨服务退款审批 | Workflow 主 | Activity 内单次runAgentPlan |
| 同 JVM 多 Worker 争用 | 不推荐 | EventBus + Supervisor |
| 定时催办 | Workflow Timer | — |
原则:Supervisor 不解跨天;跨天用 Workflow 等 Signal。
4.4 部署拓扑(白板)
- API只
startWorkflow,不阻塞等 LLM。 - Agent Service可独立扩缩;Activity 通过 gRPC 调用。
- Checkpoint与 Workflow DB分库——避免混表。
4.5 测试策略
| 层 | 测什么 |
|---|---|
| Workflow | Temporal Test Workflow Environment(时间跳跃) |
| Activity | Mock Agent;断言幂等键 |
| Agent | Golden trajectory(10) |
4.6 容量与 SLO
| 指标 | 建议 |
|---|---|
| Workflow 并发 | 按审批人数量与峰值单量估算;与 Agent GPU 分开扩容 |
| Activity 超时 | LLM P99 × 1.5 + tool 链 |
| History 保留 | 合规域 ≥1 年;与审计系统对接 |
| Worker 版本 | 与release_id联动;Workflow.getVersion做兼容 |
4.7 常见追问速答
- Q:能否用 Kafka 代替 Temporal?— Kafka 传事件,不负责「等到周三经理批准」这类状态;会自研调度器。
- Q:Camunda BPMN?— 已有 BPMN 资产优先 Camunda;绿场 Java 云原生常用 Temporal。
- Q:Serverless?— Activity 调 Lambda 可行;长连接 LLM仍建议专用 Agent 服务。
- Q:与 96 原型 G?— 批处理 G 用 Temporal;单会话 A/B 用 Agent checkpoint。
§8 决策速查表(面试翻牌)
| 症状 | 首选 |
|---|---|
| 用户等 3 天审批 | Temporal + Signal |
| 单会话 20 步工具环 | LangGraph checkpoint |
| 每晚批处理 10 万单 | Temporal + 队列 |
| 仅 JVM 内 2h 流程 | Spring Statemachine 03 |
| 跨服务补偿 | Temporal Saga |
§9 与 Registry / Eval 联动
Activity 入参必须带release_id(11)。Workflow 升级用Workflow.getVersion();禁止Activity 内隐式读「最新 prompt」。
发布前:Golden 含长流程用例(审批超时、Signal 恢复)→ eval/golden 扩展。
§10 白板 45min 脚本
| 段 | 画/说 |
|---|---|
| 决策树 | §1.2 |
| 两平面 | Workflow History vs Checkpoint |
| 退款序列 | §2.3 Java 示意 |
| Signal HITL | §2.4 |
| STAR | §4.1 |
5. 面试前 Checklist
- 画决策树:checkpoint vs Temporal
- 画两平面:Workflow History vs Agent Checkpoint
- 述Activity 四原则(幂等、粒度、超时、HITL Signal)
- 对比LangGraph interrupt vs Temporal Signal
- 口述STAR退款审批
- 列RUN_99P_* 与 Activity 重试关系
6. 导航
| 关联 | 路径 |
|---|---|
| Java 编排 | 03-Java-Agent编排 |
| LangGraph | 04-Agent框架 |
| Playbook 可靠性 | 13 §9.4 |
| Registry | 11-Registry |
| 参考架构 | 27 |
| 96 Catalog | 96 §2.5 RUN_* |
官方文档与源码(一级依据)
写作规范:docs/official-sources-registry.md §0
L1 · 官方文档
- Temporal — Documentation
- Temporal — Java SDK Develop
- LangGraph — Interrupts
- LangGraph — Persistence / Checkpoints
L2 · 官方源码
- temporalio/sdk-java
- langchain-ai/langgraph