Skip to content

Agents 智能体引擎详解

前置知识:本章节面向具备 TypeScript/Node.js 基础、了解 AI 模型 API 调用机制的开发者。 目标读者:希望深入理解 OpenClaw 智能体内部实现机制、进行二次开发或问题诊断的开发者。 维护状态:本文档基于 OpenClaw v2026.4+ 源码分析,描述的是当前实现细节,可能随版本更新变化。

📖 入门参考:若您希望了解如何使用智能体循环(而非其内部实现),请参阅 使用手册


1. Agent 循环概述

1.1 完整生命周期

1.2 源码文件对应

阶段主要文件关键函数
入口agents/pi-embedded-runner/run.tsrunEmbeddedPiAgent()
模型agents/pi-embedded-runner/model.tsresolveModelAsync()
上下文agents/pi-embedded-runner/compact*.ts上下文压缩
工具agents/pi-embedded-runner/run/attempt.tsrunEmbeddedAttempt()
输出agents/pi-embedded-runner/stream*.ts流式处理

2. 上下文组装

2.1 上下文组成

2.2 系统提示构建流程


3. 模型选择

3.1 多模型配置

3.2 模型配置示例

json5
{
  agents: {
    defaults: {
      model: {
        primary: "anthropic/claude-sonnet-4-5",
        fallbacks: [
          "openai/gpt-4",
          "anthropic/claude-haiku"
        ]
      }
    }
  }
}

3.3 提供商配置

json5
{
  models: {
    providers: {
      anthropic: {
        apiKey: "${ANTHROPIC_API_KEY}",
        baseUrl: "https://api.anthropic.com"
      },
      openai: {
        apiKey: "${OPENAI_API_KEY}"
      }
    }
  }
}

4. 工具执行

4.1 工具调用流程

4.2 工具源码位置

工具源码路径功能
execagents/bash-tools.exec.ts执行系统命令
exec (核心)agents/bash-tools.ts命令执行核心
browseragents/tools/web-tools.ts网页浏览
web-fetchagents/tools/web-fetch.ts网页抓取
web-searchagents/tools/web-search.ts网页搜索
imageagents/tools/image-tool.ts图片处理
ttsagents/tools/tts-tool.ts语音合成
pdfagents/tools/pdf-tool.tsPDF 处理

4.3 exec 工具安全

4.4 工具权限配置

json5
{
  tools: {
    exec: {
      enabled: true,
      security: "allowlist",
      ask: "on-miss",
      allowlist: ["ls", "cat", "grep", "git"],
      safeBins: ["jq", "sed"]
    }
  }
}

5. 上下文压缩

5.1 压缩触发条件

5.2 压缩流程

5.3 手动压缩

/compact Focus on decisions and open questions

6. 子智能体

6.1 子智能体架构

6.2 配置示例

json5
{
  agents: {
    defaults: {
      subagents: {
        enabled: true,
        maxDepth: 3,
        timeoutMs: 60000
      }
    }
  }
}

7. 会话管理

7.1 会话状态

7.2 会话范围

隔离级别场景
main所有 DM 共享单用户默认
per-peer按发送者多用户
per-channel-peer通道+发送者推荐多用户
per-account-channel-peer账户+通道+发送者多账户

8. 流式输出

8.1 流式处理流程

8.2 渲染模式

json5
{
  channels: {
    feishu: {
      renderMode: "raw"  // 默认纯文本
    }
  }
}

⚠️ 注意:飞书建议使用 raw 模式,避免流式输出导致协议不匹配。


9. 错误处理与重试

9.1 重试策略

9.2 错误类型

类型处理方式
rate_limit等待后重试
auth_error切换认证文件
context_overflow触发压缩
network_error指数退避

10. 调试与监控

10.1 查看运行日志

bash
# 实时查看 Agent 日志
openclaw gateway --verbose

# 查看特定会话
openclaw sessions view <session-id>

10.2 关键指标

指标说明
模型延迟请求到响应的时间
工具调用次数解决问题的工具数
上下文大小消耗的 token 数
压缩次数触发压缩的次数

11. 延伸阅读