讲师中心 微信公众号

工具推荐

视频效率加速
Laper
Laper

剧本策划到成片协作

updream

一键生成高质量推广成片

立刻MV
立刻MV

低成本歌曲 MV、视频生成

AniShort
AniShort

AI短剧协同制作平台

Polling Best Practices

Polar Sponsor
爱发电 赞助
.NET 9.0

通过定时轮询自动化长时间运行的异步任务的最佳实践。适用于监控后台 CLI 命令或 API 调...

投票最佳做法

功能概述

投票最佳做法是一项面向实际任务的技能,主要用于一种指导式技能,用于使长期运行自动化, 使用与计算兼容的投票模式同步完成;当任务无法同步完成时( 例如, CLI c)。

核心要点

  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
  • 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
  • 该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。

使用与执行

从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;

结果检查与注意事项

若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。

轮询最佳实践

一种以指导风格设计的技能,用于通过 兼容 cron 的轮询模式 自动化长期运行、异步执行的任务。当某项任务无法同步完成时(例如:一个触发后台作业并返回作业 ID 的 CLI 命令),该技能将引导智能体完成以下步骤:(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//                          ← category:例如 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 格式定义

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

progress.json 格式定义

{
  "poll_count": 3,
  "last_poll_at": "2026-03-25T22:15:00Z",
  "last_poll_result": "in_progress",
  "artifact_id": "abc123...",
  "current_handle": "..."
}

4. 编写轮询脚本

将脚本写入任务临时目录(/poll.sh)。脚本必须 完全自包含 —— 除标准 Unix 工具外,不得依赖任何外部组件。

必需特性:

  • 脚本开头必须包含 set -euo pipefail
  • 启动时须检查 done.flag —— 若已存在,则立即以 0 退出(任务已完成)
  • 发生任何错误(如认证过期、命令失败、超时)时,须记录至 error.log 并在退出前保存当前进度
  • 每次轮询尝试后均须更新 progress.json
  • 每次轮询结果均须追加至 poll.log(含时间戳 + 截断后的输出)
  • 禁止删除临时目录 —— 清理时机由用户决定

脚本模板(最小可用版):

#!/bin/bash
set -euo pipefail

TASK_DIR="/tmp/category/YYMMDD-HHmm_taskname"
cd "$TASK_DIR"

# Check if already done
[[ -f done.flag ]] && echo "Already complete." && exit 0

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

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

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

  echo "[$(date)] Poll $POLL_COUNT/$MAX_POLLS" >> poll.log

  # Run the poll command
  RESULT=$( 2>&1) || true
  echo "$RESULT" >> poll.log

  # Parse result — adapt to your command's output format
  if echo "$RESULT" | grep -q '"status": "completed"'; then
    touch done.flag
    # Run on-complete command if set
    echo "Done." >> poll.log
    exit 0
  fi

  # Save progress
  sed -i "s/"poll_count": [0-9]*/"poll_count": $POLL_COUNT/" progress.json

  sleep "$INTERVAL"
done

5. 启动与监控

启动被轮询的后台作业

  1. 首先执行 触发命令(例如:nlm audio create ),以启动后台任务并捕获其 ID/句柄。
  2. 将返回的 ID 写入 progress.json 和 task.json。
  3. 随后以后台进程方式启动轮询脚本。
# In the task's temp dir:
nohup bash poll.sh > /dev/null 2>&1 &
echo "Polling started in background (PID: $!)"

轮询脚本应独立于 OpenClaw 会话长期存活。 智能体无需保持活跃即可维持轮询运行。

监控策略

  • 禁止在 OpenClaw 会话内执行轮询(子智能体或 exec 循环会浪费资源,且增加故障恢复复杂度)。
  • 若 OpenClaw 收到用户询问“是否已完成?”的消息,智能体可直接检查临时目录下的 done.flag 或 poll.log 来回应,无需发起新的轮询。
  • 若新会话启动后用户要求检查某任务状态,则读取 progress.json 判断当前进展。

6. 超时与错误处理

情形 操作
达到最大轮询次数(超时) 记录至 error.log;若配置 timeout_action: notify 则通知用户;不得删除临时目录
认证过期 记录至 error.log;通知用户重新认证后退出
下载/生成失败 记录至 error.log;通知用户后退出
临时目录已存在(重复启动) 询问用户:继续还是重启

超时/失败后:禁止自动重试。应明确告知用户任务未完成,并提供如下选项:

  1. 使用相同参数重试
  2. 调整参数后重试
  3. 手动清理临时目录

7. 任务完成时的操作

  1. 验证输出文件是否存在且非空([[ -s "$output_path" ]])
  2. 创建 done.flag
  3. 若已设置 output_path 且用户确认了目标路径,则将文件移动或复制至该位置
  4. 通知用户:
    • 任务已完成
    • 输出文件保存位置
    • 共执行多少次轮询、耗时多久
    • 临时目录路径(供需要时人工检查)
  5. 若用户此前确认保留临时目录,则保持原状;否则,主动提供清理选项

通知语言:使用用户当前会话语言。

8. 模板就绪型任务(高频模式)

若某类任务频繁执行(例如 NotebookLM 音频生成、Gemini Deep Research 状态检查),可将轮询逻辑提取为 可复用的脚本模板,存于分类目录层级:

/tmp/notebooklm-audio/
  poll-template.sh        ← 此分类专用的可复用模板
  /260325-1400_task1/    ← 各个任务目录基于该模板生成
  /260326-0915_task2/

各任务目录下的 poll.sh 可直接复制模板,或基于模板生成,从而保证任务目录本身尽可能精简。

9. 总结核查清单

启动轮询任务前,请确认全部满足以下条件:

  • 任务适用于轮询(全部适用性条件 ✅)
  • 用户已在单条消息中确认全部参数
  • 已创建临时目录,且其中 task.json 与 progress.json 内容正确
  • 已执行触发命令,并捕获 ID/句柄
  • 已编写 poll.sh 并通过语法校验(bash -n)
  • 已使用 nohup 启动后台进程
  • 已通知用户:任务已启动、如何查询状态、完成时将发生什么
目录

热门AI工具

更多
UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

0

2026.11.06

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

0

2026.11.06

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

0

2026.11.05

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

0

2026.11.05

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

0

2026.11.04

XORM框架结构体映射与表结构同步
XORM框架结构体映射与表结构同步

本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。

0

2026.11.04

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

0

2026.11.04

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

0

2026.11.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn