Skip to content

定时任务与后台任务 ​

字数
826 字
阅读时间
4 分钟

ctx.schedule(由 @chatluna/schedule 提供)负责管理定时器、条件监视与会话唤醒;ctx.background(由 @chatluna/background 提供)则负责长任务的托管执行与状态通知。

定时任务 ​

你可以通过 ctx.schedule 创建与调度定时任务。它支持单次执行、周期运行,以及按 key 去重覆写:

方法说明
create(input)创建新的定时任务
set(input & { key })按 key 覆写任务:同一会话下相同的 key 仅保留一个
update(id, patch) / remove(id)修改或删除指定任务
cancel(id)取消指定任务(remove 的别名)
list(filter?)列出符合条件的任务列表
fire(id)立即手动触发一次任务
runsOf(id, limit?)获取指定任务的历史执行记录
stats()获取任务、监视条件与唤醒的统计数据
scope(name, provider)注册监视条件的作用域提供者

唤醒 ​

唤醒机制用于在满足预设时机时,主动唤醒指定的会话:

方法说明
wakeup(target, input)安排一次会话唤醒
wakeupCount(key)获取当前会话下指定 key 的唤醒任务数量
firesToday(key)获取指定 key 今日已触发的次数

配置项 input 支持 after、at、when、expires、fallback、times、gap、reason、key 和 cancelOn。传入 cancelOn: 'reply' 时,一旦用户发送新回复,就会自动取消该唤醒任务。

监视条件 ​

你可以通过 when 字段定义条件谓词表达式。checkSource(source) 会分析表达式依赖的来源(时间、消息或模型调用),并据此自动确定轮询检查频率。监视任务的消息计数会按 messages 从上次触发开始累计。

后台任务 ​

如果某些长耗时操作无法在单个交互回合内同步完成,你可以将它们交给 ctx.background 托管:

方法说明
start(input)启动一个新的后台任务
adopt(work, input)接管正在运行中的异步工作
get(id) / list({ owner? })查询单个任务详情,或列出任务列表
listFor(agent) / itemFor(id, agent)获取面向指定 Agent 的任务视图与条目
consume(item) / touch(item)标记任务已读状态,或刷新心跳保活
deliver(item)主动将任务执行结果投递给目标
prune()清理已过期的历史后台任务

BackgroundItem ​

后台任务实例 BackgroundItem 提供了控制生命周期与同步输出的接口:

成员说明
log(line) / write(chunk, stream)追加单行日志,或向指定数据流写入数据块
setProgress(text)更新当前任务的执行进度描述
finish(status, value, error?)标记任务结束(支持 completed、failed、cancelled)
cancel(reason?)向任务发送取消请求并记录原因
wait({ timeout? }) / snapshot()等待任务结束,或获取当前任务的状态快照
read({ from?, stream? })读取任务缓冲区的输出日志或数据流

任务执行结束后,系统会根据配置的通知策略(如唤醒、合并至下一轮回复或静默记录)将结果回传给对应会话。

继续 ​

页面历史

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