🦞 深度揭秘 OpenClaw:AI Agent 的“手脚”是如何长出来的?

开启养虾篇的更新喽!最近OpenClaw特别火,之前自己也写过一点ts代码,于是扒了一下OpenClaw代码研究一下,本篇文章将会从0到1讲解一下爆火的OpenClaw手脚是如何长出来的?

大纲

  • 1.什么是 OpenClaw?

  • 2.“手脚”是什么?OpenClaw 是怎么执行真正的动作的?

    • 2.1 skills(技能)—— AI 能做什么?

    • 2.2 Tools(工具)与 Function Calling —— 动作真正执行者

  • 3.OpenClaw 源码核心分析

    • 3.1 技能加载

    • 3.2 工具集

1.什么是 OpenClaw?

简单来说,OpenClaw 是一个开源的 AI Agent 平台,它不是普通聊天机器人,而是 真正能执行任务的人工智能助手框架。它能自动化执行命令、操作文件、运行浏览器自动化流程、集成 API、响应消息渠道等。

📌 核心特点:

  • 多种渠道支持:Telegram、Discord、WhatsApp 等聊天平台可接入 OpenClaw Agent。(OpenClaw Center)

  • 支持多种模型:如 GPT、Claude、Gemini、本地模型等。(OpenClaw Center)

  • 完全开源、自主部署,数据可以留在本地而不泄露给第三方。(OpenClaw)

  • 不是纯聊天机器人,它可以 执行真正的动作——运行代码、控制浏览器、执行命令等。(Best AI Tools)

🧠 通俗比喻:

如果把普通聊天机器人当成智能客服,OpenClaw 就像是 一个会动、会操作、会执行任务的 AI 助手的操作系统


2.“手脚”是什么?OpenClaw 是怎么执行真正的动作的?

OpenClaw 最核心的价值就是 —— 让 AI 不只是生成文字,而是“做事”

为了做到这一点,它有两个关键体系:

2.1 Skills(技能)—— AI 能做什么?

技能(Skills) 类似于文档SOP,描述了 Agent 能做的事情:

  • 简单技能:比如返回当前时间

  • 复杂技能:比如进行 Web 搜索、管理邮箱、运行 shell 命令、API 工作流

  • 自定义技能:社区或开发者自己开发的扩展模块

这些 skills 通常由一个目录+文档组成,OpenClaw 在启动时会自动扫描这些技能并将它们加载到 Agent 的能力列表中。

📌 Skill 的作用:它不是执行逻辑,而是 告诉 Agent:这个功能存在、可以被调用、该如何使用

换句话说:

Skills 是能力声明,但不执行动作。

OpenClaw 的技能系统遵循 AgentSkills 兼容规范。 每个技能是一个文件夹,至少包含一个 SKILL.md,用于向 Agent 显示:

  • 技能名称、描述

  • 当用户/模型应当触发该技能时

  • 与该技能相关的工具使用说明

典型结构:

my-skill/
  SKILL.md

在 SKILL.md 里你写:

---
name: web-search
description: Use this skill to search the web
---
...

OpenClaw 会从三个位置加载技能(优先级为 workspace > 本地 > 内置),然后把这些技能信息注入到生成给模型的 prompt 里,让模型“知道有这些能力”。


2.2 Tools(工具)与 Function Calling —— 动作真正执行者

当 Agent 决定要“去做某件事”,它需要调用一个具体的 工具(tool)

这正是 Function Calling / Tool Calling 的意义所在。

什么是 Function Calling(或 Tool Calling)?

Function Calling(工具调用)不是 OpenClaw 自创,而是 OpenAI API 的官方概念。

它是模型与外部系统交互的通用机制——模型在生成输出时,会提出一个“函数调用请求”(结构化 JSON),由程序执行后再返回结果给模型。OpenClaw 就是利用这个机制让模型做实际操作。

  • Function Calling 基本流程

工具调用是指您的应用程序与模型之间通过 OpenAI API 进行的一系列多步骤交互。工具调用流程主要包含五个步骤:

  1. 使用模型可以调用的工具向模型发出请求

  2. 接收来自模型的工具调用

  3. 使用来自工具调用的输入,在应用程序端执行代码

  4. 使用工具输出向模型发出第二个请求

  5. 接收模型的最终响应(或更多工具调用)

这个过程就像:

函数调用图步骤
函数调用图步骤

这就是所谓的 Function Calling(工具调用)机制。它让模型的输出不仅仅是文本,而是一种结构化请求。OpenClaw 的“手脚”正是构建在这个机制之上。

3.OpenClaw 源码核心分析

3.1 技能加载

基于底层库mariozechner/pi-agent-core来构建

Skills 加载入口:loadWorkspaceSkillEntries

在 workerspace.ts 源码中,OpenClaw 通过 loadWorkspaceSkillEntries 函数实现了一套多层级的“能力发现”机制。并不只看一个目录,它会从多个源合并技能,并遵循“近者优先”的覆盖逻辑:

  • Extra Dirs: 用户自定义的外部路径。

  • Bundled: 框架内置的核心技能。

  • Managed: 全局管理目录(~/.openclaw/skills)。

  • Agents Skills: 遵循 .agents/skills 标准的项目或个人技能。

  • Workspace: 当前项目下的 ./skills 目录(最高优先级)。

另外,代码中实现了一个性能优化:路径压缩(Compact Paths)。这个有趣的函数叫做compactSkillPaths。它会将路径中的用户主目录替换为 ~

技术细节:这不仅是为了美观,通过将长路径(如 /Users/alice/...)缩短,每个技能可以节省 5-6 个 Token。在加载数百个技能时,能为系统提示词(System Prompt)腾出 400-600 个 Token 的空间。

3.2 工具集

在 OpenClaw 里面,“工具(Tools)” 就是 Agent 的实际执行能力。模型根据技能和 prompt 判断“应该用哪个工具做事”,再通过 函数调用(Function/Tool Calling) 真正触发执行。

核心入口就是:

export function createOpenClawCodingTools(options?) { … }

这个函数负责收集、构建、过滤和注入所有 OpenClaw 可用的工具,并最终返回一组工具定义,供模型执行。它基于 pi‑agent‑core / pi‑coding‑agent 实现,并在此基础上扩展了 OpenClaw 自有的能力。

OpenClaw 的工具不是单一来源,它实际上把不同来源的工具组合起来,并在运行前经过 策略过滤、权限校验、schema 清理 等步骤,构成最终可被模型调用的工具列表。

支持的工具见前面图片即可。

AI时代已来,加速学习!

学习更多干货,欢迎关注转发!

玩转cpp小项目星球3周年了!

图片

图片

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐