当前位置:首页 > 人工智能 > 正文

2.4 QwenPaw 计划/任务/心跳详解

计划模式(Plan Mode)

2.4 QwenPaw 计划/任务/心跳详解

计划模式让智能体把复杂请求拆成可追踪的步骤:生成一份包含若干子任务的结构化计划,在您确认后再逐步执行,并在控制台侧栏实时展示进度。

计划模式默认关闭;只有在您为某个智能体开启后,该智能体才会在对话中挂载计划相关功能。

本功能在 v1.1.4 中作为可选能力引入。

如果您还没看过 项目介绍,建议先大致了解智能体和控制台的基本概念。


计划模式能做什么?

能力说明
结构化拆解将用户需求分解为有序子任务,每个子任务包含名称、描述与可验收的预期结果
人机协同计划生成或大幅修订后,先向您展示并等待确认,再开始执行子任务
状态跟踪计划与子任务均有状态(待办 / 进行中 / 完成 / 放弃),便于在长对话中保持节奏
可视化启用后,控制台聊天页可打开 Plan 侧栏,实时查看当前计划与子任务进度

第一步:启用计划模式

在控制台中开关(推荐)

  1. 打开 控制台 并切换到目标智能体。

  2. 进入 设置 → 智能体,展开对应智能体的配置卡片(React Agent 卡片)。

  3. 打开 Plan Mode(计划模式) 开关。

开关状态会写入当前智能体工作区下的 agent.json 中的 plan.enabled 字段。

直接编辑配置文件

在 $QWENPAW_WORKING_DIR/workspaces/<agent_id>/agent.json 中设置:

{
  "plan": {
    "enabled": true
  }}

保存后,服务会在后续请求中加载新配置(若需立即生效,可按环境实际情况重启或刷新控制台)。

更完整的配置字段说明见 配置与工作目录


第二步:发起计划任务

在已为该智能体启用计划模式的前提下,在对话中发送:

/plan <您对任务的简要描述>

示例:

/plan 整理项目的 README 和 API 文档,确保内容准确并补全缺失章节

行为要点:

  1. 前缀会被去掉:传入模型的用户内容只有 <您对任务的简要描述> 本身,便于模型聚焦任务意图。

  2. 先建计划:这次请求会要求模型先调用 create_plan 生成计划——在此之前,其它工具调用会被拦截并提示先建立计划。

  3. 等待您确认:计划生成后,模型会把计划展示给您,等待您确认才开始执行子任务。您可以:

    • 回复确认(「好的」「开始」「ok」等)→ 模型开始执行第一个子任务

    • 提出修改意见 → 模型重建计划后再次等待确认

    • 取消 → 模型放弃该计划

若启用了计划模式但不使用 /plan 前缀,日常闲聊不受影响;只有使用 /plan 时才会触发上述「先建计划」的流程。


执行流程

确认计划后,模型会按子任务顺序逐步推进,并调用相应工具完成每个子任务:

  1. 将第一个子任务标记为进行中,开始执行

  2. 每轮通过工具调用推进子任务,完成后记录结果并标记为完成

  3. 自动推进到下一个子任务,直到所有子任务结束

  4. 最后将整个计划标记为完成

补充说明:

  • 小幅修订:若子任务执行过程中需要小范围调整计划(如修改描述、增删子任务),模型可用 revise_current_plan 完成,修订后会再次展示并等待确认。

  • 推翻重来:若用户明确要求推翻重来,模型会先放弃当前计划,再新建一份,而不是反复修订。

  • 工具优先:每轮推理提示会强调尽量包含工具调用,让 ReAct 循环持续前进,避免只输出文字而卡住。


子任务状态

计划与子任务共享同一套状态:

状态含义
todo尚未开始
in_progress当前正在执行
done已完成
abandoned放弃(计划或子任务不再推进)

控制台 Plan 面板会用图标区分各子任务状态,进度条统计「完成 + 放弃」的子任务数与总数之比。


控制台中的 Plan 面板

开启计划模式后,聊天工具栏会出现 Plan 图标;点击后从右侧打开抽屉面板,展示:

  • 当前计划的名称、描述与整体状态

  • 子任务列表(名称、描述、状态,若已有结果则显示 outcome)

  • 总体进度条

面板通过 服务器推送(SSE) 实时接收计划变更事件,同时每约 5 秒轮询一次兜底,防止漏事件。查询时会带上当前会话 ID;若面板短暂显示为空,可尝试关闭后重新打开触发刷新。


计划与对话上下文

  • 计划状态会随会话一起持久化,同一会话内的未完成计划可以恢复。

  • 使用 魔法命令 中的 /clear 或 /new 清空上下文时,计划状态也会同步清空,控制台 Plan 面板随之更新为空。


与普通对话的区别

场景行为
已启用计划模式,但用户未使用 /plan不会无条件要求模型「必须先写计划」;日常闲聊不受影响
用户使用 /plan …触发「先建计划」流程,确认后再逐步执行
一份计划刚结束或被取消提示会引导模型基于您最新消息决定是直接回答,还是开启新的结构化任务

这样可以在同一智能体上兼顾「偶尔需要强结构化」与「日常随口问答」,不需要为此切换智能体。


相关页面


定时任务

2.4 QwenPaw 计划/任务/心跳详解

在 QwenPaw 里,「定时任务(cron job)」用于让系统在指定时间自动执行动作,比如:

  • 工作时段每 25 分钟提醒起身喝水或远眺,减少疲劳。

  • 工作日 9:30 自动整理当日热门科技资讯并推送简报。

和 心跳 不同,定时任务支持多条任务并行,每条任务都可以独立配置执行时间、内容和投递目标。


循环任务 vs 日程任务

在实际使用里,定时任务通常有两种组织方式:

  • 循环任务:强调“每隔多久”执行一次,例如每 15 分钟、每 2 小时、每天 9:00。

  • 日程任务:强调“在什么日历时间点”执行,例如 2026 年 1 月 1 日 9:00。

两者底层都由统一调度器驱动:循环任务使用 Cron 表达式,日程任务使用指定起始时间与可选重复规则。你可以按业务习惯选择“间隔视角”或“日程视角”来配置任务。

常见循环任务示例:

2.4 QwenPaw 计划/任务/心跳详解

常见日程任务示例:

2.4 QwenPaw 计划/任务/心跳详解

日程任务支持创建 一次性任务/循环任务指定结束时间/循环任务指定结束次数,详情见下方创建定时任务。

管理定时任务

创建任务

如果定时任务没有创建成功,可以参考 FAQ 的 定时任务错误排查 寻找原因

  1. 点击 创建任务 按钮。

2.4 QwenPaw 计划/任务/心跳详解

  1. 填写信息:

    • 选择 text:发送消息内容中的固定文本

    • 选择agent:填写请求内容,会定时向QwenPaw转发content.text中的请求文本

    • 调度类型选择 循环任务,可选择执行时间;如果选项不满足需求,可填写 Cron 表达式(五段式,如 0 9 * * * = 每天 9:00)。时区默认采用当前智能体的用户时区,可在此修改。

    • 调度类型选择 日程任务,可点击执行时间,以日历形式进行选择。

    • 选择 无限重复,该日程任务会一直按照执行时间和频率执行下去,此时更类似于循环任务执行方式。

    • 选择 终止于某天,并选择 截止时间,则在超过截止时间后,该日程任务不会再执行。

    • 选择 限定次数,并给定 执行次数, 则该日程任务在执行达到该次数后,不会再执行(不包括手动执行)。

    • 当关闭 重复执行 按钮时,可以理解为创建了一次性任务,将在指定的执行时间只执行一次。

    • 当开启时,可选择 重复频率 (每隔多少天)和 结束条件

    • 基本信息 —— 给任务一个名称,并打开启用开关。

    • 运行结果是否入收件箱 —— 开启后,任务执行结果将自动落入收件箱中,点击可查看任务的执行轨迹。

    • 调度

    • 任务类型及内容

    • 投递 —— 选择目标频道(如 Console、dingtalk)、目标用户ID、目标会话ID。支持直接下拉选择,选项与会话页面中存储的会话内容对应的 Channel - userID - SessionID 相匹配,同时也支持自定义输入。

    • 共用会话 —— 开启时,与目标用户共用会话。关闭时,循环任务将在独立的会话中运行,适用于不需要会话记忆历史的独立任务。

    • 高级选项 —— 按需调整最大并发数、超时时间和宽限时间。

  2. 点 保存

查看任务执行记录: 列表视图下,每行任务最右侧都有 执行记录,点击可查看该定时任务在什么时间,以什么方式(定时/手动),是否成功触发。

启用 / 禁用任务: 点击行内的开关即可。

编辑任务: 先禁用需要编辑的任务,点击 编辑 按钮 → 修改任意字段 → 保存

立即执行一次: 点击 立即执行 → 确认,任务会马上运行一次。

删除任务: 先禁用需要删除的任务,点击 删除 → 确认。

日历视图: 新增 日历视图,所有 日程任务 会按日期展示在日历中,方便快速查看当天安排与后续计划。点击任务可打开对应的编辑任务页面,方便对任务进行修改。

2.4 QwenPaw 计划/任务/心跳详解


更多创建方式

方式一:对话创建

创建定时任务最简单的方式是直接与 QwenPaw 对话,让QwenPaw帮忙创建:

未来七天内,每天早上八点为我查询当天天气。

创建成功后,可以在控制台任务列表中看到该任务。

方式二:从模板创建

新增 从模板创建 功能,可以先选择 循环任务 或 日程任务 模板,再按需调整名称、触发时间和消息/请求内容后保存。默认投递到控制台的 cron_job session,UserID 默认为default,可自行修改为需要的投递目标。

2.4 QwenPaw 计划/任务/心跳详解

方式三:CLI

详见 CLI的 qwenpaw cron 章节。常用命令:

qwenpaw cron list
qwenpaw cron create ...
qwenpaw cron state <job_id>
qwenpaw cron run <job_id>
qwenpaw cron pause <job_id>
qwenpaw cron resume <job_id>
qwenpaw cron delete <job_id>

示例(每天 9 点发固定文本):

qwenpaw cron create \
  --agent-id default \
  --type text \
  --schedule-type cron \
  --name "每日早安" \
  --cron "0 9 * * *" \
  --channel dingtalk \
  --target-user "你的用户ID" \
  --target-session "你的会话ID" \
  --text "早上好,记得查看今天待办。"

示例(每 2 小时向 QwenPaw 询问并投递回复):

qwenpaw cron create \
  --agent-id default \
  --type agent \
  --schedule-type cron \
  --name "待办巡检" \
  --cron "0 */2 * * *" \
  --channel dingtalk \
  --target-user "你的用户ID" \
  --target-session "你的会话ID" \
  --text "请检查我的待办,并输出优先级最高的三项。"

示例(日程一次性:只执行一次):

qwenpaw cron create \
  --agent-id default \
  --type text \
  --schedule-type scheduled \
  --name "明早组会提醒" \
  --run-at "2026-05-13T09:00:00+08:00" \
  --channel dingtalk \
  --target-user "你的用户ID" \
  --target-session "你的会话ID" \
  --text "9 点组会提醒" \
  --save-result-to-inbox

示例(日程重复:未来两周每天 9 点,共 14 次):

qwenpaw cron create \
  --agent-id default \
  --type text \
  --schedule-type scheduled \
  --name "未来两周组会提醒" \
  --run-at "2026-05-13T09:00:00+08:00" \
  --repeat-every-days 1 \
  --repeat-end-type count \
  --repeat-count 14 \
  --channel dingtalk \
  --target-user "你的用户ID" \
  --target-session "你的会话ID" \
  --text "9 点组会提醒" \
  --save-result-to-inbox

参数要点:

  • --schedule-type cron:需要 --cron

  • --schedule-type scheduled:需要 --run-at

  • scheduled 重复任务:需要 --repeat-every-days,并搭配结束条件(count/until/never

  • 可选设置结果是否入收件箱:--save-result-to-inbox 或 --no-save-result-to-inbox


Cron 表达式速查

QwenPaw 使用五段式 Cron:分 时 日 月 周(无秒)。

表达式含义
0 9 * * *每天 9:00
0 */2 * * *每 2 小时整点
30 8 * * 1-5工作日 8:30
0 10 * * 1每周一 10:00
0 9 1 * *每月 1 号 9:00
0 18 31 12 *每年 12 月 31 日 18:00
*/15 * * * *每 15 分钟

相关页面

心跳

2.4 QwenPaw 计划/任务/心跳详解

「心跳」在 QwenPaw 里指的是:按固定间隔,用你写好的一段「问题」去问 QwenPaw,并可选择把 QwenPaw 的回复发到你上次对话的频道。适合做「定期自检、每日摘要、定时提醒」——不用你主动发消息,QwenPaw 到点就干活。

多智能体模式下,每个智能体各自有一份 HEARTBEAT.md 和 heartbeat 配置(在该智能体的 workspace 目录里)。在 控制台 里也可以打开或关闭心跳、改间隔等(控制 → 心跳)。

如果你还没看过 项目介绍,建议先看一眼那里对「心跳」和「频道」的说明。


心跳是怎么工作的?

  1. 在当前智能体的 workspace 里有一个心跳查询文件(默认文件名为 HEARTBEAT.md,可用环境变量 QWENPAW_HEARTBEAT_FILE 改名)。里面写的是每次心跳要问 QwenPaw 的内容(一段或几段话都行,QwenPaw 会当成一条用户消息)。

  2. 当配置里 enabled 为 true 时,系统按你配置的 every(间隔字符串或五段 Cron)执行一次:读取该文件 → 用这段内容去问 QwenPaw → QwenPaw 回复。

  3. 发不发到频道 由配置里的 target 决定:

    • main:只跑 QwenPaw,不把回复发到任何频道(适合只做「自检」、结果自己看日志或别处)。

    • last:把 QwenPaw 的回复发到你上次和 QwenPaw 对话的那个频道/会话(例如上次你在钉钉和它聊,这次心跳的回复就发到钉钉)。

还可以设置 active hours(活跃时段):只在每天的某段时间内跑心跳(例如 08:00–22:00),其余时间不跑。


第一步:写 HEARTBEAT.md

路径(多智能体,常见情况)<QWENPAW_WORKING_DIR>/workspaces/<agent_id>/HEARTBEAT.md。 <QWENPAW_WORKING_DIR> 默认是 ~/.qwenpaw,也可用环境变量 QWENPAW_WORKING_DIR 覆盖;<agent_id> 与当前智能体一致(例如 default)。

文件名默认 HEARTBEAT.md,可通过 QWENPAW_HEARTBEAT_FILE 改成别的名字;路径始终是「该智能体 workspace 根目录 + 该文件名」。

内容就是「每次要问 QwenPaw 什么」,纯文本或 Markdown 都行,QwenPaw 会整体当作一条用户消息。

示例(你可以按自己需求改):

# Heartbeat checklist- 扫描收件箱紧急邮件- 查看未来 2h 的日历- 检查待办是否卡住- 若安静超过 8h,轻量 check-in

初始化时如果执行过 qwenpaw init(没加 --defaults),会提示你是否编辑 HEARTBEAT.md;选是会用系统默认编辑器打开。你也可以之后随时用任何编辑器改这个文件,保存即可,下次心跳会用到新内容。


第二步:配置心跳

2.4 QwenPaw 计划/任务/心跳详解

推荐在 console 的 心跳页面进行配置。如果想通过修改agent.json实现,参考以下内容。

间隔、开关、发到哪、活跃时段 读自当前智能体的 workspaces/<agent_id>/agent.json 里的 heartbeat 字段(与控制台保存的配置一致)。 从旧版迁移时,历史上写在根目录 config.json 的 agents.defaults.heartbeat 会合并进默认智能体的 agent.json;新配置请以 agent.json 为准

字段含义
enabled是否开启心跳。默认 false;只有为 true 时才会按计划执行。
every多久跑一次:间隔字符串(如 "30m""1h""2h30m""90s"), 空格分隔的 五段 Cron(分 时 日 月 周几,与定时任务相同的五段写法,例如每天 9:00:"0 9 * * *")。使用 Cron 时由进程内调度器的时区解析。
targetmain 不发送到频道;last 发到该智能体 last_dispatch 记录的频道;inbox 发送到收件箱中。
activeHours可选,只在每天这段时间内跑:{ "start": "08:00", "end": "22:00" }

every 未写时的默认间隔以程序内置为准(当前默认约为 6 小时,仍以你环境里的版本为准)。

示例(开启心跳,只跑 QwenPaw、不发到频道,每 30 分钟)——写在对应智能体的 agent.json 中:

{
  "heartbeat": {
    "enabled": true,
    "every": "30m",
    "target": "main"
  }}

示例(发到上次对话的频道,每 1 小时,且只在 08:00–22:00 跑):

{
  "heartbeat": {
    "enabled": true,
    "every": "1h",
    "target": "last",
    "activeHours": { "start": "08:00", "end": "22:00" }
  }}

改完保存 config.json;若服务在跑,会按新配置生效(部分实现可能需重启,以实际为准)。


和「定时任务」的区别


心跳定时任务 (cron)
数量只有一份(HEARTBEAT.md)可以建很多个
间隔一个全局间隔每个独立设定时间
投递可选发到「上次频道」或不发每个独立指定频道和用户
适用固定的一套自检/摘要多条不同时间、不同内容的任务

需要「每天 9 点发早安」「每 2 小时问待办并发到钉钉」这类多条任务?请使用 定时任务(或 CLI 的 qwenpaw cron create),而不是心跳。


相关页面


相关文章:

文章已关闭评论!