Back to Chatgpt On Wechat

scheduler - 定时任务

docs/tools/scheduler.mdx

2.0.82.7 KB
Original Source

创建和管理动态定时任务,支持灵活的调度方式和执行模式。

依赖

依赖安装命令
croniter ≥ 2.0.0pip install croniter>=2.0.0

安装核心依赖时已包含:pip3 install -r requirements.txt

调度方式

方式说明
一次性任务在指定时间执行一次
固定间隔按固定时间间隔重复执行
Cron 表达式使用 Cron 语法定义复杂调度规则

执行模式

  • 固定消息发送:到达触发时间时发送预设消息
  • Agent 动态任务:到达触发时间时由 Agent 智能执行任务

使用方式

通过自然语言即可创建和管理定时任务:

  • "每天早上 9 点给我发天气预报"
  • "每隔 2 小时检查一下服务器状态"
  • "明天下午 3 点提醒我开会"
  • "查看所有定时任务"
<Frame> </Frame>

结果进入会话上下文

定时任务在隔离 session 中执行(内部规划与 tool 调用不污染用户会话),但最终输出会作为一对消息回写到接收者的真实会话,用户可以直接追问"刚才那条第二点展开说说"。

默认策略

  • Agent 动态任务的输出进入上下文
  • 固定消息类任务默认不进入上下文(可通过配置打开)
  • 每个会话最多保留最近 3 对 scheduler 消息,更早的自动清理;普通用户消息不受影响

配置项

配置项默认值说明
scheduler_inject_to_sessiontrue总开关
scheduler_inject_max_per_session3每会话保留 scheduler 消息对数上限
scheduler_inject_send_messagefalse是否同时注入固定消息类任务
json
{
  "scheduler_inject_to_session": true,
  "scheduler_inject_max_per_session": 3,
  "scheduler_inject_send_message": false
}

任务执行时的上下文

定时任务的隔离 session 会保留最近几次执行的对话历史,便于做"对比上次"、"延续之前结论"等操作;但为了避免高频任务(如每 5 分钟监控)prompt 越积越长,会按公式自动裁剪:

scheduler_keep_turns = max(1, agent_max_context_turns / 5)

agent_max_context_turns 默认为 20,所以定时任务每次执行默认带最近 4 轮历史。需要更长记忆可调大 agent_max_context_turns

<Note> 群聊场景(飞书 / 企微群机器人 / 钉钉等)下用户的真实 session_id 形如 `user_id:group_id`,与 receiver 不同。创建任务时会自动记录正确的 session_id;老的 `tasks.json` 缺该字段时回落到 receiver,行为与历史版本一致。 </Note>