DeerFlow 2.0 · 从入门到精通 目录

§15 定时任务

DeerFlow 2.0 有定时任务 MVP——注意是 MVP,有明确边界,但已经能打。

它解决什么

之前仓库里有内部定时器,但用户没法从产品里「创建、查看、暂停、触发、删除」常驻后台任务。MVP 先把这些管理面做出来,自然语言建任务留到后面。

支持的形态

维度 支持 不支持
任务类型 once(一次性)、cron(周期) interval(间隔)
上下文模式 fresh_thread_per_run(默认)、reuse_thread ——
触发 定时 + 手动 trigger IM/Channel 派发

为什么不支持 interval?MVP 故意砍掉,因为它要多一套解析、多前端校验、多边界 case,而 once + cron 足以证明调度架构。

它靠 DB 租约保证安全

调度器默认关闭,要显式开:

scheduler:
  enabled: false
  poll_interval_seconds: 5
  lease_seconds: 120
  max_concurrent_runs: 3
  min_interval_seconds: 60

核心保障是 DB 租约(lease):每个轮询周期,调度器用一条 DB 事务原子地「认领」到期任务(设 lease_owner + lease_expires_at + 临时 running),避免多实例重复跑。任务 owner 隔离——别人的任务你列不到也改不了。

每次触发,都走和手动触发相同的 run-launch helper,不另搞一套运行时。重叠时按固定规则 skip,错过按 run_once 补最新一次。

REST 端点集中在 /api/scheduled-tasksGET / POST / PATCH/pause /resume /trigger/runs 历史。

标叔的结论:定时任务的「工程克制」值得学——先管理面、后自然语言;先 once/cron、后 interval;默认关、显式开。每一刀都为了「第一个 PR 能被审、能被安全运维」。你做功能,也该这么切。

上下文会膨胀。下一章讲怎么管。