Skip to content

定时与后台任务 ​

字数
2734 字
阅读时间
11 分钟

TIP

本节介绍三种容易混淆的异步机制:按时间或条件触发的「定时任务」、因耗时较长转入后台的「后台任务」,以及角色自主约定的「稍后回来」。

这三种机制都是「不在当前回合中完成」的工作,区别在于由谁发起、何时执行、结果如何回到对话:

  • 定时任务:由用户、插件或模型创建,在指定时间、固定周期或某个条件成立时触发。
  • 后台任务:在当前对话中启动,耗时较长时转入后台,完成后再通知。
  • 角色自己的唤醒:角色根据对话语境,约定在某个契机重新发言。

定时任务页 · 任务列表与新建入口

定时任务 ​

前往「观测 → 定时任务」页面管理所有任务。除了管理员手动创建,模型和插件也可以注册任务。每个任务包含:

  • 触发方式:何时触发。
  • 执行内容:触发后做什么。
  • 重复规则:单次、重复指定次数,或在截止时间前持续重复。
  • 状态:活跃、暂停、完成或失败。
  • 宽限时间:因系统繁忙未能准时执行时,在宽限时间内仍会补发;超过则跳过,避免发送过期消息。

触发方式 ​

  • 时间点:在指定时间执行一次,例如「今天下午 3 点提醒开会」。
  • 固定间隔:按固定时长循环,例如每 2 小时检查一次更新。间隔过短会触发审批。
  • cron:按日历规则触发,例如工作日早上 9 点发早报,支持指定时区。
  • 关注条件:持续评估条件表达式,成立时触发,可以读取新消息、发言人、群聊沉默时长等数据。

执行内容 ​

  • 唤醒:相当于有人呼叫机器人,发起一次对话回合。可以附带触发原因(例如「早晨定时唤醒」),模型会据此生成发言。
  • 运行提示词:在后台用指定的模型或子代理运行一段提示词,结果可以「发送」到目标会话、作为「通知」推送到控制台,或「不发送」。

限制 ​

为避免循环调用和资源滥用,定时任务插件内置了以下限制,均可在插件配置中调整:

  • 每个会话同时活跃的任务上限。
  • 每个会话排队中的一次性唤醒上限。
  • 每个会话每日触发次数上限。
  • 周期任务的最短触发间隔,低于该值需要管理员审批。
  • 允许补发的最大延迟。

WARNING

定时任务通常无人值守运行,提示词要清晰、可重复执行,不要依赖即时语境。任务中调用写入或命令执行等敏感工具时,权限检查和审批照常生效。

关注条件 ​

关注条件适合「等待某件事发生」,例如等某人回复、等群聊冷场、等消息量达到阈值、等工作时间开始。条件表达式可以读取最新消息、发言人、沉默时长、当前时间和历史触发次数。

只依赖消息内容的条件在每次收到新消息时计算;依赖时间或沉默时长的条件按固定周期轮询。条件写得越简单,越容易排查。

意图判定 ​

对于「群友是否在讨论聚餐」这类无法用关键词判断的场景,可以启用意图判定:由轻量模型结合最近的聊天记录回答一个是/否问题。意图判定会调用模型,因此有严格的频率限制和每日额度。

后台任务 ​

定时任务等待未来某个时机开始;后台任务则立即开始,只是因为耗时较长而转入后台。

后台任务通常由工具调用触发。工具可以声明同步等待的超时时间和是否允许转后台;耗时达到阈值时,对话中先返回一个占位结果,完成后再把最终输出回传给会话。常见的有:

  • 耗时超过同步上限的终端命令或脚本。
  • 大文件下载、解压、转码或项目构建。
  • 需要持续轮询外部状态的监听任务。
  • 复杂的子代理流程。

后台任务有独立的状态(运行中、停止中、完成、失败、取消),可以实时查看进度和日志,并随时取消。完成后的结果可以立即打断当前对话发送、排队到下一回合汇报,或只在管理界面记录。

输出与日志 ​

后台任务的输出分为两路:

  • 模型可读的输出:结构化内容,完成或汇报时注入对话上下文。
  • 人类可读的日志:执行细节、标准错误和耗时统计,只在控制台展示。

日志缓冲区有上限,超出部分会被截断并标注。查看日志时支持按偏移量增量读取。

角色自己的唤醒 ​

在伪装引擎下,角色可以自主约定重新发言的契机,例如提问后等群友回复、群聊冷场后再开新话题、按作息在早晚问候,或注册关注条件观察群聊走势。

唤醒可以配置:

  • 最早可醒时间:在此之前不会被唤醒。
  • 醒来条件:等他人回复、等沉默达到某时长、到达指定时刻,或消息累积到指定条数。
  • 最大唤醒次数与最小间隔:防止过于频繁地发言。
  • 最长等待时间与超时处理:超时后放弃,或直接发言。
  • 主动说话后自动取消:等待期间如果因其他原因(例如被 @)已经发言,是否取消这次等待。

唤醒默认只生效一次;默认最长等待时间是最早可醒时间之后的 10 分钟。

WARNING

唤醒是条件触发,不是准时的定时器。条件太宽会频繁打扰,太窄则可能永远不触发。建议从「等回复」或「等沉默」这类简单条件开始。

页面怎么用 ​

「观测 → 定时任务」页面中:

  • 任务列表:按状态、目标会话和创建者(人工、插件、模型)筛选。
  • 新建任务:点击右上角的新建按钮,依次选择触发方式、填写参数、指定执行内容和目标会话,周期任务再配置重复规则。
  • 任务详情:下次执行时间、已执行次数、最近一次结果和错误信息。
  • 历史记录:按时间线查看每次触发的状态、结果和耗时。
  • 快捷操作:暂停、恢复、删除,或「立即执行」进行测试。

定时任务页 · 任务详情与运行历史

「观测 → 后台任务」页面列出所有运行中的后台任务,可以展开查看实时进度和日志,或直接取消。

推荐配置 ​

场景建议
日常提醒用「时间点」或「cron」;提示词写明目标(例如「播报今天的天气和日程」);宽限时间设为 5–15 分钟
群活跃维护用「关注条件」,例如沉默达到 45 分钟;务必设置每日上限和最小间隔,并配合角色作息
长任务封装为支持后台的工具,同步等待超时设为 5–10 秒,短请求仍同步返回
多群不要用一个任务向所有会话广播;为每个群单独创建任务,按各群节奏配置

常见问题 ​

任务没有按时执行:确认状态是「活跃」,检查下次执行时间、时区和服务器时间,以及是否达到每日上限。系统负载高且宽限时间太短时,任务可能被跳过。

任务执行了但没发消息:检查执行内容的投递方式是否为「不发送」或「通知」。通知只出现在控制台,不会发到对话。

关注条件一直不触发:检查表达式中的变量名,以及依赖时间的条件的轮询周期。先用单一条件(例如只看沉默时长)测试通过,再逐步组合。

后台任务一直在运行:在后台任务页查看日志是否仍在更新,判断是在处理还是卡死,需要时点击「取消」。取消后结果不再回传给对话,底层资源在作业退出后释放。

角色频繁醒来:唤醒条件太宽,或次数上限、最小间隔太小。缩短最长等待时间、调大间隔,或把条件限定为特定用户回复。

任务费用很高:主要来自频繁的意图判定和「运行提示词」。降低意图判定频率、设置每日额度;规则明确的场景改用时间或消息条数这类不调用模型的条件。

下一步 ​

页面历史

在 CC-BY-SA-4.0 许可下发布