KEEL · 龙骨 · A CURRICULUM FOR THE AI ERA

11. 把脚本放进 API 和 worker — keel 龙骨

前面的 Harness 可以在单进程中运行。进入真实项目后,你还要处理请求生命周期、后台任务、持久化状态和多个 worker 并发。

前面的 Harness 可以在单进程中运行。进入真实项目后,你还要处理请求生命周期、后台任务、持久化状态和多个 worker 并发。

API 和 worker 分工

flowchart LR
    C[HTTP Client] --> A[API]
    A --> R[(Run Store)]
    A --> Q[Job Queue]
    Q --> W[Harness Worker]
    W --> M[Model Adapter]
    W --> T[Tool Executor]
    W --> R
    W --> E[(Event Store)]
    C --> S[Event Stream]
    E --> S

API 不应该在请求线程里无限等待所有模型和工具步骤。它可以创建 run_id,返回运行状态,让 worker 推进任务,客户端通过查询或事件流观察进度。

最小持久化对象

对象 关键字段 用途
Run run_id、owner、status、deadline 当前运行和权限
Step run_id、step、decision、status 恢复和诊断
Event sequence、type、payload_ref 观测和回放
Idempotency call_id、key、result 防止重复副作用
Approval call_id、approver、expires_at 恢复审批后的动作

worker 恢复必须先检查状态

worker 重启后不能默认从头执行。它应先读取:

  1. 运行是否已经 completed、failed 或 cancelled;
  2. 当前 step 是否已有成功的 ToolResult;
  3. 是否存在未过期的 approval;
  4. 工具调用是否有幂等记录;
  5. deadline 是否已经过去。

只有通过这些检查,才可以继续下一步。

服务化仍然不改变核心边界

无论代码部署成一个脚本、API 还是队列 worker,下面几条都不变:

本章自测

如果客户端断开连接,运行是否应该取消?不一定。客户端连接生命周期和 Agent 运行生命周期可以不同,需要业务明确选择,并通过事件让客户端稍后重新观察。

下一章:完成事件诊断助手

进入 keel 阅读