Session
查看 Markdown持久化 Agent Session 是承载一段对话的一次 Flow run。每次模型调用和每次 Tool Call 都在一个 Step 中运行。因此崩溃、部署或长时间等待都不会重复已经完成的工作。
RunModelTool CallCallTool审批AwaitToolApproval模型调用RunModel每个标签都是 Dex 记录的一个 Step。
持久化 Agent Session
一次 Flow run 就是一个 Agent Session,Flow ID 就是 Session ID。Session Flow 由 Dex Agents 构建:Python 中是 dex-agents package,TypeScript 中是 @superdurable/dex-agents。框架适配器在其上接入一个 Agent 框架。
Session 把对话保存在 Attribute 中。Session 等待下一条用户消息时不占用 Worker 的 task slot。
模型调用在 RunModel Step 中运行。在大多数 harness 中,每个 RunModel Step 进行一次模型调用,每次 Tool Call 在自己的 Step 中运行。一个 turn 的 Step 如下:
| Step | 作用 |
|---|---|
RunModel | 进行一次模型调用并记录响应。 |
CallTool | 运行一次读操作或幂等写操作调用。Dex 可以重试它。 |
CallSingleAttemptTool | 运行一次其他写操作调用。Dex 最多运行它一次。 |
AwaitToolApproval | 等待人批准或拒绝一次 Tool Call。见 审批。 |
ResumeTurn | 等待这次模型响应的所有 tool result,然后回到 RunModel。 |
同一次模型响应中的 Tool Call 并行运行。全部完成后,ResumeTurn 把它们的结果发给模型。
延迟与成本
每个 Session Step 都是 SYNC 的:Dex 在 Worker 拿到 Step 之前提交它的开始,在 Session 继续之前提交它的结果,两者都写入对象存储。如果模型在一个 turn 中请求三个 tool 然后作答,这个 turn 需要六个 Step:两个 RunModel、三个 tool Step 和一个 ResumeTurn。性能 测得,在一台 2 vCPU 的 server 上、负载为峰值一半时,一个 SYNC Step 的 p50 约为 105 ms。三个 tool Step 并行运行,所以这个 turn 依次等待四个 Step。按这个 p50 计算,它们在模型和 tool 本身的时间之外,给这个 turn 增加约 0.4 秒。
RunModel Step 在 30 分钟内最多尝试三次。每次重试都会把模型调用再发给 provider 一次,因此要再付一次 token 费用。对于昂贵的调用,可以用 Python 中的 run_model_limit 或 TypeScript 中的 runModelLimit 减少尝试次数。默认值见 Step timeouts(英文)。
崩溃只会重复当时正在运行的 Step。Dex 不会重放整个循环。因此 Agent 代码不需要遵守确定性规则,代码修改会在下一个 Step 生效。
有两个 harness 会把更多工作放进一个 Step:
- Claude Agent SDK。 Claude Code CLI 在一个
RunModelStep 中运行 turn 的一个 segment。Segment 包含模型调用和读操作 Tool Call,失败的 segment 会整体重新运行。写操作一次一个地离开 segment,各自在自己的 Step 中运行,所以它们永远不会并行。 - LangChain 与 LangGraph。 一个
RunModelStep 把 graph 运行到它的下一批 Tool Call。Graph 在途中可能进行多次模型调用,重试时会把它们一起重复。
Session 记住什么
一个 Session 保存一段对话:它的 message、Tool Call 以及 Tool Call 的结果。新的 Session 从空白开始。Dex Agents 没有在不同 Session 之间共享的 memory。
长期 memory,例如用户的偏好或过往订单,请保存在你自己掌控的存储中。它可以是你的数据库,也可以是你为每个用户保留的一个 Flow。给 Agent 一个读取它的 tool,以及一个使用合适 policy 写入它的 tool。
已停止的 Session 在保留期内仍然可读,之后 Dex 会删除它。默认值见 History and retention(英文)。
框架支持
框架支持介绍你的框架怎样运行一个 turn、有哪些 Session 功能,以及它的限制。
下一步
- Tool Call
- 部署期间的 RPC:没有 Worker 运行时
send_user_message会怎样 - Agents reference(英文)