Gumloop v9.7.0 发布 Queue and Steer Agent Messages。此前的 Agent 交互模型中,用户在 Agent 执行期间必须等待——输入框虽可见但消息会在 Agent 完成后才被处理。这对短对话影响不大,但对长时间运行的 Agent(v9.7.0 同时将 Subagent 运行上限延长至 1 小时)是重大体验瓶颈。
Queue and Steer 解决的核心问题:如何在 Agent 工作中途传递新信息而不破坏其已有进度。
| 竞品 | 功能/行为 | 优势 | 劣势 | 洞察/机会 |
|---|---|---|---|---|
| ChatGPT | 可中途点击"停止生成" | 即时中断 | 只能中断,不能引导;中断后需重新开始 | Queue 是"非破坏性引导" |
| Claude Code | 主 Agent 可继续对话,子 Agent 后台运行 | 并行工作 | 子 Agent 运行中不可中途引导 | Queue 填补了"运行时引导"空白 |
| Slack | 消息自然排队,支持编辑和删除 | 用户心智模型成熟 | 不是 Agent 场景 | 交互范式的灵感来源 |
| Zapier/Make | 任务队列 + 错误重试 | 成熟的队列管理 | 无 AI 引导能力 | Queue + AI = 智能排队 |
关键洞察:
用户画像: 张敏,32 岁,电商数据分析师。经常让 Agent 执行 20-30 分钟的复杂分析。
用户故事: 作为数据分析师,我希望在 Agent 执行分析时可以立即补充"等一下,客户 A 的数据用 CNY 不是 USD",而不是等 Agent 跑完才发现用了错误币种。
验收标准:
用户画像: 陈立,28 岁,运营经理。需要 Agent 依次完成"拉取上周销售数据 → 生成对比图表 → 发布到 Confluence → 发 Slack 通知"。
用户故事: 作为运营经理,我希望在 Agent 开始工作后可以继续排队发送后续步骤的指令,让 Agent 一个接一个自动处理。
| ID | 触发场景 | 系统行为 | 优先级 |
|---|---|---|---|
| A1 | Agent 正在响应中(显示"Responding..."),用户输入消息并发送 | 消息进入队列区域,显示在输入框上方,保持发送顺序 | P0 |
| A2 | Agent 完成当前处理步骤(如一次工具调用返回结果) | Agent 自动从队列拉取下一条消息,将其视为"此刻刚收到的新消息",自然融入对话上下文和后续处理 | P0 |
| A3 | 用户在队列中有多条消息 | 消息按发送顺序排列,Agent 一次处理一条 | P0 |
| A4 | Agent 在队列消息被处理前完成了全部响应 | 未被处理的排队消息作为标准跟进消息递送 | P1 |
| ID | 操作 | 系统行为 | 优先级 |
|---|---|---|---|
| B1 | 编辑排队消息 | 点击队列中的消息可修改文本,在 Agent 看到之前更新内容 | P0 |
| B2 | 调整顺序 | 拖拽消息改变 Agent 的处理顺序 | P1 |
| B3 | 删除排队消息 | 在消息被递送前取消,消息不进入 Agent 上下文 | P0 |
| B4 | 重试失败消息 | 排队消息发送失败时可重新尝试 | P1 |
排队消息天然作为"引导输入"——因为它们在 Agent 处理步骤间隙注入。用户利用此能力可以:
| 引导类型 | 示例 | 优先级 |
|---|---|---|
| 重定向 | "改为分析 Q3 数据而不是 Q2" | P0 |
| 补充上下文 | "客户预算上限是 50 万,注意这个约束" | P0 |
| 优化输出 | "报告要更简洁一些,控制在 500 字以内" | P1 |
| 串联任务 | "做完这个之后,再把结果导出为 CSV" | P0 |
引导消息成为对话历史的有机组成部分,Agent 持有完整上下文。
┌─────────────────────────────────────────────────────────────┐ │ 🔤 与 Analysis Agent 对话 [⚙️ Settings] │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 👤 你:生成 Q2 销售分析报告,包含趋势图、Top 10 客户排名 │ │ │ │ 🤖 Agent:正在拉取 Snowflake 数据... Responding... │ │ │ │ ───────────────────────────────────────────────────────── │ │ │ │ ┌─ 排队中 (2) ────────────────────────────────────────┐ │ │ │ │ │ │ │ #1 👤 你 · 1 分钟前 [✏️] [✕] │ │ │ │ ┌──────────────────────────────────────────────┐ │ │ │ │ │ 等一下,客户 A 的数据用 CNY 不是 USD │ │ │ │ │ └──────────────────────────────────────────────┘ │ │ │ │ ⬆️⬇️ 拖拽调整顺序 │ │ │ │ ───────────────────────────────────────────── │ │ │ │ #2 👤 你 · 30 秒前 [✏️] [✕] │ │ │ │ ┌──────────────────────────────────────────────┐ │ │ │ │ │ 加上去年同期对比数据,放折线图上 │ │ │ │ │ └──────────────────────────────────────────────┘ │ │ │ │ ⬆️⬇️ 拖拽调整顺序 │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ 💡 提示:你的消息将在 Agent 完成当前步骤后自动递送 │ │ │ │ ┌─ 输入区 ────────────────────────────────────────────┐ │ │ │ ╔══════════════════════════════════════════════╗ │ │ │ │ ║ 输入消息(将自动排队)... ║ │ │ │ │ ╚══════════════════════════════════════════════╝ │ │ │ │ [📎 附件] [发送] │ │ │ └─────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐ │ 🔤 与 Analysis Agent 对话 [⚙️ Settings] │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ... │ │ │ │ 🤖 Agent:正在生成趋势图表... │ │ │ │ ── 此时 Agent 处理到 #1 排队消息 ── │ │ │ │ ⚡ 处理排队消息 #1: │ │ 👤 你(排队):等一下,客户 A 的数据用 CNY 不是 USD │ │ │ │ 🤖 Agent:收到,已将所有客户 A 相关数据改为 CNY。 │ │ 继续生成报告... │ │ │ │ ── #2 将在下一步骤前被处理 ── │ │ │ │ ┌─ 排队中 (1) ────────────────────────────────────────┐ │ │ │ #2 👤 你:加上去年同期对比数据... [✏️] [✕] │ │ │ └─────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘
flowchart TD
Start([Agent 开始执行任务]) --> Busy[Agent 显示 Responding...]
Busy --> UserAction{用户有新消息?}
UserAction -->|是| Enqueue[消息进入队列
显示在输入框上方]
UserAction -->|否| ToolStep[Agent 执行工具调用]
Enqueue --> UserCan{用户操作队列?}
UserCan -->|编辑| Edit[修改消息文本]
UserCan -->|拖拽| Reorder[调整消息顺序]
UserCan -->|删除| Remove[移出队列]
UserCan -->|不操作| Wait
Edit --> Wait[等待 Agent 完成当前步骤]
Reorder --> Wait
Remove --> Wait
Wait --> ToolStep
ToolStep --> StepDone{当前步骤完成?}
StepDone -->|否| ToolStep
StepDone -->|是| QueueCheck{队列中有消息?}
QueueCheck -->|有| Dequeue[拉取第一条排队消息]
QueueCheck -->|无| AllDone{所有任务完成?}
Dequeue --> Inject[融入对话上下文
作为"此刻新消息"处理]
Inject --> Adapt[Agent 调整后续行为]
Adapt --> ToolStep
AllDone -->|否| ToolStep
AllDone -->|是| DrainCheck{还有未处理的
排队消息?}
DrainCheck -->|有| NormalFollowUp[作为标准跟进消息递送]
DrainCheck -->|无| End([任务完成])
| 漏斗阶段 | 事件名称 | 触发条件 | 指标/KPI | 目的 | 优先级 |
|---|---|---|---|---|---|
| 采用 | `queue_message_sent` | 用户在 Agent 响应期间发送消息 | 排队消息数/任务 | 衡量功能发现和使用 | P0 |
| 使用 | `queue_message_delivered` | 排队消息被 Agent 拉取处理 | 处理数/任务 | 衡量有效使用 | P0 |
| 使用 | `queue_message_edited` | 用户在递送前编辑排队消息 | 编辑次数 | 了解使用模式 | P2 |
| 使用 | `queue_message_removed` | 用户在递送前删除排队消息 | 删除率 | 了解放弃原因 | P2 |
| 使用 | `queue_message_reordered` | 用户拖拽调整消息顺序 | 排序次数 | 衡量使用深度 | P2 |
| 质量 | `queue_message_failed` | 排队消息发送失败 | 失败率 | 监控可靠性 | P1 |
| 留存 | `queue_feature_retention` | 用户 7 天内再次使用排队功能 | 重复使用率 | 衡量持续价值 | P1 |
| 阶段 | 时间线 | 里程碑 | 状态 |
|---|---|---|---|
| Phase 1 — 基础 Queue | v9.7.0 | 单用户消息排队 + 编辑/删除/排序 + 自然断点注入 | ✅ 已发布 |
| Phase 2 — 智能引导 | v10.x | 引导影响预览(Agent 预估排队消息会影响哪些后续步骤)、引导冲突检测(新指令与已有排队指令冲突时提示) | ⬜ 规划中 |
| Phase 3 — 协作引导 | v11.x | 多用户可向同一 Agent 排队消息(显示发送者)、角色权限控制(谁能引导/谁能停止) | ⬜ 探索中 |
| Phase 4 — 智能排队 | 未来 | Agent 主动询问"我注意到还需要 X 信息,要排队等待吗?"、根据任务优先级自动排序 | ⬜ 探索中 |
由 Claude spec-generate 系统生成 · 来源:Gumloop Agents 帮助文档 - Message Queue and Steering