返回顶部
p

polling-best-practices轮询最佳实践

Best practices for automating long-running, asynchronous tasks via cron-style polling. Use when the user wants to monitor a background CLI command or API call that does not return an immediate result — such as waiting for a report to generate, a podcast to be created, a deep research job to complete, or any task with a clear completion condition. Triggers on requests like "monitor X until done", "poll for Y", "wait for Z to complete in the background", "run X in the background and notify me when

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.1
安全检测
已通过
112
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

polling-best-practices

轮询最佳实践

一种指导式技能,用于使用 cron 兼容的轮询模式 自动化长时间运行的异步任务。当任务无法同步完成时(例如,CLI 命令触发后台作业并返回作业 ID),此技能指导代理完成以下步骤:(1) 判断轮询是否合适,(2) 与用户进行启动前确认,(3) 设置任务目录,(4) 编写轮询脚本,(5) 启动后台作业,以及 (6) 监控其完成或超时。

语言: 所有发送给用户的确认消息应使用用户当前的语言(检查会话语言——如果用户使用中文,则用中文回复;如果使用英文,则用英文回复)。



1. 适用性检查清单

在继续之前,代理必须回答:

✅ 适合轮询 —— 如果满足以下所有条件:

  • - [ ] 目标命令/API 立即返回一个进程 ID、作业 ID、工件 ID 或类似的句柄
  • [ ] 存在一个明确的、机器可解析的完成条件(例如,JSON/TOML 字段、状态字符串、退出码、文件出现)
  • [ ] 该条件可以通过重新运行相同的命令或一个轻量级的查询命令来检查
  • [ ] 等待时间是可预测的(通常为 1–15 分钟)
  • [ ] 执行期间不需要实时用户交互

❌ 不适合 —— 如果满足以下任何条件:

  • - [ ] 任务需要复杂的 LLM 判断来确定是否完成(例如,这个输出够好吗?)
  • [ ] 任务需要流式或实时输出展示给用户
  • [ ] 任务结果在轮询期间根据中间结果发生变化
  • [ ] 完成条件是模糊或主观的
  • [ ] 用户希望在任务执行中途停止或改变方向

如果任务不适合轮询,请告知用户并提出替代方案(例如,同步运行,使用仅用于最终等待的子代理进行轮询等)。



2. 启动前确认(一次性,所有参数)

在开始任何轮询任务之前,要求用户在一条消息中确认所有参数。这可以避免来回沟通,并设定明确的期望。

使用用户当前会话语言确认。

示例(英文):

Before starting, please confirm the following:

① Polling target
- Task: [brief description]
- Command to check status: [exact command]
- Expected completion condition: [e.g., output contains status: completed]

② Poll interval: every [X] minutes (default: 5 minutes)
③ Max duration: up to [Y] polls = [Z] minutes max (default: 40 min / 8 polls)
④ On completion: [download file / run command / send message / do nothing]
⑤ On failure/timeout: [notify me / stay silent]
⑥ Output directory: [path] (default: ~/Downloads or relevant workspace folder)
⑦ Temp folder retention: keep for review after completion? [yes / no]

Reply with any changes, or ok to proceed with defaults.

示例(中文 —— 相同结构,已翻译):

启动前请确认以下参数:

① 轮询对象
- 任务:[简短描述]
- 状态查询命令:[具体命令]
- 成功判定条件:[例如输出包含 status: completed]

② 轮询频率:每 [X] 分钟一次(默认:5 分钟)
③ 最长持续时间:最多 [Y] 次轮询 = [Z] 分钟(默认:40 分钟 / 8 次)
④ 完成后动作:[下载文件 / 运行命令 / 发消息 / 不做处理]
⑤ 失败/超时时:[通知我 / 不通知]
⑥ 产物保存位置:[路径](默认:~/Downloads 或相关工作目录)
⑦ 临时文件夹保留:完成后保留供复查?[是 / 否]

直接回复修改项,或确认以默认参数启动。

在用户确认之前不要开始轮询。 如果用户在合理时间内没有回应,请跟进一次。



3. 临时文件夹结构

每个轮询任务都有自己的临时文件夹。这使得任务自包含、可恢复,并且易于后续检查或清理。

/tmp// ← 类别:例如 notebooklm, deep-research, generic
_/ ← 每个任务的时间戳文件夹
task.json ← 任务元数据和所有参数
progress.json ← 当前轮询状态(轮询次数、上次检查时间、句柄)
poll.log ← 每次轮询尝试的日志(时间戳 + 结果)
error.log ← 遇到的错误
done.flag ← 空文件,成功完成时创建
← 任何下载/生成的工件

命名规则:

  • - 类别文件夹:小写、连字符连接、描述任务类型(例如 notebooklm-audio、deep-research、generic-async)
  • 任务子文件夹:YYMMDD-HHmm + _ + 清理后的任务名称(空格→连字符,最多 40 个字符,去除特殊字符)

如果类别文件夹不存在,则创建它。如果任务子文件夹已存在(例如,来自之前的尝试),请询问用户:恢复之前的任务还是重新开始?

task.json 模式

json
{
category: notebooklm-audio,
task_name: example-notebook-audio,
pollcommand: nlm studio status id>,
parse_rule: {
type: json,
path: .[0].status,
success_value: completed,
failure_value: failed
},
oncompletecommand: nlm download audio id> --id id> -o ,
verify_output: true,
pollintervalseconds: 300,
max_polls: 8,
timeout_action: notify,
failure_action: notify,
output_path: /path/to/output.m4a,
tempdir: /tmp/notebooklm-audio/260325-1400example-audio,
created_at: 2026-03-25T22:00:00Z,
user_confirmed: true
}

progress.json 模式

json
{
poll_count: 3,
lastpollat: 2026-03-25T22:15:00Z,
lastpollresult: in_progress,
artifact_id: abc123...,
current_handle: ...
}



4. 编写轮询脚本

将脚本写入任务的临时文件夹(/poll.sh)。脚本必须是自包含的 —— 除了标准 Unix 工具外没有外部依赖。

必需属性:

  • - 顶部设置 set -euo pipefail
  • 在开始时检查 done.flag —— 如果存在,立即退出 0(已完成)
  • 任何错误(身份验证过期、命令失败、超时),在退出前记录到 error.log 并保存进度
  • 每次轮询尝试后保存 progress.json
  • 将每次轮询结果追加到 poll.log(时间戳 + 截断的输出)
  • 永远不要删除临时文件夹 —— 由用户决定何时清理

脚本模板(最小化):

bash
#!/bin/bash
set -euo pipefail

TASKDIR=/tmp/category/YYMMDD-HHmmtaskname
cd $TASK_DIR

检查是否已完成

[[ -f done.flag ]] && echo Already complete. && exit 0

加载进度

POLLCOUNT=$(grep pollcount progress.json 2>/dev/null | sed s/[^0-9]//g) || POLL_COUNT=0 MAX_POLLS=8 INTERVAL=300

while true; do
POLLCOUNT=$((POLLCOUNT + 1))

if [[ $POLLCOUNT -gt $MAXPOLLS ]]; then
echo [$(date)] TIMEOUT after $MAX_POLLS polls >> error.log
exit 1
fi

echo [$(date)] Poll $POLLCOUNT/$MAXPOLLS >> poll.log

# 运行轮询命令
RESULT=$( 2>&1) || true
echo $RESULT >> poll.log

# 解析结果 —— 根据命令的输出格式进行调整
if echo $RESULT | grep -q status: completed; then
touch done.flag
# 如果设置了完成命令则运行
echo Done. >> poll.log
exit 0
fi

# 保存进度
sed -i s/\poll_count\: [0-9

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 polling-best-practices-1776014887 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 polling-best-practices-1776014887 技能

通过命令行安装

skillhub install polling-best-practices-1776014887

下载

⬇ 下载 polling-best-practices v1.0.1(免费)

文件大小: 7.56 KB | 发布时间: 2026-4-13 11:30

v1.0.1 最新 2026-4-13 11:30
Replaced example task name with generic placeholder to avoid any context-specific naming.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部