Agent Loop
持续运行的 AI 代理循环
概述
Agent Loop 是一个持续运行的代理循环,让 ClawdBot 可以在后台自动执行任务。它不需要等待用户输入,而是主动响应事件、 执行定时任务,或者持续监控某些状态。
持续运行
后台持续运行,无需手动触发
事件驱动
响应各种系统和外部事件
定时执行
按计划自动执行任务
工作原理
循环流程
┌─────────────────────────────────────┐
│ Agent Loop │
│ │
│ ┌─────────┐ ┌─────────────┐ │
│ │ 等待 │───▶│ 检查事件 │ │
│ │ 事件 │ │ /定时任务 │ │
│ └─────────┘ └──────┬──────┘ │
│ ▲ │ │
│ │ ┌──────▼──────┐ │
│ │ │ 执行任务 │ │
│ │ └──────┬──────┘ │
│ │ │ │
│ │ ┌──────▼──────┐ │
│ └─────────│ 处理结果 │ │
│ └─────────────┘ │
└─────────────────────────────────────┘Loop 类型
| 类型 | 说明 | 使用场景 |
|---|---|---|
| Event Loop | 等待并响应事件 | 消息处理、文件监控 |
| Cron Loop | 定时执行任务 | 日报生成、数据同步 |
| Heartbeat Loop | 周期性健康检查 | 系统监控、状态报告 |
| Watch Loop | 持续监控变化 | 日志监控、价格追踪 |
启动 Loop
命令行启动
# 启动默认 Agent Loop
clawdbot loop start
# 启动特定类型的 Loop
clawdbot loop start --type cron
clawdbot loop start --type heartbeat
# 在后台运行
clawdbot loop start --daemon在对话中启动
# 启动监控任务
/loop start "每小时检查服务器状态"
# 启动文件监控
/loop watch ~/downloads "当有新文件时,自动归类"管理 Loop
# 查看运行中的 Loop
clawdbot loop list
# 停止特定 Loop
clawdbot loop stop loop-id
# 停止所有 Loop
clawdbot loop stop --all
# 暂停/恢复
clawdbot loop pause loop-id
clawdbot loop resume loop-id事件触发
Agent Loop 可以响应多种事件:
消息事件
loop:
events:
- type: message
channel: telegram
action: "处理用户消息"
- type: mention
channel: slack
action: "响应 @mention"文件系统事件
loop:
events:
- type: file_created
path: ~/downloads
action: "自动整理下载的文件"
- type: file_modified
path: ~/projects/config.yaml
action: "检测配置变更并应用"系统事件
loop:
events:
- type: time
cron: "0 9 * * *" # 每天早上 9 点
action: "生成每日摘要"
- type: webhook
path: /api/trigger
action: "处理外部触发"自定义事件
loop:
events:
- type: custom
name: "stock_alert"
condition: "stock_price < 100"
action: "发送股票警报"定时任务
Cron 表达式
loop:
scheduled:
# 每天早上 9 点
- cron: "0 9 * * *"
task: "发送每日天气预报"
# 每小时
- cron: "0 * * * *"
task: "检查邮件并摘要"
# 每周一早上 8 点
- cron: "0 8 * * 1"
task: "生成周报"简化语法
loop:
scheduled:
- every: "1h"
task: "健康检查"
- every: "30m"
task: "同步数据"
- at: "09:00"
task: "早间简报"
- at: "18:00"
weekdays: [1, 2, 3, 4, 5] # 周一到周五
task: "下班提醒"任务链
loop:
scheduled:
- every: "1d"
chain:
- "收集当天的新闻"
- "生成摘要"
- "发送到 Telegram"配置选项
完整配置示例
# ~/.clawdbot/config.yaml
loop:
# 是否自动启动
auto_start: true
# 并发限制
max_concurrent: 3
# 错误处理
on_error: retry # retry, skip, stop
max_retries: 3
retry_delay: 60
# 日志配置
logging:
level: info
file: ~/.clawdbot/logs/loop.log
# 通知配置
notifications:
on_error: true
on_complete: false
channel: telegram资源限制
loop:
limits:
# 内存限制
max_memory: "512MB"
# CPU 使用限制
max_cpu: 50 # 百分比
# 每日任务限制
max_tasks_per_day: 1000
# API 调用限制
rate_limit:
requests: 100
period: "1h"监控管理
查看状态
# 查看 Loop 状态
clawdbot loop status
# 输出示例:
# Loop Status: Running
# Uptime: 2d 5h 30m
# Tasks Executed: 156
# Next Scheduled: in 25m (daily-summary)
# Active Tasks: 1查看日志
# 实时日志
clawdbot loop logs -f
# 最近 100 条
clawdbot loop logs --tail 100
# 过滤错误
clawdbot loop logs --level error执行历史
# 查看历史任务
clawdbot loop history
# 查看特定任务详情
clawdbot loop history task-id
# 导出历史
clawdbot loop history --export history.json健康检查
# 运行健康检查
clawdbot loop health
# 输出示例:
# ✓ Event listener: OK
# ✓ Scheduler: OK
# ✓ Task queue: OK (3 pending)
# ✓ Memory usage: 234MB / 512MB
# ✓ Last heartbeat: 2s ago故障排查
# 调试模式运行
clawdbot loop start --debug
# 检查配置
clawdbot loop validate
# 重置 Loop 状态
clawdbot loop reset