本附录汇总本专栏各章散落的对比表,方便横向查阅。每个表格均标注来源章节。
关于横向对比的一点说明
原先本附录里有大量"OpenClaw vs LangChain vs AutoGPT vs CrewAI vs Semantic Kernel vs Dify"式的逐项打勾表。这类表格有两个无法回避的问题:其一,这些项目迭代极快,任何一格"❌"都可能在几周内失效;其二,本专栏能逐行核对源码的只有 OpenClaw 一家,其余各家的能力边界只能靠印象填写——而靠印象填出来的表格,看起来越整齐,误导性越强。
因此本附录做了取舍:
- 保留并核实所有 OpenClaw 内部的对比(不同机制之间的取舍、不同接口的信任级别、不同部署形态的差异)——这些都能对着 v2026.3.31(commit
213a704)的源码逐条核。
- 保留架构范式层面的定性对比(框架模式 vs 网关模式、模块化单体 vs 微服务、管线 vs 观察者)——这些讨论的是设计取向,不依赖某个具体项目的当前实现。
- 把"OpenClaw 有哪些能力"从对比表改写成能力清单,每一项附上源码出处,读者可以拿它去对照自己手边的任何方案。
C.1 架构范式对比
C.1.1 框架模式 vs 网关模式(来源:第 2 章)
这是本专栏最重要的一组对比——它解释了 OpenClaw 为什么长成现在这样。
| 维度 |
框架模式(你写代码调用库) |
网关模式(OpenClaw) |
| 进程生命周期 |
由你的应用管理 |
自管理的常驻守护进程 |
| 通道连接 |
你自己写适配器 |
插件化:9 个内置通道 ID + 扩展共 22 个 |
| 会话状态 |
通常在内存,进程退出即丢 |
持久化到 sessions.json,重启后恢复 |
| 安全策略 |
你自己实现 |
内置工具策略管线、exec 审批、安全审计 |
| 配置变更 |
重启应用 |
热重载(gateway.reload.mode 四档) |
| 定时任务 |
外部 cron + 你的应用 |
内置调度器 + 心跳 |
| 你写的东西 |
应用代码 |
配置文件 + Markdown 技能 |
通道数口径:src/channels/ids.ts 的 CHAT_CHANNEL_ORDER 有 9 个内置 ID(telegram、whatsapp、discord、irc、googlechat、slack、signal、imessage、line);extensions/ 下声明了 channels 的插件共 22 个,即另有 13 个只以扩展形式提供(matrix、mattermost、msteams、feishu、nostr、qqbot、tlon、twitch、zalo 等)。
C.1.2 模块化单体 vs 微服务(来源:第 2 章)
| 维度 |
模块化单体(OpenClaw 的选择) |
微服务 |
| 模块间调用 |
进程内函数调用 |
网络往返 |
| 部署复杂度 |
一个进程 |
N 个服务 + 服务发现 + 消息队列 |
| 状态共享 |
直接引用 |
需要序列化传输 |
| 适合团队规模 |
个人 ~ 小团队 |
大团队 |
| 水平扩展 |
受限(单运营者假设) |
可独立扩展各服务 |
C.1.3 管线模式 vs 观察者模式(来源:第 17 章)
| 维度 |
管线 |
观察者 |
| 执行顺序 |
确定性的 |
不确定的 |
| 数据流向 |
线性、可追踪 |
扇出、难追踪 |
| 调试难度 |
低(从头到尾跟踪) |
高("谁处理了这个事件?") |
| 安全审计 |
容易(可记录管线每一步) |
困难(观察者可能注册在任何地方) |
OpenClaw 在安全关键路径(工具策略)上选管线,在生命周期通知上用事件——按第 17 章的分析,这一取舍看重的是确定性与可审计性,而不是风格偏好。
C.1.4 注入式插件 vs 注册式插件(来源:第 9 章)
| 维度 |
注入式 |
注册式(OpenClaw) |
| 数据流 |
插件拉取宿主内部状态 |
插件注册到宿主提供的接口 |
| 耦合度 |
紧——依赖内部 API |
松——只依赖注册 API 与 SDK 子路径 |
| 冲突处理 |
覆盖(后写入者胜出) |
诊断(记录冲突,不崩溃) |
| 升级兼容 |
脆弱——内部一变插件就坏 |
较稳——只要注册 API 不变,插件不受内部重构影响 |
| 安全边界 |
插件可访问一切 |
同样可访问一切:原生插件在网关进程内运行、没有沙箱,与宿主同 OS 权限(SECURITY.md「Plugin Trust Boundary」);防线是安装扫描、allow/deny 与信任 |
C.1.5 代码扩展 vs 文件技能(来源:第 16 章)
| 维度 |
代码形态的扩展(OpenClaw 插件,第 9 章) |
文件技能(SKILL.md,第 16 章) |
| 创建门槛 |
需要 TypeScript 编程能力 |
只需会写 Markdown |
| 部署方式 |
安装并加载进进程 |
放文件 + 热重载 |
| 版本管理 |
包管理器 |
就是文件,git 跟踪即可 |
| 覆盖方式 |
fork + 改代码 |
同名文件按来源优先级覆盖 |
| 上下文成本 |
工具定义常驻上下文 |
目录常驻,正文按需 read |
| 适用场景 |
需要运行时逻辑、有状态连接 |
操作知识、流程指导 |
C.2 OpenClaw 能力清单
以下几张表把"OpenClaw 有什么"讲清楚,每项都给出源码出处,可直接拿去对照任何其他方案。
C.2.1 Gateway(来源:第 3 章)
| 能力 |
实现 |
出处 |
| 单端口复用 |
WS + HTTP 共用 gateway.port(默认 18789) |
src/gateway/server-http.ts |
| 绑定策略 |
auto / lan / loopback / tailnet / custom,默认 loopback |
src/config/types.gateway.ts |
| 认证模式 |
none / token / password / trusted-proxy + 失败限速 |
src/gateway/auth.ts |
| 热重载 |
off / restart / hot / hybrid,默认 hybrid,300ms 防抖 |
src/gateway/config-reload.ts |
| 存活/就绪分离 |
/healthz、/health 恒 200;/readyz、/ready 反映真实就绪 |
src/gateway/server-http.ts |
| 优雅重启 |
发信号前最多等 5 分钟排空在途工作 + 收到信号后 90 秒排空超时;重复请求合并,距上次重启不足 30 秒则顺延 |
src/infra/restart.ts、src/cli/gateway-cli/run-loop.ts |
| 跨平台服务 |
systemd / launchd / schtasks 统一接口 |
src/daemon/service.ts |
| 通道健康监控 |
5 分钟巡检、30 分钟静默阈值、每小时最多 10 次重启 |
src/gateway/channel-health-monitor.ts |
| 配置变更审计 |
config.patch / config.apply 记录变更路径(diffConfigPaths)+ actor / device / ip |
src/gateway/server-methods/config.ts、src/gateway/control-plane-audit.ts |
| OpenAI 兼容端点 |
/v1/chat/completions、/v1/responses(均默认关闭,需显式开启) |
gateway.http.endpoints.* |
C.2.2 会话与上下文(来源:第 5 章)
| 能力 |
实现 |
出处 |
| 结构化 Session Key |
通道 + 对话 + 发送者派生 |
src/routing/session-key.ts |
| 分组策略 |
scope(per-sender / global)、dmScope(4 档) |
src/config/types.base.ts |
| 重置策略 |
daily(定点)/ idle(滑窗),可按会话类型分别覆盖 |
session.reset / session.resetByType |
| 上下文封顶 |
agents.defaults.contextTokens,小于模型窗口时生效 |
src/agents/context-window-guard.ts |
| 上下文压缩 |
超限时摘要历史 |
src/agents/compaction.ts |
| 并发隔离 |
会话写锁,单会话内串行 |
src/agents/session-write-lock.ts |
| 存储维护 |
30 天裁剪、500 条上限、10MB 轮转,可设磁盘预算;默认 mode: "warn" 只告警,设为 enforce 才真正执行 |
session.maintenance.*、src/config/sessions/store-maintenance.ts |
| 父会话分叉保护 |
父会话超 100,000 token 则不继承其历史 |
session.parentForkMaxTokens |
C.2.3 工具与安全(来源:第 10、13 章)
| 能力 |
实现 |
出处 |
| 工具基线档位 |
minimal / coding / messaging / full |
tools.profile |
| 工具分组 |
group:runtime / fs / sessions / memory / web / ui / automation / messaging / nodes / agents / media / openclaw,另有 group:plugins(插件工具) |
src/agents/tool-catalog.ts、src/agents/tool-policy.ts |
| 允许/拒绝 |
支持通配,deny 优先 |
tools.allow / tools.deny |
| Exec 安全档位 |
deny / allowlist / full;未配置时按主机分流(沙箱 deny,网关/节点 allowlist);host=sandbox 时命令直接在容器里执行,不走档位与审批 |
tools.exec.security |
| Exec 审批 |
off / on-miss / always,默认 on-miss |
tools.exec.ask |
| SafeBins |
仅读 stdin 的流过滤器可免 allowlist,但每条须有参数 profile,无 profile 的条目被忽略并告警 |
tools.exec.safeBins |
| 内联求值加固 |
python -c / node -e 每次显式审批,不被"始终允许"持久化 |
tools.exec.strictInlineEval |
| 提权 exec |
开关未设即启用,但发送者须列在 allowFrom(按通道)中,未列出即无人可提权 |
tools.elevated |
| SSRF 防护 |
IPv4/IPv6 分类拒绝 + DNS 重绑定防护 + 畸形字面量 fail closed |
src/infra/net/ssrf.ts |
| 凭证引用 |
SecretRef 三种来源:env / file / exec |
src/config/types.secrets.ts |
| 安全审计 |
多个审计模块合计上百个检查项(checkId),--fix 自动修复 |
src/security/audit*.ts |
| 沙箱 |
Docker / SSH / OpenShell 三种后端,可只读根 + 丢弃全部 capability |
agents.defaults.sandbox |
C.2.4 CLI 与 TUI(来源:第 14 章)
| 能力 |
实现 |
出处 |
| 双组件架构 |
CLI 管控制面,TUI 作为一等对话入口(不是通道插件,而是以 ui 模式连 Gateway 的 WebSocket 客户端) |
src/cli/、src/tui/ |
| 三模式输入 |
! 本地 Shell(带一次性授权)/ / TUI 命令 / 纯文本发给 Agent |
src/tui/tui-submit.ts |
| 根级选项预扫描 |
--dev / --no-color / --profile / --log-level / --container |
src/infra/cli-root-options.ts |
| 诊断系统 |
25 个核心步骤(多数是检查,也有收尾步骤),note* 只报告、maybeRepair* 可修复 |
src/flows/doctor-health-contributions.ts |
| 服务配置审计 |
入口、运行时、PATH、令牌、平台单元字段 |
src/daemon/service-audit.ts |
| OSC 8 超链接 |
支持则可点,不支持则降级为纯文本 |
src/tui/osc8-hyperlinks.ts |
| BTW 旁支问答 |
临时提问,不写入后续会话上下文 |
src/agents/btw.ts |
| 模糊搜索选择器 |
子序列匹配 + 连续/词首加权打分 |
src/tui/components/fuzzy-filter.ts |
C.2.5 部署与运维(来源:第 15 章)
| 能力 |
实现 |
出处 |
| 多阶段构建 |
4 个有实质工作的构建阶段(另有 2 个只选基础镜像的别名阶段),基础镜像按 SHA256 摘要锁定 |
Dockerfile |
| 双镜像变体 |
node:24-bookworm 与 node:24-bookworm-slim |
OPENCLAW_VARIANT |
| 可选组件 |
浏览器(约 +300MB)、Docker CLI(约 +50MB)均为 build-arg 开关 |
Dockerfile |
| 非 root 执行 |
USER node(uid 1000) |
Dockerfile |
| 供应链加固 |
可选安装 Docker CLI 时,Docker apt 签名密钥指纹逐字比对,不符即 exit 1 |
Dockerfile |
| 结构化日志 |
文件为 JSON Lines(每行一个 tslog 日志对象)+ 控制台按子系统哈希 6 色着色 + 按天滚动 |
src/logging/logger.ts、src/logging/subsystem.ts |
| 日志脱敏 |
17 条默认模式(结构性 + 已知前缀 + Telegram token) |
src/logging/redact.ts |
| 单实例保证 |
O_EXCL 锁文件 + PID / 启动时间校验 |
src/infra/gateway-lock.ts |
| 备份 |
create / verify,归档带 manifest |
src/infra/backup-create.ts |
| 云平台配置 |
仓库自带 fly.toml、render.yaml,docs/install/ 下十余种部署路径 |
仓库根目录 |
C.2.6 技能系统(来源:第 16 章)
| 能力 |
实现 |
出处 |
| 按需加载 |
提示只放目录,正文靠 read 工具按需读 |
formatSkillsCompact |
| 六级来源 |
extra < bundled < managed < personal < project < workspace,完全替换 |
src/agents/skills/workspace.ts |
| 资格过滤 |
os / bins / anyBins / env / config 五类声明 |
shouldIncludeSkill |
| 自适应降级 |
完整 → 紧凑(去描述)→ 二分截断 |
applySkillsPromptLimits |
| 预算上限 |
150 个技能 / 30,000 字符 / 单文件 256KB 等 5 个默认值 |
src/agents/skills/workspace.ts |
| 热重载 |
chokidar + 250ms 写入稳定阈值 |
src/agents/skills/refresh.ts |
| 安装安全扫描 |
critical 阻断,warn / info 放行并记录;覆盖插件安装与技能依赖安装,openclaw skills install 从 ClawHub 下载的路径不调用 |
src/plugins/install-security-scan.ts |
| 环境变量注入 |
引用计数 + 不覆盖既有变量 + 从子进程剥离 |
src/agents/skills/env-overrides.ts |
C.3 安全模型对比
C.3.1 传统应用安全 vs Agent 安全(来源:第 13 章)
| 维度 |
传统应用安全 |
Agent 安全 |
| 输入来源 |
用户输入 |
用户输入 + 模型推理 + 工具输出 + 外部内容 |
| 行为可预测性 |
确定性(同输入 → 同输出) |
概率性(同输入可能 → 不同输出) |
| 攻击向量 |
SQL 注入、XSS、CSRF |
提示注入、间接注入、工具滥用、上下文投毒 |
| 安全边界 |
明确(网络 → 应用 → 数据库) |
模糊(Agent 同时是客户端和服务端) |
| 失败模式 |
可枚举(已知漏洞列表) |
不可枚举(创意性滥用) |
C.3.2 接口信任级别(来源:第 13 章)
| 接口 |
信任级别 |
主要风险 |
控制手段 |
| TUI(本地终端) |
高 |
物理访问隐含信任 |
Bang 模式仍需一次性会话内授权 |
| Gateway HTTP API |
中 |
网络可达 |
认证 + /tools/invoke 默认拒绝清单 |
| Telegram 私聊 |
中低 |
任何知道 Bot 用户名的人 |
dmPolicy(默认配对)/ allowFrom + 会话隔离 |
| Discord 公共频道 |
低 |
任何频道成员 |
群组策略 + requireMention + 工具限制 |
开放群组(groupPolicy: "open") |
最低 |
任何能进群的人 |
群组策略 + 最严的工具限制 |
C.4 Provider 与降级(来源:第 4 章)
C.4.1 降级触发条件与行为
| 触发条件 |
具体场景 |
系统行为 |
| HTTP 429 |
API 密钥达到速率限制 |
先轮转 Auth Profile;全部冷却中则降级到下一个模型 |
| HTTP 500/502/503 |
Provider 服务端故障 |
按 timeout 类处理(不写入 Auth Profile 冷却):先换下一个 Profile,再不行降级模型 |
| 上下文溢出 |
对话历史超过窗口 |
由内层 runner 压缩后重试;不会降级换模型——溢出错误抛到降级层会被直接重新抛出(src/agents/model-fallback.ts) |
| 认证失败(401/403) |
密钥过期或失效 |
轮转 Auth Profile;全失败则降级模型 |
| 网络超时 |
超过配置超时时间 |
尝试下一个候选模型 |
| 模型不存在 |
模型已下线(按报错文本识别,isModelNotFoundErrorMessage();HTTP 状态码表里没有 404 分支) |
降级到下一个候选模型 |
C.4.2 模型路由的四条独立通道
OpenClaw 并不是"一个模型走天下"——它为不同模态各留了一条独立的路由,都支持 { primary, fallbacks } 形式:
| 配置项 |
用途 |
缺省行为 |
agents.defaults.model |
主推理模型 |
系统默认 anthropic/claude-opus-4-6 |
agents.defaults.imageModel |
视觉理解;主模型不支持图片输入时也走它 |
— |
agents.defaults.imageGenerationModel |
图像生成 |
未配置时按已有凭证尽力推断 |
agents.defaults.pdfModel |
PDF 处理 |
未配置时回落到 imageModel |
C.5 部署形态对比(来源:第 15 章)
C.5.1 裸机 vs 系统服务 vs 容器
| 维度 |
裸机直接运行 |
系统服务 |
容器化 |
| 进程管理 |
无——终端关了就停 |
开机自启 + 崩溃重启 |
restart: unless-stopped |
| 环境隔离 |
无 |
无 |
容器级隔离 |
| 额外依赖 |
无 |
无(用系统自带的服务管理器) |
Docker / Podman |
| 可重现性 |
依赖主机环境 |
依赖主机环境 |
镜像即环境 |
| 升级回滚 |
手动 |
手动 |
切换镜像标签 |
| 调试便利性 |
高 |
中(看服务日志) |
中(需 docker exec) |
| 多实例 |
靠 --profile 手工隔离 |
按 profile 生成不同服务名 |
Compose 原生支持 |
| 适合谁 |
个人开发机、树莓派 |
个人与小团队的长期部署 |
生产部署、CI/CD、团队协作 |
三种形态并存可以看作渐进式复杂度:用户只承担自己实际需要的那一层。
C.5.2 Cron vs 心跳(来源:第 12 章)
| 维度 |
Cron |
心跳 |
| 时间精度 |
精确("周一早上 9 点") |
近似("大约每 30 分钟") |
| 执行保证 |
总是触发,总是执行 |
触发后由 Agent 决定是否行动 |
| 多任务 |
每个调度对应一个作业 |
多项检查合并到一次执行 |
| 跳过逻辑 |
不可跳过 |
可返回 HEARTBEAT_OK 提前收工 |
| Token 成本 |
每次都是一次完整模型调用 |
无事时只需一次轻量推理;HEARTBEAT.md 实际为空时直接跳过、不调模型 |
| 用途 |
报告、备份、定期操作 |
监控、告警、条件响应 |
C.5.3 Telegram Long Polling vs Webhook(来源:第 8 章)
| 考量维度 |
Long Polling |
Webhook |
| 部署复杂度 |
零——只需出站连接 |
需要公网 HTTPS 端点 |
| NAT 友好 |
是 |
否——需要端口转发或反代 |
| 消息延迟 |
接近实时(长轮询挂起等待,有更新即返回) |
接近实时(Telegram 主动推送) |
| 资源消耗 |
持续保持连接 |
仅在有消息时消耗 |
| 可靠性 |
简单——失败重试即可 |
复杂——webhook 返回非 2xx 时,Telegram 重试有限次数后放弃 |
| 调试难度 |
低 |
高——本地开发需要隧道工具 |
C.6 Token 感知设计(来源:第 17 章)
上下文窗口是 Agent 系统里最稀缺的资源,OpenClaw 在多处为它做了专门设计。下表只列机制与出处——具体能省多少完全取决于负载,本专栏不给凭空的倍数。
| 模块 |
Token 感知设计 |
出处 |
| 技能系统 |
提示中只放目录,正文按需 read |
src/agents/skills/workspace.ts |
| 技能目录 |
完整 → 紧凑 → 二分截断的三层降级,默认 30,000 字符预算(skills.limits.maxSkillsPromptChars 可调) |
applySkillsPromptLimits |
| 技能路径 |
home 前缀压成 ~,源码注释估算每个技能省 5–6 token |
compactSkillPaths |
| 浏览器 |
用无障碍树而非截图或整页 DOM 表示页面 |
extensions/browser/ |
| 上下文压缩 |
超限时摘要历史,保留关键标识符 |
src/agents/compaction.ts |
| 上下文守卫 |
按模型窗口与 contextTokens 双重封顶 |
src/agents/context-window-guard.ts |
| 工具输出 |
单个工具结果不超过上下文窗口的 30%(另有 400,000 字符硬上限),超出即截断 |
src/agents/pi-embedded-runner/tool-result-truncation.ts |
| 用量可观测 |
单列 cacheRead / cacheWrite,gateway usage-cost 汇总 |
src/agents/stream-message-shared.ts |
使用提示:本附录中的表格为各章内容的汇总快照。如需了解某项对比的详细分析和设计取舍,请参考各表格标注的来源章节。