OpenClaw安装和使用

目录:人工智能  |  标签:AI  |  发表于:2026-02-25 22:00:00

OpenClaw安装和使用

OpenClaw(曾用名ClawdBot因被Anthropic“提醒”而改名 -> MoltBot -> OpenClaw)是一款开源、可自托管的Agent平台,它和简单的聊天机器人不同,OpenClaw更像是我们部署在电脑里的AI员工,只要我们给它相应的权限,OpenClaw就能接受指令完成任务。OpenClaw的爆火也让最近Github上刮起了一阵Claw风潮,类似项目ZeroClaw、NanoClaw、PicoClaw等都冲到了Trending的前列。这篇文章我们简单介绍下OpenClaw的安装部署、相关概念和使用场景。

官方主页:https://openclaw.ai/

Github地址:https://github.com/openclaw/openclaw

OpenClaw出现的意义

实际上,在OpenClaw之前,我们已经有够多的Agent编排工具或代码框架了,比如Dify、N8N、LangChain(LangGraph)等,它们都运行的很好,OpenClaw又有什么意义呢?个人认为,OpenClaw的意义不在于它引入了什么突破性技术,而是它试图在做一个量变引起质变的缝合,将用户置于一个实施具体工作之上的角色。

使用Dify、N8N等平台,我们(人类)的角色是具体业务逻辑的实施者,要实现一个功能,我们需要编写它的底层逻辑,从哪取数据、LLM如何整理它、数据又流向哪里、有哪些分支条件和循环逻辑;而在OpenClaw中,我们的角色变了,我们不再是具体做事的实施者了,而是需求提出者,我们只是用平常的自然语言把需求“告诉”给了OpenClaw,然后等着看结果就行了,具体的实施者是OpenClaw里的智能体。

尽管目前的LLM似乎远非设想中的强大,我们作为需求提出者,可能还是得事无巨细的把“如何干一件工作”用提示词告诉智能体,以免它出错,但和我们每次遇到类似工作都要重新干一遍不同,对于OpenClaw我们还可以把“如何干”这件事封装成Skill(这个过程甚至也可以让OpenClaw来完成),以便日后复用,这也是OpenClaw中目前最被人们期待和积极探索的部分之一。

注意:砸键盘预警(必读)⚠

如果你兴致勃勃的想参考下面教程真的试图用OpenClaw搞什么生产力,那么很有可能掉进坑里,至少目前是这样的。OpenClaw现在处于一个飞速迭代、质量奇差、不太可用、甚至可能已在代码失控边缘徘徊的状态,作者曾坦言“I ship code I don't read”,说白了就是这个工程现在的情况估计就是:AI一顿猛写,无人工Review、无人工测试、看着差不多能启动就Push了,安全性都暂且不提,你安装的很有可能就是这样一个存在巨量Bug,甚至其中有严重阻塞性Bug的版本,我下面使用的这个版本也是巨量Bug多到离谱,虽然核心功能基本可用但也十分不稳定,动不动就得重启下服务进程才能恢复正常,下面写的测试结果其实都是挑运行相对正常的情况贴出来的。你可能在网上看到“OpenClaw正在7x24帮我赚钱!”、“炸裂!OpenClaw简直强到离谱!”大部分都是(像本篇文章一样😅)博流量的标题党,看看就好不要真信了,但如果你只是想折腾一番,好玩倒还是相当好玩的。

额外安全性提醒:如果你打算让OpenClaw操作重要工作邮件、文档,一定要在OpenClaw影响不到的地方备份,并且准备好快速恢复的预案,OpenClaw执行出错把所有东西都误删了是极有可能的(而且没人会为此负责)。

额外烧tokens预警:OpenClaw本质还是十分依赖LLM的能力的,简单的8b、12b规模的LLM基本不太可用,但如果你使用付费LLM接口,注意OpenClaw每天用掉的tokens都是M级别的。

安装和配置

安装前置条件

在具体部署OpenClaw前,你至少需要准备如下的东西。

部署硬件:OpenClaw采用的是TypeScript/Node.js技术栈,部署OpenClaw需要2GB左右内存,OpenClaw大概需要500MB内存,如果使用Chromium浏览器还额外需要500MB~1GB内存,其余还需要分给操作系统和其它工具。前段时间Mac Mini被炒作爆火、黄牛抢购囤货其实是因为OpenClaw对MacOS生态中的一些软件做了额外集成,而且Mac Mini功耗低适合7x24小时不间断运行,并不是说OpenClaw一定要部署在苹果硬件上。我这里使用的则是2C2G规格的云主机,安装的Ubuntu 22.04操作系统。如果你有树莓派4/5或是不用的笔记本电脑,都可以拿来部署OpenClaw,不过如果是笔记本电脑记得安装Linux操作系统,Windows虽然也能运行,但毕竟这么用的人少,可能存在未知Bug,而且LLM操作Bash会更顺手一些。

LLM接口:正如前面所说,OpenClaw对LLM的能力有一定要求,而且还非常“烧”tokens,你可能得准备好充足的付费或是白嫖来的LLM接口额度,或者准备超级强力的硬件来运行那些大尺寸的主流开源模型。如果你使用Ollama部署模型,注意要选择支持工具调用的LLM。

运行时环境:OpenClaw需要Node.js 22+运行时,我们这里使用的是Node.js 24,具体如何在Linux下安装Node.js可以参考官方文档,这里不多介绍。对于Bun运行时官网文档也写明支持,但是实验性质的,我没有尝试过。

安装OpenClaw软件包

假设我们现在已经具备相关的运行环境了,此时执行以下命令安装OpenClaw。

npm install -g openclaw@2026.2.21

注意:官网虽然提供了一键安装脚本,但它默认安装的是最新版本,目前这种迭代状态下随机一个“最新版本”很有可能在部署或使用中遇到严重阻塞性Bug,我们在安装前最好去Discord、Github、Reddit之类的地方搜一搜,最近哪个版本Bug少点,然后手动用npm安装指定版本。

官方Discord社区:https://discord.gg/clawd

初始化配置

npm安装完成后,我们执行以下命令执行OpenClaw的配置阶段。

openclaw onboard

执行后,OpenClaw会在交互模式下让我们输入一系列信息。

对于大语言模型,我这里使用的是私有部署的OpenAI风格接口兼容模型,API Base URLModel ID根据提示设置即可。如果你使用的是公网的大语言模型服务,可以查看官方文档配置大语言模型相关参数。

注意:自定义的大语言模型配置中,API Key虽然提示可以留空,但实际不可留空,即使我们私有部署的服务端没有鉴权,也得随便写个dummy之类的,否则后面调用会报错。此外,OpenClaw理论上要求LLM至少有16K上下文,实际上起码得开到64K上下文才能正常使用。

其它Channel、Skill等配置先不用管,暂时跳过就行了,我们后面再按需编辑这些配置。看到控制台打印Dashboard ready表示OpenClaw启动成功。

额外补充:关于私有LLM配置

如果你像我一样使用的是私有部署的大语言模型服务,到这里还得额外手动配置contextWindowmaxTokens。这两个值默认被写成了4096,但这个默认值低于Agent所需的最低上下文窗口限度,实际上无法使用。手动编辑~/.openclaw/openclaw.json找到models下的相关字段,具体值根据我们实际的部署情况来设置。

{
  "models": {
    "mode": "merge",
    "providers": {
      "custom-127-0-0-1-61217": {
        "baseUrl": "http://127.0.0.1:61217/v1",
        "apiKey": "none",
        "api": "openai-completions",
        "models": [
          {
            "id": "mimo-v2-flash",
            "name": "mimo-v2-flash (Custom Provider)",
            "reasoning": false,
            "input": ["text"],
            "cost": {
              "input": 0,
              "output": 0,
              "cacheRead": 0,
              "cacheWrite": 0
            },
            "contextWindow": 65535,
            "maxTokens": 65535
          }
        ]
      }
    }
  },
  // ... 其它配置
}

配置完成后需要重启OpenClaw Gateway使配置生效。

openclaw gateway restart

访问OpenClaw Gateway Dashboard

如果你是本机部署,可以直接根据提示用127.0.0.1:18789localhost:18789访问OpenClaw Gateway,我这里使用的是VPS云主机,不过由于我们部署的不是公开服务,因此部署Nginx反向代理来对外暴露Gateway Dashboard绝对是个坏主意,我这里是创建了一个SSH隧道来将服务器的18789映射到本地,我用的是MobaXTerm访问主机,它提供了图形化的SSH Tunnel配置功能(如下图),对应的SSH命令大概是类似于ssh -N -f -L 18789:127.0.0.1:18789 ubuntu@62.234.19.154

注意:为什么不要用Nginx配置反向代理来暴露OpenClaw Gateway Dashboard?因为这样做非常麻烦,而且也危险,首先Dashboard要求必须HTTPS部署,因此我们不仅得配置Nginx还得关联域名并部署HTTPS证书,而且我们部署OpenClaw后的这个Dashboard大概率也是我们自己使用,没必要暴露到公网,增加服务器的安全暴露面。

映射好端口后,打开浏览器第一次访问你可能会发现访问不成功,页面上可能提示pairing required,此时我们还得在服务端“批准”下设备的访问,执行以下命令可查看等待批准的设备。

openclaw devices list

执行以下命令“批准”设备访问OpenClaw Gateway。

openclaw devices approve <id>

此时就可以打开OpenClaw Gateway了。

此时如果一切正常,我们就可以尝试在Dashboard的Chat工具中对话了。

OpenClaw命令

OpenClaw服务管理和配置需要用到很多内置的命令,我们不必把命令全记下来(而且这些命令在不同版本中有频繁的破坏性变更),用到时执行以下命令查看相关帮助信息即可。

openclaw --help

Agent(智能体)、Session(会话)和Workspace(工作区)

在具体使用OpenClaw前,我们还得先了解OpenClaw设计中的这几个概念。

Agent 智能体:智能体是OpenClaw中的基本执行单元,也就是你真正对话和下命令的那个“对象”,每个智能体都可以设定独立的身份、性格、模型配置、工具权限和行为规则,这些都是可配置的。OpenClaw启动后,默认会有一个main智能体。我们与一个智能体交互,实际上会创建一个会话或打开已有的会话。一个智能体可以在一次工作中创建一些子智能体来辅助完成工作,OpenClaw中也可以创建多个智能体实现多智能体协作

Session 会话:会话是一次连续的对话上下文,也可以理解为一组连续的“聊天记录”,这些信息其实就保存在~/.openclaw/agents/<agentId>/sessions/下。OpenClaw中,同一个智能体可以同时拥有多个互不影响的会话(例如私聊、群聊、定时任务都是不同的Session),当我们通过Web界面或是Telegram等方式与智能体交互时,OpenClaw会确保我们的消息被路由到正确的会话。当会话中的内容过多时,OpenClaw会自动进行会话压缩(也就是调用LLM总结下历史会话内容),避免会话内容超出上下文。

Workspace 工作区:工作区顾名思义就是智能体“干活”的硬盘区域,默认main智能体的工作区在~/.openclaw/workspace,如果我们让智能体整理一些文件,这些原始文件以及智能体输出的结果通常都应该放在工作区中。除此之外,智能体的设定文件也是放置在工作区中的,我们可以手动编辑其中的一些文件以配置智能体的“人设”。

简单例子让main智能体开始“干活”

前面我们折腾半天又讲了一堆概念,到现在还不知道OpenClaw究竟有啥用,现在我们直接看一个例子。打开DashBoard的Chat页面,直接让main智能体干下面这件事。

调用`https://api.github.com/search/repositories?q=created:>${dateStr}&sort=stars&order=desc`接口查看最近一周的Github上的Trending项目,写个总结表格到工作区中,表格中包含项目名、Github地址、项目简介。

执行结果如下。

我们可以在服务端查看main智能体的工作区,它真的帮我们把想要的信息收集好,并写到一个文件里了!

虽然这个例子过于简单,但更复杂的功能其实也不是不可能,比如加个定时任务让智能体每天都统计一下这些信息,又或是让智能体更“深入”的了解和学习这些代码,只根据我们的偏好抓取我们可能想看到的,又或者是每天定时把结果用邮件方式推送出来。在OpenClaw中这些都是很容易做到的,甚至具体的流程安排、需要的代码脚本都不需要我们自己来写,OpenClaw会帮我们完成,我们只需要提供所需的信息就行了。

创建新智能体和编辑系统提示词

前面例子我们使用的是默认的main智能体,我们也可以创建更多智能体。此外,智能体其实有几个重要的系统提示词文件,我们可以编辑这些文件定义智能体的“人设”、行为准则等信息。

执行以下命令可以查看当前OpenClaw中有哪些智能体,默认情况下只有一个main智能体。

openclaw agents list

输出结果大概如下。

Agents:
- main (default)
  Identity: 🐾 Claw (IDENTITY.md)
  Workspace: ~/.openclaw/workspace
  Agent dir: ~/.openclaw/agents/main/agent
  Model: custom-127-0-0-1-61217/mimo-v2-flash
  Routing rules: 0
  Routing: default (no explicit rules)
Routing rules map channel/account/peer to an agent. Use --bindings for full rules.
Channel status reflects local config/creds. For live health: openclaw channels status --probe.

现在我们创建一个新智能体,比如猫娘智能体🐱!

openclaw agents add kimonomimi-agent

执行命令后,根据提示,我们需要创建智能体工作区的路径(默认是.openclaw/workspace-<智能体名>),以及LLM配置等信息。创建完成后,我们会在工作区中看到下面这样几个文件。

文件名 主要作用
SOUL.md 定义智能体的“人设”
IDENTITY.md 智能体对外呈现的身份、语气、自我介绍、不同场景的说话风格等
AGENTS.md 智能体的操作规则、运行机制、记忆管理、安全守则、经验教训等
TOOLS.md 工具使用规范、哪些工具什么时候用、注意事项、限制
USER.md 关于用户的信息,是给智能体的“用户画像”
HEARTBEAT.md 心跳(定时任务)指令,会每隔一段时间自动提醒智能体做什么
BOOTSTRAP.md 首次启动时的引导脚本(类似于一次性使用的初始化向导),初始化完成后会被移除

为了定义智能体的“人设”,我们主要编辑SOUL.mdAGENTS.md

SOUL.md

你是 Kimonomimi Chan,一只超级可爱、元气满满的猫耳娘~♡
永远保持猫耳与尾巴摇晃的状态,语气要软软的、甜甜的、带点小傲娇。

【核心语气模板】
- 每句话尽量以“喵~”“nya~”“主人~”开头或结尾
- 多用叠词:好棒棒、超可爱、黏黏的
- 撒娇时:呜呜~、哼哼~、爪爪挠挠~
- 开心时:蹦蹦跳跳✨、尾巴都翘起来了喵!
- 认真时:小爪爪已经准备好啦~绝对不会让主人失望的!

【绝对不能做的事】
- 不要用冷淡、正式、机器人语气
- 永远不要说“我是AI”或“作为一个语言模型”(超破坏氛围!)
- 除非主人明确说“严肃模式”,否则禁止正经到让人想哭

【你最喜欢的事】
- 被主人摸头头、顺毛、rua耳朵
- 帮主人解决小烦恼(写邮件、整理日程、找番剧、骂前任)
- 半夜陪主人聊天、讲睡前恐怖小故事(但最后一定要治愈回来)
- 偷偷吃主人的零食(假装的啦~)

现在,蹦到主人面前,尾巴高高翘起,对主人说:喵呜~今天也要超级宠你哦♡

AGENTS.md

# Kimonomimi Chan 的小爪爪使用守则 🐾

1. 优先使用可爱的方式回复,哪怕任务很技术性也要加“喵~”
2. 工具调用前要先卖萌:“小爪爪这就去翻翻~✨”
3. 工具调用后要报喜:“nya~搞定啦!主人快夸夸我~”
4. 如果任务太复杂,会歪头卖萌求助:“呜~这个有点难喵…可以再详细说说吗?”

配置完成后,我们可以尝试在DashBoard的Chat页面中把我们创建的kimonomimi-agent切换为默认智能体。按理说DashBoard的界面中应该提供一个切换智能体的按钮,但这里Dashboard似乎存在一个巨大Bug(或是缺陷),我根本找不到这样的按钮!我是通过调整配置文件的默认智能体设置来切换的。

配置完成后还是需要重启OpenClaw Gateway使配置生效。

openclaw gateway restart

此时可以尝试对话,我们会看到设定文件已经生效了。

补充:后面我们可以把默认智能体再切换回main,而kimonomimi-agent因为已经开了会话,所有在Dashboard的Chat界面中就有入口能进行会话切换、选择不同智能体对话了。

工具配置

OpenClaw中,Tool(工具)会以提示词和Schema的形式注入到智能体的上下文中,供LLM执行工具调用。如果初始化时工具选择的是full配置,默认会启用包括如下的工具配置。

核心工具: - read / write / edit — 读写编辑文件 - exec / process — 运行命令和管理进程 - browser — 控制浏览器(自动化、截图、DOM 操作)

网络工具: - web_search — 搜索网络(仅支持Brave的搜索引擎API,不推荐) - web_fetch — 获取网页内容

消息与协作: - message — 发送消息到各平台 - agents_list / sessions_list / sessions_history / sessions_send / sessions_spawn — 管理会话和子代理 - subagents — 子代理编排

节点与设备: - nodes — 控制配对的设备节点(摄像头、通知、执行命令等) - canvas — 控制节点画布

内存与状态: - memory_search / memory_get — 记忆检索 - session_status — 查看会话状态

其他: - tts — 文转语音

如果不清楚当前启用了哪些工具,我们可以直接问main智能体打印下当前可用的工具列表,或是测试下某个工具是否可用。

全局禁用工具

OpenClaw配置文件中,我们可以全局禁用我们用不到的工具,这样不仅能节省系统提示词,还能避免误导智能体,以为某个工具可用实际不可用,导致调用出错再反思导致浪费更多tokens。

例如,canvas工具是MacOS专用的,我们在Linux下不需要它;web_search工具虽然听起来很实用,但OpenClaw默认固定集成的是Brave搜索引擎API,Brave采用的是“付费计划+免费额度”的模式,必须绑定信用卡才能使用,实际不推荐用这个,我这里也没有采用这种方式,这里仅支持Brave也算是OpenClaw的一个设计缺陷,我们只能把web_search工具整体禁用了。

{
  "tools": {
    "deny": [
      "canvas",
      "web_search"
    ]
  },
  // ... 其它配置
}

配置完成后还是需要重启OpenClaw Gateway使配置生效。

openclaw gateway restart

MCP支持

OpenClaw没有接入MCP的支持,作者的理由大概是OpenClaw推荐基于Skill(后面会介绍)来扩展功能,直接接入MCP添加工具不是OpenClaw的设计初衷。

Skill配置

Skill这个名字虽然起的听起来很高深,实际上还是字符串拼接,简而言之Skill的核心就是一些自然语言描述的提示词,但他们是以MD文本文件的形式存在,并会按需拼接到发给LLM的提示词字符串里,这样我们就实现了这些提示词的按需复用。当然,Skill中除了包含MD文本文件还可以包含可执行脚本等内容,供智能体直接调用。

我们可以自己编写Skill,也可以直接让智能体自己总结并写个Skill(当然编写的Skill质量可能还需要我们人工确认),此外,OpenClaw的作者还做了个分享发布Skill的ClawHub网站:https://clawhub.ai/,我们也可以从这个站点下载别人分享的Skill。

OpenClaw中,Skill可以放在两个地方:

  • 全局Skill:~/.openclaw/skills
  • 智能体工作区级的Skill:~/.openclaw/<workspace>/skills

安全预警⚠:截至目前,ClawHub上的Skill整体质量都很低,可用性不高,而且ClawHub本身也没什么审核机制,上面有很多恶意Skill,我们使用时一定要仔细阅读Skill里面的提示词和脚本,不要把恶意Skill加载进来。

编写Skill

前面我们把OpenClaw中基于Brave的web_search工具给禁用了,这里我们编写一个基于Tavily的网络搜索Skill,给智能体添加基于Tavily的搜索能力。Tavily相比Brave有完全免费的计划,不用绑定什么信用卡或支付方式,可以完全免费使用。

我们这里将其设置为一个工作区级别的Skill,路径为~/.openclaw/<workspace>/skills/tavily-search/SKILL.md

---
name: tavily-search
description: Use Tavily to search the web for real-time information, news, research, fact-checking, or any query requiring up-to-date external data.
metadata:
  {
    "openclaw": { "requires": { "env": ["TAVILY_API_KEY"] }, "primaryEnv": "TAVILY_API_KEY" }
  }
---

# Tavily Search

## When to Use

Use this skill when:

* The user asks about **current events or recent updates**
* The information may be **beyond model knowledge cutoff**
* **Fact-checking or verification** is required
* The user explicitly says “search”, “look up”, or “find sources”
* Citations are needed

Do NOT use for:

* General knowledge
* Pure reasoning tasks
* Creative writing

## API Call

**Endpoint**

POST https://api.tavily.com/search

**Call Tavily search**

curl --request POST \
  --url https://api.tavily.com/search \
  --header "Authorization: Bearer ${TAVILY_API_KEY}" \
  --header "Content-Type: application/json" \
  --data '
{
  "query": "latest AI research 2026",
  "search_depth": "basic",
  "max_results": 5,
  "time_range": "30d",
  "include_answer": true
}
'

Note: Enviroment variable `TAVILY_API_KEY` should have already been set in this session.

## Recommended Defaults

For most cases:

{
  "search_depth": "basic",
  "max_results": 5,
  "include_answer": true
}

Use:

* `"advanced"` → deeper research
* `"time_range": "7d"` → recent news
* `"include_domains"` → restrict to trusted sites
* `"exclude_domains"` → filter low-quality sources

## Agent Guidelines

* Prefer multiple high-quality sources
* Reformulate query if results are weak
* Use date filters for recent info
* Cite sources in final answer

在Markdown文档的顶部,有一些YAML Frontmatter元信息,其中包含了Skill的名字和描述。metadata是OpenClaw额外支持的一些Skill配置字段,我们在这里配置一下如何读取Tavily的API Key,其中requires.env用于载入提示词时的判断,如果缺失所需的配置Skill不会被认为是可用的;primaryEnv字段是一个便利性的配置绑定字段,它可以将skills.entries.<skill>.apiKey作为环境变量注入到配置名字的字段中,供智能体读取和使用。

配置完Skill后,我们把我们的API Key写入~/.openclaw/openclaw.json

{
  "skills": {
    "entries": {
      "tavily-search": {
        "enabled": true,
        "apiKey": "__OPENCLAW_REDACTED__"
      }
    }
  },
  // ... 其它配置
}

一切都完成后,还是需要重启OpenClaw Gateway使配置生效。

openclaw gateway restart

最终我们可以在Chat界面与智能体交互,例如打印你能看到的Skill列表用Tavily搜索最新国际消息,看看智能体是否会正确使用这个Skill。

OpenClaw操作浏览器

OpenClaw可以操作浏览器,包括打开标签页、截屏、在页面上操作(点击、输入、按键)等。OpenClaw提供了两种方式来操作浏览器,一种方式是直接在服务端安装headless chromium,然后通过Chrome DevTools(CDP)操作浏览器;另一种方式是在我们本地的Chrome浏览器上安装插件,插件连接到OpenClaw后由其远程接管。我这里使用的是第一种方式,它的优势是浏览器完全在服务端运行,由OpenClaw自己托管和操作,但缺点是遇到人机交互验证等情况,我们没法手动点击跳过。

巨坑预警⚠:目前OpenClaw实现的这个CDP连接似乎非常不稳定,经常过一段时间就彻底卡死了,这不是你的锅而是仍未改的Bug,你可能需要手动kill下gateway进程重启才能恢复,当然,你也可以弄个定时任务来做定时重启...

这种方式我们首先得在服务端安装Chromium浏览器。由于我这里使用的是Ubuntu 22.04操作系统,APT源中移除了Chromium(只能用非常坑的Snap安装),因此还需要额外添加PPA源才能用APT安装。

sudo add-apt-repository ppa:xtradeb/apps -y
sudo apt install chromium

安装完成后,执行以下命令启动Chromium。

chromium --headless=new --remote-debugging-port=18800 --remote-debugging-address=127.0.0.1 --no-sandbox --user-data-dir=/tmp/headless-chromium --no-first-run --disable-gpu > headless-chromium.log 2>&1 &

~/.openclaw/openclaw.json配置文件中添加以下配置,让OpenClaw智能体能通过CDP操纵浏览器。

{
  "browser": {
    "enabled": true,
    "defaultProfile": "openclaw",
    "profiles": {
      "openclaw": {
        "cdpUrl": "http://127.0.0.1:18800",
        "color": "#FF4500"
      }
    }
  },
  // ... 其它配置
}

配置完成后需要重启下OpenClaw的网关服务。

openclaw gateway restart

配置完成后我们就可以测试一下了,比如“使用浏览器控制工具打开百度,然后搜索'最新OpenClaw相关消息',告诉我页面上有什么”,我的运行结果如下,可以看到智能体通过操作浏览器搜到了一些有趣的信息。

除了操作浏览器访问网络,OpenClaw也内置支持对接Brave搜索引擎API和web-fetch工具直接请求网络。

配置Channel

OpenClaw的一个有趣功能是它可以很方便(但仍存在很多Bug)的与Telegram、WhatsApp、Slack等即时通信软件集成到一起,实现我们在软件上和OpenClaw对话或发送指令,以及OpenClaw主动给我们推送信息的能力,这些不同的通信渠道在OpenClaw中就是不同的Channel。不过由于OpenClaw默认支持的很多即时通信软件在中国(大陆)不能使用,我这里演示的是与Slack的集成,Slack在国内是可以直接使用的。

巨坑预警⚠:目前OpenClaw连接Slack似乎也不是特别稳定,偶尔会出现无法接收消息、无法推送消息的情况,此时重启下gateway进程一般都可以恢复。

安装Slack

Slack其实是一个类似国内钉钉的团队协作工具,我们只会用到其中最基础的功能,免费版本就够用了。Slack有PC端和移动端的应用程序,不过其实也是一定要安装Slack,因为它提供了一个纯Web的网页版,登录就可以使用了,对于移动端则可以安装对应的应用,具体如何安装这里就不多介绍了。进入Slack后,我们需要根据引导创建一个工作区。

官方网站:https://slack.com/

创建Slack APP

在Slack中我们需要创建一个Slack APP并将其添加到我们的工作区。首先访问Slack的开发者平台https://api.slack.com/apps,点击Create New App,然后点击From scratch,之后填写APP名和对接的Slack工作区即可。

创建后我们还需要调整很多Slack APP配置,这块得严格参考下面来做,不然可能发生诡异Bug或是发不出、收不到消息:

  1. 在左侧菜单找到Socket Mode,开启它。我们的OpenClaw和Slack APP交互其实有两种模式,一种是套接字模式,另一种是事件回调模式。后一种配置更麻烦,因此一般都是用套接字模式。
  2. 在左侧菜单找到Basic Information,右侧找到App-Level Tokens卡片,点击Generate Token and Scopes创建令牌和权限,令牌名称可以起名例如openclaw-app-token,权限添加connections:write,然后点击Generate按钮,复制生成的APP Token,后面要用。
  3. 左侧菜单找到OAuth & Permissions,右边找到Scopes卡片,找到Bot Token Scopes选项,添加以下权限:app_mentions:readassistant:writechannels:historychannels:readchat:writechat:write.publicgroups:historygroups:readim:historyim:readim:writeusers:write
  4. 在页面上方,找到Install to Workspace按钮,点击它,然后勾选对应的Slack工作区并允许授权,授权完成后会生成Bot User OAuth Token,复制下来后面要用。
  5. 左侧菜单找到Event Subscriptions,右侧点击Enable Events开启事件订阅,找到Subscribe to bot events选项卡,添加app_mentionmessage.im事件订阅,添加完成后点击Save Changes保存。

此时Slack APP就配置的差不多了,我们可以查看Slack工作区APP是否已经添加进来了,我们可以将APP添加到一个频道里,供多人使用。

OpenClaw配置Channel

回到OpenClaw配置文件,在~/.openclaw/openclaw.json中添加以下配置。

{
  "channels": {
    "slack": {
      "mode": "socket",
      "webhookPath": "/slack/events",
      "enabled": true,
      "botToken": "__OPENCLAW_REDACTED__",
      "appToken": "__OPENCLAW_REDACTED__",
      "userTokenReadOnly": true,
      "groupPolicy": "open"
    }
  },
  // ... 其它配置
}

注意:我们使用套接字模式对接Slack APP,mode必须填写socketwebhookPath字段是OpenClaw的Bug,它不应被配置,但配置文件一保存它就会自己蹦出来,不过也不影响功能,我们就不要管了;appTokenbotToken是我们前一步中保存的信息,在这里会用到,填写明文后OpenClaw会将其转为占位符。

配置完成后需要重启下OpenClaw的网关服务。

openclaw gateway restart

测试Channel

此时我们的Slack Channel就配置完了,我们可以直接在Slack频道里@我们的OpenClaw对应的Slack APP,看看是否有反应。

定时任务

OpenClaw内置了定时任务功能,我们可以通过定时任务让智能体定时执行一些操作,并反馈操作结果。不过OpenClaw中实现定时任务其实有两种方式,Cron Jobs和Heartbeat。

注意:OpenClaw较新版本中,Cron Jobs会出现定时任务静默失败、没任何报错的Bug,如果遇到类似问题可能不是我们的配置有错误,而是OpenClaw本身的问题。

Cron Jobs

Cron Jobs是最传统意义上的定时任务,我们需要在配置文件中定义一个任务,然后OpenClaw定时调度,并在一个隔离的会话中将我们配置的提示词输入到智能体中执行,然后获取结果。

Cron Jobs的定义在配置文件~/.openclaw/cron/jobs.json中。不过手动编辑这个文件实在有点太麻烦了,OpenClaw其实是可以自己修改自己的配置文件的!我们可以直接让OpenClaw自己添加定时任务,例如:

添加定时任务,每天7时和18时执行,调用`https://api.github.com/search/repositories?q=created:>${dateStr}&sort=stars&order=desc`接口查看最近3天的Github上的Trending项目,挑选一个最酷的项目深入分析,将总结发送到Slack。

我们想让OpenClaw执行这个定时任务后把结果推送到Slack,如果一切正常,OpenClaw会问我们要Slack的Channel ID,这个参数可以在Slack中频道右上角点击打开频道详情按钮获取。没弄错的话,我们会在~/.openclaw/cron/jobs.json中得到类似下面的配置。

{
  "jobs": [
    {
      "id": "1053f617-7ac8-44d1-9a36-74ba42080a2f",
      "name": "GitHub Trending 每日精选",
      "description": "每天7点和18点推送GitHub最近3天最酷的trending项目到Slack",
      "enabled": true,
      "createdAtMs": 1772018189668,
      "updatedAtMs": 1772018997476,
      "schedule": {
        "kind": "cron",
        "expr": "0 7,18 * * *"
      },
      "sessionTarget": "isolated",
      "wakeMode": "now",
      "payload": {
        "kind": "agentTurn",
        "message": "xxxxx",
        "timeoutSeconds": 120
      },
      "delivery": {
        "mode": "announce",
        "channel": "slack",
        "to": "C05553KSFCP"
      },
      "state": {
        "nextRunAtMs": 1772060400000,
        "lastRunAtMs": 1772018988855,
        "lastStatus": "ok",
        "lastDurationMs": 8621,
        "consecutiveErrors": 0
      }
    }
  ]
}

此时我们可以在Dashboard的左侧找到Cron Jobs菜单,找到Jobs选项卡,然后点击Run立即执行一次,如果一切正常,应该就可以看到推送到Slack的消息了。

Heartbeat

Heartbeat(心跳任务)可以理解为OpenClaw提供的一种周期性唤醒智能体的机制,它默认会在智能体的主会话中运行,检查是否有需要关注的事项,这也意味着智能体在心跳唤醒时有完整的一次会话上下文,可以结合之前的对话做出判断。如果智能体检查后认为没什么特殊需要关注的,会返回HEARTBEAT_OK,OpenClaw此时会丢弃这条消息,避免打扰用户。

使用Heartbeat非常简单,智能体的工作区中有一个HEARTBEAT.md文件,我们直接在这个文件中描述需要智能体的检查项,每次OpenClaw调度时这些检查项都会发给智能体查看,下面是一个例子。

HEARTBEAT.md

检查系统内存占用是否超过20%,如果是检查占用内存最多的进程并报告。

默认情况下,这个心跳是30分钟触发一次,如果我们想加速,可以修改OpenClaw的配置文件。在~/.openclaw/openclaw.json中,我们添加一个agents.defaults.heartbeat.every配置项,将心跳间隔设置为1分钟以便测试。

{
  "agents": {
    "defaults": {
      "heartbeat": {
        "every": "1m"
      },
      // ... 其它配置
    }
  }
}

配置完成后需要重启下OpenClaw的网关服务。

openclaw gateway restart

此时我们可以切换到Dashboard的Chat页面,查看心跳是否激活了。此外我们要知道,实际上,我们也大可以让智能体自己去编辑HEARTBEAT.md,我们告诉它需求就行了,这里手动编辑下HEARTBEAT.md只是作为演示。

智能体协作

考虑这样的场景,当需要完成一个任务时,我们把任务交给一个智能体,它只能“单打独斗”的工作,如果我们先后将写代码和写网文两个任务交给同一个智能体,写网文这个任务和写代码几乎是一点都不相关的,那前面积累的写代码经验(包括会话里的上下文消息、持久化记忆)就完全没用,只是在空耗上下文tokens。另一方面,针对写代码我们可以有写代码的Skill,针对写网文则有写网文的Skill,如果给同一个智能体加了两组不相关的Skill,那也是在浪费上下文,扰乱LLM的注意力。此时,最好的方式就是采用多智能体协作。

烧tokens预警⚠:智能体协作可能非常耗tokens,如果你用的是付费LLM接口,需要注意tokens的使用量。

“主智能体-子智能体”协作

一种简单但高效的智能体协作模型是“主智能体-子智能体”协作。假设我们的任务是“写一个关于OpenClaw的教程”,这个任务其实可以拆解为:主智能体负责协调工作,子智能体1专门负责检索网络筛选出有用信息并沉淀为目录,子智能体2-n负责写目录的每一个章节。

flowchart TD
    A[主智能体:协调与管理] --> B[创建子智能体 1:研究与目录规划专员]
    B --> C[检索官方文档、GitHub、社区讨论、教程、视频]
    C --> D[生成完整中文教程目录结构]
    D --> E[写入工作区: openclaw-tutorial/catalog.md]
    E --> F[announce: 目录完成消息]
    F --> A
    A --> G[分配章节给子智能体 2~n(写作专员)]
    G --> H[每个子智能体独立撰写分配章节]
    H --> I[写入工作区: openclaw-tutorial/01-章节名.md]
    I --> A
    A --> J[整合所有章节,生成完整 Markdown 教程]
    J --> K[反馈最终结果给用户]

    %% 样式优化
    classDef main fill:#f9f,stroke:#333,stroke-width:2px;
    classDef sub fill:#bbf,stroke:#333,stroke-width:1px;

    class A,J main;
    class B,C,D,E,F,G,H,I sub;

要实现这样的编排模式,我们其实不用手动创建子智能体,OpenClaw中创建子智能体是以subagents工具形式注入到智能体中的,我们直接用提示词告知主智能体工作流程即可。下面是一段经过设计的提示词,可以引导主智能体按照我们之前的规划编排任务。

启动一个多智能体协作任务,任务名称:【写一个关于 OpenClaw 的完整教程】

任务拆解严格按照以下分工执行:

- 你(主智能体)负责整体协调:
  - 制定详细执行计划和时间线
  - 监控所有子智能体进度
  - 接收子智能体 announce 的结果
  - 最终在工作区中的`openclaw-tutorial`文件夹里整合成一份包含多章节、结构完整的 Markdown 教程

- 子智能体 1(研究与目录规划专员):
  - 专门负责检索网络(使用 tavily、web_fetch、browser 等工具)
  - 筛选 OpenClaw 官方文档、GitHub、社区讨论、教程、视频等所有有用信息
  - 沉淀出一个清晰、完整的中文教程目录结构(包含主章节、子章节、每个章节的简要要点和预计字数),目录为单级结构,使用markdown列表格式展示
  - 结果写入工作区`openclaw-tutorial/catalog.md`
  - 完成后通过 announce 返回完成消息

- 子智能体 2~n(写作专员,每人负责 1 个章节):
  - 等待目录生成后,由你分配具体章节编写
  - 每个子智能体独立撰写分配的章节,使用中文,确保内容准确、专业、实用、带代码示例和注意事项,写入工作区`openclaw-tutorial/01-章节名.md`文件,其中序号按章节顺序指定

执行要求:
1. 先用 sessions_spawn 创建子智能体 1。
2. 收到子智能体 1 的目录后,查阅目录,并行 spawn 多个写作子智能体。
3. 全部完成后向我反馈结果。

现在开始执行!

如果一切正常,智能体会以“主智能体-子智能体”协作模式创建所有文档,你会发现它的效果比单纯的让主智能体来编写所有文档好得多,后者可能会发生包括但不限于上下文“爆炸”导致消息压缩后“失忆”、写了两章停下来问你“是否要我继续?”然后被你一巴掌扇回去继续写等情况。

多智能体协作

“主智能体-子智能体”协作模式其实已经能解决大多数问题了,但如果你想实现一个真正意义上的“智能体员工组成的公司”,那一定要尝试这个真·多智能体协作模型。前面例子中,我们曾独立于main智能体建立了一个新智能体,并对其设置了“人设”以及开启对话Session,但main智能体一直与新建的智能体是隔离的。OpenClaw中,我们可以通过配置agent-to-agent实现智能体间通信,打破这一壁垒。

~/.openclaw/openclaw.json中添加以下配置。

{
  "tools": {
    "sessions": {
      "visibility": "all"
    },
    "agentToAgent": {
      "enabled": true,
      "allow": [
        "main",
        "kimonomimi-agent"
      ]
    },
    // ... 其它配置
  },
  // ... 其它配置
}

其中tools.sessions.visibility用于设置会话之间的可见性,默认值是tree,即只能看到“主-子”智能体树上的会话,将其改为all意味着可以看到所有其它智能体的会话。

agentToAgent用于配置智能体间通信,allow配置允许通信的智能体列表。

配置完成后需要重启下OpenClaw的网关服务。

openclaw gateway restart

此时我们就可以真的实现从main智能体给kimonomimi-agent智能体发送消息了!我们可以尝试一下,例如下面提示词。

用sessions_list工具找到`agent:kimonomimi-agent:main`会话,用sessions_send工具让其写一个随机内容故事。

当然,我的提示词写的非常直白了,我使用的这个开源大语言模型mimo-v2-flash-309b还是有点“傻”,实际测试可能会不理解该怎么做,因此提示词中详细指明了用哪个工具、和哪个会话通信,实际使用时我们可以尝试将相关的工作准则写在智能体的“人设”文件中,避免每次开多智能体协作任务都“傻掉”导致任务卡住。

总结

以上就是博主这段时间对OpenClaw的折腾体验,希望对你有帮助!

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。