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