一、定时任务能做什么

你只需要用自然语言告诉小蜜你想定时做什么,它就能帮你自动执行。比如:

  • "每天早上8点播放音乐"
  • "30分钟后提醒我喝水"
  • "晚上10点停止所有播放"
  • "每天早上7点语音播报该起床了"

小蜜会自动理解你的意思,创建定时任务。时间一到,它就帮你执行,还会语音告诉你结果。


二、怎么用

你不需要记任何命令,直接跟小蜜说就行。举几个例子:

你说的话 小蜜做的事
"每天8点播放音乐" 创建一个每天8点触发的任务,到点自动随机播放音乐
"10分钟后提醒我吃药" 创建一个10分钟后触发的任务,到点语音播报"定时提醒:吃药"
"晚上10点停止播放" 创建一个每晚10点触发的任务,到点停止音乐和广播
"把音量调到50" 直接调整音量(不需要定时)

时间表达

你可以说绝对时间,也可以说相对时间

  • 绝对时间:"每天8点"、"每周一9点"、"每月1号7点"
  • 相对时间:"10分钟后"、"半小时后"、"1小时后"

三、内置功能一览

小蜜目前支持这些定时动作:

播放控制:

  • 停止所有播放(音乐+广播+电视一起停)
  • 暂停所有播放
  • 继续所有播放

音乐:

  • 随机播放音乐
  • 搜索播放指定歌手/歌曲

广播/电视:

  • 随机播放广播
  • 随机播放电视
  • 播放指定电台/电视台(如CCTV1、中国之声)

语音/音量:

  • 语音播报自定义文字
  • 设置音量大小(0-100)

四、语音播报规则

定时任务触发后,小蜜会根据任务类型自动决定是否语音播报:

  • 提醒类(吃药、喝水、开会…):会语音播报"定时提醒:xxx"
  • 停止类(停止播放、关闭…):会语音播报"定时任务:xxx 已执行"
  • 播放类(播放音乐、播放广播…):不播报,你直接就能听到音乐
  • 其他:会语音播报"定时任务:xxx 已触发"
  • 任务失败:会语音播报"定时任务执行失败:xxx"

五、如何扩展自定义功能

如果你想定时做一些小蜜目前不支持的事情(比如控制家电、发消息等),只需要改 2 个文件,不需要懂 C++,也不需要重新编译程序。

第一步:在 task_scheduler_handler.js 中添加处理函数

打开文件 bin/agentconfigs/scripts/task_scheduler_handler.js,找到 ACTION_HANDLERS 对象,在里面加一个新的处理函数。

比如你想加一个"打开家电"的功能:

"turn_on_appliance": function(name) {
    if (typeof applianceController !== "undefined" && applianceController) {
        applianceController.turnOn(name);
        printlog(log.INFO, "[ActionDispatch] turn_on_appliance: " + name);
        return "已开启 " + name;
    }
    printlog(log.WARN, "[ActionDispatch] applianceController unavailable");
    return "applianceController unavailable";
}

写处理函数的要点:

  • 用 typeof xxx !== "undefined" && xxx 检查设备对象是否存在,防止程序崩溃
  • 用 printlog(log.INFO, ...) 记录日志,方便排查问题
  • 成功时返回描述文字,失败时返回 xxx unavailable

第二步:在 action_templates.json 中添加别名定义

打开文件 bin/agentconfigs/capabilities/action_templates.json,在 templates 数组中加一条:

{
    "alias": "turn_on_appliance",
    "description": "开启指定家电,{{name}}替换为家电名",
    "script": "executeScheduledAction(\"turn_on_appliance\", '{{name}}')",
    "category": "家电"
}

各字段含义:

  • alias:别名,和第一步的处理函数名保持一致
  • description:功能描述,告诉 Agent 这个动作是干什么的,{{name}} 是参数占位符
  • script:Agent 生成脚本时使用的模板,{{name}} 会被实际值替换
  • category:分类名,方便管理

完成后的效果

改完这两个文件后,保存即可生效(支持热重载,无需重启程序)。用户说"每天早上7点打开客厅灯",小蜜就会自动创建定时任务,到点执行打开客厅灯的操作。

更多扩展示例

关闭家电:

// task_scheduler_handler.js 中添加
"turn_off_appliance": function(name) {
    if (typeof applianceController !== "undefined" && applianceController) {
        applianceController.turnOff(name);
        printlog(log.INFO, "[ActionDispatch] turn_off_appliance: " + name);
        return "已关闭 " + name;
    }
    printlog(log.WARN, "[ActionDispatch] applianceController unavailable");
    return "applianceController unavailable";
}
// action_templates.json 中添加
{
    "alias": "turn_off_appliance",
    "description": "关闭指定家电,{{name}}替换为家电名",
    "script": "executeScheduledAction(\"turn_off_appliance\", '{{name}}')",
    "category": "家电"
}

发送通知:

// task_scheduler_handler.js 中添加
"send_notification": function(title, content) {
    if (typeof notifier !== "undefined" && notifier) {
        notifier.send(title, content);
        printlog(log.INFO, "[ActionDispatch] send_notification: " + title);
        return "通知已发送: " + title;
    }
    printlog(log.WARN, "[ActionDispatch] notifier unavailable");
    return "notifier unavailable";
}
// action_templates.json 中添加
{
    "alias": "send_notification",
    "description": "发送通知,{{title}}替换为标题,{{content}}替换为内容",
    "script": "executeScheduledAction(\"send_notification\", '{{title}}', '{{content}}')",
    "category": "通知"
}

六、完整示例

场景:用户说"每天早上8点播放音乐,晚上10点停止播放"

小蜜会创建两个定时任务:

任务1 — 每天8点播放音乐:

  • 任务名:播放音乐
  • 触发时间:每天 8:00
  • 执行动作:随机播放音乐

任务2 — 每天22点停止播放:

  • 任务名:停止播放
  • 触发时间:每天 22:00
  • 执行动作:停止所有播放

8:00 到了: 小蜜自动随机播放音乐,你直接就能听到,不会有语音干扰。

22:00 到了: 小蜜停止所有播放,并语音播报"定时任务:停止播放 已执行"。


七、相关文件

文件 作用
bin/agentconfigs/scripts/task_scheduler_handler.js 动作调度中心,所有执行逻辑在这里
bin/agentconfigs/capabilities/action_templates.json 动作别名定义,扩展功能时改这个
bin/agentconfigs/tools/定时任务.tool 定时任务工具,一般不需要改
bin/agentconfigs/agents/定时任务专家.agent 定时任务专家,一般不需要改
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐