从LLM到OpenClaw

1 阅读4分钟

1.背景

  随着AI的发展,人类已经不满足于LLM只能“告诉我们怎么去做”,而是更希望它直接“代替我们做成这件事”。于是,OpenClaw应运而生。

2. 举例

  需求:我要每天早上8点看到时政新闻。

(1). LLM

  在过去,我把这个需求告诉LLM,然后它以文本的形式给出具体的实施方案(例如:给出一段nodejs脚本,该脚本调用时政新闻API,拿到数据后,通过邮件等形式发送给我。依托于Github Actions等工具定时执行该脚本,以完成这个需求)。

  于是,我将对话中的脚本复制下来,本地创建一个项目,粘贴代码,设置邮件地址,安装项目依赖,运行调试,配置Github工作流,然后在Github上新建仓库,再将本地代码上传到远程仓库。自此,每当定时任务触发,我就收到了含有时政新闻的邮件,到这里我的需求才得到满足。

  可以看出AI在整个过程中起到了一个“总指挥”的作用,它就在那里动动嘴皮子,具体的实施从头到尾都是我做的。

(2). OpenClaw

  而现在,我把这个需求告诉OpenClaw,他先把指令发送给LLM,分析出意图,并做出行动决策(同上),而后它自己完成从创建项目到上传到远程仓库的全流程,不需要我亲自操作。

  LLM就像大脑,OpenClaw为LLM这个大脑扩展出了手(claw本身就有爪子的含义),使AI不仅能说,而且能做。

  OpenClaw能创建项目,说明它连接了文件系统。事实上,除了文件系统,它还连接了聊天软件、浏览器以及其他各种工具,下面展开说说。

3.扩展

  OpenClaw对于LLM的扩展,体现在它连接了聊天软件、文件系统、浏览器以及其他各种工具。

(1). 聊天软件

  QQ、微信、飞书等聊天软件对外开放了部分API,OpenClaw的开发者(及社区贡献者) 针对每个聊天软件,利用其开放的API,在OpenClaw项目内部实现了对话接口。这使得OpenClaw可以集成到诸多社交app中,作为一个bot提供对话服务,而无需像豆包、deepseek等局限于一个特定的app中。

(2). 文件系统

  上一段说到,OpenClaw连接聊天软件,是通过远程调用API实现的,而它连接文件系统就更加简单了,因为文件系统跟OpenClaw就在同一主机上。OpenClaw利用Node.js运行环境提供的 fs (file system) 等内置模块,直接对操作系统的文件进行读写、修改、删除等操作。

  这就意味着,OpenClaw对于文件系统的访问权限 == 运行OpenClaw的用户对于文件系统的访问权限。这样一来,当前用户能删除的文件,OpenClaw在得到授权后也能删除,这就要提醒我们要注意一些安全问题。

(3). 浏览器

  OpenClaw通过Chrome DevTools Protocol (CDP) 这个强大的接口实现对(基于Chromium的)浏览器的控制,这个接口让外部程序 像我们平时F12打开的开发者工具一样,深入地控制和检查浏览器。操作网页的DOM元素(如填写表单、点击按钮等)完全不在话下。

  既可以在后台运行浏览器,也可以呈现浏览器窗口运行。

(4). 其他各种工具

  依赖于标准化的“技能(Skills)”封装(SKILL.md)以及API密钥的管理,OpenClaw能结合其他各种工具完成任务。

  下面是一个在QQ中询问OpenClaw今日天气的例子。OpenClaw借助技能与天气API连接,实现了天气查询功能。

sequenceDiagram
    participant User as 我 (QQ)
    participant Gateway as 网关 (Gateway)
    participant Agent as 大脑 (LLM)
    participant Skill as 双手 (技能)
    participant API as 外援 (天气 API)

    User->>Gateway: 在QQ发送:“给我讲讲今天的天气”
    Note over Gateway: 1. 指令接收与路由
    Gateway->>Agent: 将消息转发给LLM

    Note over Agent: 2. 意图理解与决策
    Agent-->>Agent: 理解意图:需要天气数据<br/>决策:调用“查询天气”技能

    Agent->>Gateway: 请求调用“查询天气”技能<br/>(携带参数:时间、地区)

    Note over Gateway: 3. 技能调度与执行
    Gateway->>Skill: 触发“查询天气”技能

    Note over Skill: 4. 连接外部“外援”
    Skill->>API: 调用 天气 API<br/>(使用预先配置的API Key)
    API-->>Skill: 返回当地气温、降雨量等数据

    Skill-->>Gateway: 返回天气数据
    Gateway-->>Agent: 将数据传回给LLM

    Note over Agent: 5. 结果生成与回复
    Agent-->>Agent: 分析数据,组织成易懂的回复

    Agent->>Gateway: 发送最终分析结果
    Gateway->>User: 在QQ中回复:“今日晴,最高气温...”

  而文章开头的例子是OpenClaw借助技能与Github等工具连接,实现了定时推送时政新闻的功能。

  OpenClaw本身连接了聊天软件,连接了文件系统,连接了浏览器,至此它能完成的任务还是有限。而它借助Skills连接了其他工具,就像一个补集,至此OpenClaw完整了。