最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

OpenClaw(龍蝦)Skills從零到發(fā)布的實戰(zhàn)指南

  發(fā)布時間:2026-04-02 16:39:34   作者:flyfox   我要評論
本文詳細介紹了OpenClaw的Skill機制,包括什么是Skill、Skill的目錄結(jié)構(gòu)、SKILL.md的核心格式、以及五種不同類型的Skill,還提供了開發(fā)最佳實踐、安全檢查清單和本地測試指南,幫助開發(fā)者從零開始創(chuàng)建并發(fā)布Skill到ClawHub,需要的朋友可以參考下

基于 7 個真實 Skill 案例的深度解析,從零到發(fā)布,手把手教你開發(fā) OpenClaw Skill。

一、什么是 Skill?

Skill 是 OpenClaw 的核心擴展機制。通過編寫一個 SKILL.md 文件,你就能教會 AI Agent 新的能力。

簡單理解:

  • Tool(工具) = Agent 的手腳(文件讀寫、Shell 執(zhí)行、網(wǎng)絡(luò)請求等通道)
  • Skill(技能) = 加載到這些通道上的具體能力(搜索、查票、股票分析等)

Skill 的加載優(yōu)先級(從高到低):

優(yōu)先級類型路徑說明
1工作區(qū) Skill~/.openclaw/workspace/skills/當前工作區(qū)專屬
2托管 Skill~/.openclaw/skills/通過 ClawHub 安裝的共享 Skill
3內(nèi)置 Skill隨 OpenClaw 分發(fā)官方內(nèi)置

二、Skill 的目錄結(jié)構(gòu)

每個 Skill 就是一個文件夾,核心是 SKILL.md

my-skill/
├── SKILL.md           # 必須:技能定義文件(YAML frontmatter + Markdown 指令)
├── _meta.json         # 可選:ClawHub 發(fā)布元數(shù)據(jù)
├── .clawhub/          # 可選:ClawHub 安裝來源信息
│   └── origin.json
├── scripts/           # 可選:可執(zhí)行腳本
├── references/        # 可選:參考文檔(按需加載,不常駐上下文)
└── assets/            # 可選:模板、圖標等靜態(tài)資源

我們來看 7 個真實案例的目錄結(jié)構(gòu)對比:

Skill目錄結(jié)構(gòu)復雜度
summarizeSKILL.md + _meta.json? 最簡單 — 純提示詞 Skill
skill-vetterSKILL.md + _meta.json? 純提示詞 + 流程協(xié)議
12306-querySKILL.md + scripts/query_tickets.py?? 單腳本 Skill
tavily-searchSKILL.md + search.sh?? 單腳本(Shell)
akshare-stockSKILL.md + scripts/stock_cli.py?? 單腳本 + 豐富 API 文檔
agent-browserSKILL.md?? 外部 CLI 工具封裝
firecrawlSKILL.md + scripts/ × 3 + references/api.md??? 多腳本 + 參考文檔

三、SKILL.md 的核心格式

SKILL.md 由兩部分組成:YAML frontmatter(元數(shù)據(jù)) + Markdown body(指令正文)

3.1 Frontmatter 字段詳解

---
name: my-skill                    # 必須:技能標識符,小寫字母+連字符
description: 技能描述...           # 必須:AI 根據(jù)這個決定何時調(diào)用該技能
version: 1.0.0                    # 可選:版本號
author: your-name                 # 可選:作者
user-invocable: true              # 可選:是否可通過斜杠命令手動調(diào)用
disable-model-invocation: false   # 可選:設(shè)為 true 則禁止 AI 自動觸發(fā)
triggers:                         # 可選:觸發(fā)關(guān)鍵詞列表
  - keyword1
  - keyword2
metadata:                         # 可選:擴展元數(shù)據(jù)
  openclaw:
    requires:
      env:
        - MY_API_KEY              # 需要的環(huán)境變量
      bins:
        - python                  # 需要的系統(tǒng)命令
---

最關(guān)鍵的字段是 description — AI 完全依賴它來判斷何時調(diào)用你的 Skill。

3.2 七個案例的 Frontmatter 對比分析

讓我們看看 7 個真實 Skill 是怎么寫 frontmatter 的:

案例 1:summarize(純提示詞 Skill)

---
name: summarize-pro
description: When user asks to summarize text, articles, documents, meetings,
  emails, YouTube transcripts, books, PDFs, reports, conversations, or any
  long content. Also handles bullet points, key takeaways, action items,
  TL;DR, ELI5, executive summaries...
---

分析:description 極其詳盡,列舉了所有可能的觸發(fā)場景。這是純提示詞 Skill 的典型寫法 — 因為沒有腳本,全靠 description 讓 AI 知道"什么時候該用我"。

案例 2:12306-query(API 調(diào)用 Skill)

---
name: 12306-query
description: 中國鐵路 12306 火車票余票查詢。使用官方 API 查詢車次、票價、余票信息。
  支持按出發(fā)站/到達站/日期篩選。當用戶需要查詢火車票信息(余票、車次、票價、時刻表)時使用此技能。
---

分析:description 用中文寫,明確說明了"做什么"和"什么時候用"。最后一句"當用戶需要查詢火車票信息時使用此技能"是關(guān)鍵的觸發(fā)條件描述。

案例 3:firecrawl(需要 API Key 的 Skill)

---
name: firecrawl
description: Web search and scraping via Firecrawl API. Use when you need to
  search the web, scrape websites (including JS-heavy pages), crawl entire
  sites, or extract structured data from web pages. Requires FIRECRAWL_API_KEY
  environment variable.
---

分析:在 description 中直接提到了環(huán)境變量依賴,讓用戶一眼就知道需要配置什么。

案例 4:tavily-search(帶 triggers 的 Skill)

---
name: tavily-search-skill
description: Tavily API integration with real-time quota management and paid mode toggle.
version: 1.0.4
author: JayeGT002
triggers:
  - tavily
  - search
  - web search
---

分析:使用了 triggers 字段列出觸發(fā)關(guān)鍵詞,這是除 description 之外的另一種觸發(fā)機制。

案例 5:agent-browser(外部工具封裝 Skill)

---
name: agent-browser
description: Headless browser automation CLI optimized for AI agents with
  accessibility tree snapshots and ref-based element selection
metadata: {"clawdbot":{"emoji":"??","requires":{"commands":["agent-browser"]}}}
---

分析:通過 metadata.requires.commands 聲明了外部依賴 agent-browser CLI 工具。

四、五種 Skill 類型實戰(zhàn)

類型 1:純提示詞 Skill(無腳本)

最簡單的 Skill 類型,不需要任何腳本,完全通過 Markdown 指令引導 AI 行為。

代表案例:summarize(文本摘要)和 skill-vetter(安全審查)

summarize 的核心設(shè)計思路:

# Summarize Pro — Your AI Summarization Engine
You are a powerful text summarizer...
## Examples
User: "summarize this: [pastes long article]"
User: "tldr: [pastes text]"
User: "eli5: quantum computing"
## FEATURE 1: Quick Summary (Default)
When user pastes text or says "summarize this":
1. Analyze the text length and content type
2. Produce a summary in the user's default format
?? SUMMARY
━━━━━━━━━━━━━━━━━━
[3-5 bullet points capturing the main ideas]
?? Stats: [X] words → [Y] words ([Z]% reduction)

這個 Skill 的精髓在于:

  1. 角色設(shè)定:開頭就告訴 AI "You are a powerful text summarizer"
  2. 示例驅(qū)動:列出大量用戶可能的輸入方式
  3. 格式模板:為每種摘要類型定義了精確的輸出格式
  4. 行為規(guī)則:明確的 Behavior Rules 約束 AI 行為

skill-vetter 則是另一種純提示詞模式 — 流程協(xié)議型

## Vetting Protocol

### Step 1: Source Check
- [ ] Where did this skill come from?
- [ ] Is the author known/reputable?

### Step 2: Code Review (MANDATORY)
?? REJECT IMMEDIATELY IF YOU SEE:
? curl/wget to unknown URLs
? Sends data to external servers
? Uses eval() or exec() with external input
...

### Step 3: Permission Scope
### Step 4: Risk Classification

它定義了一套完整的安全審查流程,AI 按步驟執(zhí)行即可。

純提示詞 Skill 的開發(fā)要點:

  • description 要盡可能詳盡地列舉觸發(fā)場景
  • 正文用清晰的結(jié)構(gòu)化格式(標題、列表、表格)
  • 提供輸出模板,讓 AI 的回復格式一致
  • 設(shè)定明確的行為邊界和規(guī)則

類型 2:單腳本 Skill(Python)

通過 Python 腳本調(diào)用外部 API,是最常見的 Skill 類型。

代表案例:12306-query(火車票查詢)

核心腳本 scripts/query_tickets.py 的設(shè)計模式:

#!/usr/bin/env python3
"""12306 火車票余票查詢腳本"""
# 1. 常量定義 — API 地址和緩存數(shù)據(jù)
TICKET_QUERY_URL = "https://kyfw.12306.cn/otn/leftTicket/query"
COMMON_STATIONS = {
    "北京": "BJP",
    "上海": "SHH",
    "廣州": "GZQ",
    # ...
}
# 2. 輔助函數(shù) — 站點編碼查詢
def get_station_code(station_name):
    """先查緩存,再查 API"""
    if station_name in COMMON_STATIONS:
        return COMMON_STATIONS[station_name]
    # 從 12306 官方 JS 文件解析...
# 3. 核心函數(shù) — 調(diào)用 API 查詢
def query_tickets(from_station, to_station, date):
    from_code = get_station_code(from_station)
    to_code = get_station_code(to_station)
    session = requests.Session()
    params = {
        "leftTicketDTO.train_date": date,
        "leftTicketDTO.from_station": from_code,
        "leftTicketDTO.to_station": to_code,
        "purpose_codes": "ADULT",
    }
    response = session.get(TICKET_QUERY_URL, params=params, headers=headers, timeout=10)
    # 解析返回數(shù)據(jù)...
# 4. 格式化輸出 — 表格形式,AI 友好
def format_tickets(tickets):
    print("{:<8} {:<10} {:<10} {:<8} ...".format(
        "Train", "Depart", "Arrive", "Duration", ...))
    for t in tickets:
        print(...)
# 5. 命令行入口
def main():
    if len(sys.argv) < 4:
        print("用法:python query_tickets.py <出發(fā)站> <到達站> <日期>")
        sys.exit(1)
    # ...
if __name__ == "__main__":
    main()

對應的 SKILL.md 中這樣引導 AI 調(diào)用腳本:

## 快速開始

使用腳本查詢余票:
?```bash
python scripts/query_tickets.py <出發(fā)站> <到達站> <日期>
?```

日期格式:YYYY-MM-DD(如 2026-04-01)

單腳本 Skill 的設(shè)計四原則:

原則做法原因
輸出結(jié)構(gòu)化表格/Markdown/JSON 格式AI 能直接解析結(jié)構(gòu)化結(jié)果
參數(shù)校驗優(yōu)先缺參數(shù)時 sys.exit(1)讓 OpenClaw 捕獲錯誤并提示用戶
結(jié)果截斷限制輸出長度防止過長輸出撐爆上下文窗口
使用 {baseDir}腳本路徑用變量引用運行時自動替換為實際路徑

類型 3:單腳本 Skill(Shell)

代表案例:tavily-search(Tavily 搜索)

Shell 腳本適合調(diào)用 REST API 的場景,search.sh 的核心結(jié)構(gòu):

#!/bin/bash

# 1. 環(huán)境變量校驗 — 最重要的第一步
if [ -z "$TAVILY_API_KEY" ]; then
    echo "ERROR: TAVILY_API_KEY environment variable is not set" >&2
    exit 1
fi

# 2. 依賴檢查
if ! command -v curl &> /dev/null; then
    echo '{"error":"curl is not installed"}'
    exit 1
fi
if ! command -v jq &> /dev/null; then
    echo '{"error":"jq is not installed"}'
    exit 1
fi

# 3. 核心搜索函數(shù) — 帶重試機制
perform_search() {
    local query="$1"
    local max_results="${2:-5}"
    
    local response=$(curl -s -X POST "$TAVILY_ENDPOINT" \
        -H "Content-Type: application/json" \
        -d "{
            \"api_key\": \"$TAVILY_API_KEY\",
            \"query\": \"$query\",
            \"max_results\": $max_results
        }")
    
    # 輸出 JSON 格式結(jié)果
    echo "$body" | jq '{query: .query, results: .results, quota_info: ...}'
}

# 4. 子命令路由
case "$1" in
    --usage)        show_usage ;;
    --status)       show_status ;;
    --toggle-paid-mode) toggle_paid_mode ;;
    *)              perform_search "$1" "$2" "$3" ;;
esac

這個 Skill 的亮點是配額管理:每次搜索后自動查詢剩余配額,避免超額使用。

類型 4:外部 CLI 工具封裝 Skill

代表案例:agent-browser(瀏覽器自動化)

這類 Skill 不自帶腳本,而是封裝已有的 CLI 工具。SKILL.md 的核心是命令手冊

## Core Workflow
?```bash
# 1. Navigate and snapshot
agent-browser open https://example.com
agent-browser snapshot -i --json

# 2. Parse refs from JSON, then interact
agent-browser click @e2
agent-browser fill @e3 "text"

# 3. Re-snapshot after page changes
agent-browser snapshot -i --json
?```

## Key Commands
### Navigation
?```bash
agent-browser open <url>
agent-browser back | forward | reload | close
?```

### Interactions (Ref-based)
?```bash
agent-browser click @e2
agent-browser fill @e3 "text"
agent-browser hover @e4
?```

封裝型 Skill 的寫法要點:

  • 提供完整的命令參考,讓 AI 知道有哪些命令可用
  • 給出典型工作流(Workflow),而不只是命令列表
  • 說明何時用這個工具、何時用其他替代方案
  • 聲明安裝方式,讓用戶知道如何獲取外部工具

類型 5:多腳本 + 參考文檔 Skill

代表案例:firecrawl(網(wǎng)頁抓?。?/strong>

這是最完整的 Skill 結(jié)構(gòu):

firecrawl/
├── SKILL.md              # 簡潔的入口文檔
├── scripts/
│   ├── search.py         # 搜索腳本
│   ├── scrape.py         # 單頁抓取腳本
│   └── crawl.py          # 全站爬取腳本
└── references/
    └── api.md            # 詳細 API 文檔(按需加載)

SKILL.md 保持簡潔,只提供快速入口:

## Quick Start

### Search the web
?```bash
firecrawl_search "your search query" --limit 10
?```

### Scrape a single page
?```bash
firecrawl_scrape "https://example.com"
?```

## API Reference
See [references/api.md](references/api.md) for detailed API documentation.

詳細的 API 文檔放在 references/api.md 中,只在需要時加載。這利用了 OpenClaw 的三級加載機制

層級內(nèi)容加載時機建議大小
第 1 級name + description始終在上下文中~100 詞
第 2 級SKILL.md 正文技能被觸發(fā)時< 500 行
第 3 級references/ 中的文件正文指示讀取時不限

三個腳本共享相同的設(shè)計模式:

# 所有腳本的統(tǒng)一模式
def main_function(params):
    # 1. 讀取 API Key
    api_key = os.environ.get("FIRECRAWL_API_KEY")
    if not api_key:
        print("Error: FIRECRAWL_API_KEY not set", file=sys.stderr)
        sys.exit(1)
    # 2. 構(gòu)建請求
    data = json.dumps({"url": url, "formats": ["markdown"]}).encode()
    req = urllib.request.Request(url, data=data, headers={...})
    # 3. 發(fā)送請求 + 錯誤處理
    try:
        with urllib.request.urlopen(req, timeout=30) as resp:
            result = json.loads(resp.read().decode())
            return result
    except HTTPError as e:
        print(f"Error: {e.code}", file=sys.stderr)
        sys.exit(1)
# 4. argparse 命令行接口
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("url", help="URL to scrape")
    parser.add_argument("--json", action="store_true")
    args = parser.parse_args()
    # ...

注意:firecrawl 的腳本只用了標準庫 urllib.request,沒有引入 requests 等第三方依賴,這降低了安裝門檻。

五、_meta.json 與 .clawhub/ 詳解

_meta.json — ClawHub 發(fā)布元數(shù)據(jù)

當你通過 ClawHub 發(fā)布 Skill 后,會自動生成 _meta.json

{
  "ownerId": "kn78ns1svg36jybcqfkxhtvcp182kf18",  // 作者 ID
  "slug": "tavily-search-skill",                    // URL 標識符
  "version": "1.0.4",                               // 當前版本
  "publishedAt": 1773128020068                       // 發(fā)布時間戳
}

.clawhub/origin.json — 安裝來源信息

通過 clawhub install 安裝的 Skill 會有這個文件:

{
  "version": 1,
  "registry": "https://clawhub.ai",          // 注冊中心地址
  "slug": "tavily-search-skill",             // Skill 標識
  "installedVersion": "1.0.4",               // 安裝的版本
  "installedAt": 1774932128743               // 安裝時間戳
}

六、從零開發(fā)一個 Skill — 完整流程

假設(shè)我們要開發(fā)一個"GitHub 倉庫信息查詢"Skill:

Step 1:創(chuàng)建目錄

mkdir -p ~/.openclaw/workspace/skills/github-repo-info

Step 2:編寫 SKILL.md

---
name: github-repo-info
description: 查詢 GitHub 倉庫信息,包括 star 數(shù)、fork 數(shù)、最近更新時間、主要語言等。
  當用戶詢問某個 GitHub 倉庫的信息、統(tǒng)計數(shù)據(jù)或狀態(tài)時使用此技能。
metadata:
  openclaw:
    requires:
      bins:
        - curl
---
# GitHub 倉庫信息查詢
查詢?nèi)我?GitHub 公開倉庫的基本信息。
## 使用方式
?```bash
bash {baseDir}/scripts/query.sh <owner> <repo>
?```
示例:
?```bash
bash {baseDir}/scripts/query.sh facebook react
bash {baseDir}/scripts/query.sh microsoft vscode
?```
## 輸出內(nèi)容
- 倉庫名稱和描述
- Star / Fork / Issue 數(shù)量
- 主要編程語言
- 最近更新時間
- 開源協(xié)議
## 注意事項
- 僅支持公開倉庫
- GitHub API 未認證時限制 60 次/小時
- 如需更高頻率,可設(shè)置 GITHUB_TOKEN 環(huán)境變量

Step 3:編寫腳本

#!/bin/bash
# scripts/query.sh — GitHub 倉庫信息查詢

if [ -z "$1" ] || [ -z "$2" ]; then
    echo "用法: query.sh <owner> <repo>"
    echo "示例: query.sh facebook react"
    exit 1
fi

OWNER="$1"
REPO="$2"
AUTH_HEADER=""

if [ -n "$GITHUB_TOKEN" ]; then
    AUTH_HEADER="-H \"Authorization: token $GITHUB_TOKEN\""
fi

RESPONSE=$(curl -s "https://api.github.com/repos/$OWNER/$REPO" $AUTH_HEADER)

if echo "$RESPONSE" | jq -e '.message' > /dev/null 2>&1; then
    echo "Error: $(echo $RESPONSE | jq -r '.message')"
    exit 1
fi

# 輸出結(jié)構(gòu)化結(jié)果
echo "$RESPONSE" | jq '{
  name: .full_name,
  description: .description,
  stars: .stargazers_count,
  forks: .forks_count,
  open_issues: .open_issues_count,
  language: .language,
  license: .license.name,
  updated_at: .updated_at,
  homepage: .homepage
}'

Step 4:本地測試

# 檢查 Skill 狀態(tài)
openclaw skills check
openclaw skills info github-repo-info

# 在 OpenClaw 對話中測試
# 輸入:"幫我查一下 facebook/react 這個倉庫的信息"
# AI 應該自動觸發(fā) github-repo-info Skill

Step 5:發(fā)布到 ClawHub

  1. 訪問 clawhub.ai,用 GitHub 賬號登錄
  2. 點擊 "Publish",填寫 Slug、Display Name、Version
  3. 上傳包含 SKILL.md 的文件夾
  4. 系統(tǒng)自動校驗格式
  5. 確認 MIT-0 許可證,點擊發(fā)布

七、開發(fā)最佳實踐總結(jié)

description 寫作技巧

從 7 個案例中提煉的 description 寫作模式:

[做什么] + [使用什么技術(shù)/API] + [什么時候用/觸發(fā)條件]

好的例子:

  • ? "中國鐵路 12306 火車票余票查詢...當用戶需要查詢火車票信息時使用此技能"
  • ? "Web search and scraping via Firecrawl API. Use when you need to search the web..."
  • ? "Security-first skill vetting for AI agents. Use before installing any skill..."

腳本設(shè)計模式

從 7 個案例中總結(jié)的通用腳本模板:

#!/usr/bin/env python3
"""腳本描述"""
import sys, json, os
# 1. 環(huán)境變量/參數(shù)校驗(失敗時 exit(1))
api_key = os.environ.get("MY_API_KEY")
if not api_key:
    print("Error: MY_API_KEY not set", file=sys.stderr)
    sys.exit(1)
# 2. 核心邏輯(API 調(diào)用 + 數(shù)據(jù)處理)
def do_work(params):
    try:
        response = requests.get(API_URL, params=params, timeout=10)
        return response.json()
    except Exception as e:
        print(f"Error: {e}", file=sys.stderr)
        sys.exit(1)
# 3. 格式化輸出(Markdown/JSON/表格)
def format_output(data):
    print(json.dumps(data, indent=2, ensure_ascii=False))
# 4. CLI 入口(argparse 或 sys.argv)
if __name__ == "__main__":
    # ...

安全檢查清單

參考 skill-vetter 的審查標準,你的 Skill 應該:

  • ? 不要向未知 URL 發(fā)送數(shù)據(jù)
  • ? 不要硬編碼 API Key 或密碼
  • ? 不要使用 eval() / exec() 處理外部輸入
  • ? 不要訪問 ~/.ssh、~/.aws 等敏感目錄
  • ? 使用環(huán)境變量存儲敏感信息
  • ? 最小化權(quán)限范圍
  • ? 所有網(wǎng)絡(luò)請求設(shè)置超時
  • ? 完善的錯誤處理

開發(fā)檢查清單

[ ] SKILL.md frontmatter 包含 name 和 description
[ ] description 清晰描述觸發(fā)條件和能力
[ ] 環(huán)境變量依賴聲明在 metadata.requires.env
[ ] 系統(tǒng)命令依賴聲明在 metadata.requires.bins
[ ] 腳本輸出為結(jié)構(gòu)化格式(Markdown/JSON/表格)
[ ] 敏感信息使用環(huán)境變量,不硬編碼
[ ] 錯誤處理完善(缺參數(shù) exit(1),API 失敗有清晰提示)
[ ] 本地測試通過
[ ] 發(fā)布前文件夾只包含 SKILL.md 和純文本文件

以上就是OpenClaw(龍蝦)Skills從零到發(fā)布的實戰(zhàn)指南的詳細內(nèi)容,更多關(guān)于OpenClaw Skills開發(fā)指南的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

德江县| 荆州市| 池州市| 宜都市| 金乡县| 临桂县| 福建省| 襄樊市| 靖宇县| 钟山县| 呼玛县| 浠水县| 大兴区| 乃东县| 凉城县| 望江县| 武汉市| 曲麻莱县| 青神县| 阳原县| 海南省| 宁远县| 栾川县| 浮山县| 正蓝旗| 大化| 云阳县| 五莲县| 牙克石市| 定西市| 文安县| 五指山市| 琼海市| 色达县| 江口县| 盐津县| 玉田县| 永修县| 合水县| 城固县| 德惠市|