阅山

  • WIN
    • CSharp
    • JAVA
    • OAM
    • DirectX
    • Emgucv
  • UNIX
    • FFmpeg
    • QT
    • Python
    • Opencv
    • Openwrt
    • Twisted
    • Design Patterns
    • Mysql
    • Mycat
    • MariaDB
    • Make
    • OAM
    • Supervisor
    • Nginx
    • KVM
    • Docker
    • OpenStack
  • WEB
    • ASP
    • Node.js
    • PHP
    • Directadmin
    • Openssl
    • Regex
  • APP
    • Android
  • AI
    • Algorithm
    • Deep Learning
    • Machine Learning
  • IOT
    • Device
    • MSP430
  • DIY
    • Algorithm
    • Design Patterns
    • MATH
    • X98 AIR 3G
    • Tucao
    • fun
  • LIFE
    • 美食
    • 关于我
  • LINKS
  • ME
Claves
阅山笑看风云起,意气扬帆向日辉
  1. 首页
  2. AI
  3. 正文

docker compose安装openclaw

2026-03-05

VoltAgent/awesome-openclaw-skills: The awesome collection of OpenClaw skills. 5,400+ skills filtered and categorized from the official OpenClaw Skills Registry.🦞

openclaw/skills: All versions of all skills that are on clawhub.com archived

https://github.com/openclaw/skills

使用一下配置部署后,可以对话,可以执行docker内的命令。

yml:

  claves-openclaw:
    container_name: claves-openclaw
    hostname: claves-openclaw
    image: ghcr.io/openclaw/openclaw:2026.3.1
    restart: always
    #privileged: true
    user: root
    extra_hosts:
      - "api.chat.claves.com.cn:192.168.1.1"
    init: true
    environment:
      HTTP_PROXY: http://192.168.1.3:1080
      HTTPS_PROXY: http://192.168.1.3:1080
      #HOME: /home/node
      #OPENCLAW_GATEWAY_MODE: local #决定设备如何处理网络流量的核心配置项。
      #OPENCLAW_GATEWAY_BIND: "lan"
      #OPENCLAW_GATEWAY_PORT: 18789
    volumes:
      - ./volumes/claves-openclaw/openclaw-data:/root/.openclaw:rw
    command:
      - node
      - dist/index.js
      - gateway
      - --bind
      - lan
      - --port
      - "18789"
      - --allow-unconfigured
    ports:
      - "18789:18789"
      - "18790:18790"
    deploy:
      resources:
        limits:
          memory: 4096M
    networks:
         extnetwork:
            ipv4_address: 172.20.0.239

openclaw.json

{
  "meta": {
    "lastTouchedVersion": "2026.3.1-beta.1",
    "lastTouchedAt": "2026-03-05T02:19:39.329Z"
  },
  "models": {
    "mode": "merge",
    "providers": {
      "blink-local-model": {
        "baseUrl": "http://api.chat.cn/v1",
        "apiKey": "sk-xxxxxxxxxxxxx",
        "api": "openai-completions",
        "models": [
          {
            "id": "gpt-4o",
            "name": "gpt-4o",
            "reasoning": false,
            "input": [
              "text"
            ],
            "cost": {
              "input": 0,
              "output": 0,
              "cacheRead": 0,
              "cacheWrite": 0
            },
            "contextWindow": 128000,
            "maxTokens": 10960
          }
        ]
      }
    }
  },
  "agents": {
    "defaults": {
      "model": {
        "primary": "blink-local-model/gpt-4o"
      },
      "models": {
        "blink-local-model/gpt-4o": {}
      },
      "workspace": "/root/.openclaw/workspace",
      "compaction": {
        "mode": "safeguard"
      },
      "maxConcurrent": 4,
      "subagents": {
        "maxConcurrent": 8
      },
      "sandbox":{
        "mode":"off"
      }
    }
  },
  "commands": {
    "native": "auto",
    "nativeSkills": "auto",
    "restart": true,
    "ownerDisplay": "raw"
  },
  "gateway": {
    "port": 18789,
    "mode": "local",
    "bind": "lan",
    "controlUi": {
      "enabled": true,
      "dangerouslyAllowHostHeaderOriginFallback": true,
      "allowInsecureAuth": true,
      "dangerouslyDisableDeviceAuth": true
    },
    "auth": {
      "mode": "token",
      "token": "xxxxxxxxxxxxxxxxxxxx"
    },
    "http": {
      "endpoints": {
        "chatCompletions": {
          "enabled": true
        }
      }
    }
  },
  "plugins": {
    "entries": {},
    "installs": {},
    "load": {
      "paths": []
    }
  },
  "tools":{
    "exec":{
      "host":"gateway",
      "security":"full"
    },
    "elevated":{
      "enabled":true
    }
  }
}

Clawhub使用

安装

# 安装
npm -g install clawhub
# 登录,token从clawhub官网登录个人账号后获取
clawhub login --token clh_Wn77MF7eWjdtcxxxxxxxxxxxxxxxxxxx
#安装插件
clawhub install tavily-search

常见问题

完全理解你的疑问,我们把 OpenClaw 的 Tool / Skill / Python 执行能力 理清楚——很多人第一眼看到 Skill 能写 Python,就以为可以完全替代 Tool,其实并不是完全一样。


一、Tool 与 Skill 的本质区别

特性ToolSkill
抽象级别底层能力任务能力(可组合多个 Tool)
本质封装 API / 函数调度逻辑 + 可调用 Tool 或 Python
调用方式Skill 调用Agent 调用 Skill
可扩展性单一功能可组合多个 Tool + 逻辑
目标提供可复用能力完成用户目标任务

一句话总结:Tool 是“原子操作”,Skill 是“使用这些原子操作完成任务的能力”。


二、Skill 中可以直接写 Python,但有局限

在 OpenClaw 的 Skill 里确实可以写 Python:

def run(query):
    return f"你搜索的关键词是: {query}"

但是:

  1. Python 运行环境有限制
    • Skill 执行 Python 主要用于处理数据、格式化、简单逻辑。
    • 如果 Skill 直接去抓网页、调用外部 API,你需要保证网络权限和依赖环境(requests、bs4 等)可用。
  2. 可复用性和权限控制弱
    • Tool 可以单独注册、被多个 Skill 复用。
    • Skill 写死 Python 逻辑时,只能在这个 Skill 里使用,扩展性差。
  3. 多步任务管理不如 Tool + Skill
    • 如果一个 Skill 只用 Python 实现抓取 + 解析 + 摘要,Agent 调用时没有“可拆解的工具”,难以监控、调试和授权。

三、能否只用一个“百度搜索 Skill”?

✅ 可以,但条件:

  1. Skill 内直接写 Python 做抓取、解析和摘要;
  2. 只在单用户 / 内部实验场景,不考虑安全、扩展、权限;
  3. 不打算再复用“百度搜索能力”给其他 Skill 或 Agent。

缺点:

  • 扩展困难(以后要换搜索源、加入缓存、摘要功能都要改 Skill)
  • Agent 对工具选择没有透明度
  • 企业级权限控制、日志、计费统计不好做

四、推荐做法(最佳实践)

  1. 注册 Tool:封装“百度搜索 HTTP 调用”或“网页抓取函数”
    • Python Skill 调用 Tool 可以保持清晰的调用链
    • Tool 可以被其他 Skill 重用
  2. 创建 Skill:组合 Tool + Python 逻辑
    • Skill 负责完成“搜索 → 抓取 → 摘要”任务
    • 可以给 Agent 调用时提供统一接口
Agent -> Skill: internet_search
          -> Tool: baidu_search
          -> Tool: webpage_fetch
          -> Python: summary_logic

这样:

  • Agent 不需要知道抓取和解析细节
  • Tool 可以单独替换为 Bing/Google/SearXNG
  • Skill 可以增加业务逻辑(过滤、权限、格式化)

五、总结

  • Tool = 原子操作(可复用、可授权、可替换)
  • Skill = 任务能力(组合多个 Tool + Python 逻辑)
  • Python Skill 可以直接实现百度搜索,但最好只做逻辑处理
  • 企业 / 复杂场景推荐:Tool + Skill 分层

如果你愿意,我可以帮你写一个 生产级的“百度搜索 Skill”模板:

  • 用 Python Skill 调用 注册的百度搜索 Tool
  • 自动抓取网页并摘要
  • 返回结构化结果给 Agent
  • 可扩展到多搜索源

在 OpenClaw 的设计里,Tool 和 Skill 是两个不同层级的概念,类似 函数 vs 功能模块。理解这个结构很关键,否则在做 Agent 体系时会混乱。

我从架构层解释它们的 区别、关系,以及是否可以只做一个百度搜索 skill。


一、Tool 与 Skill 的本质区别

层级ToolSkill
抽象级别底层能力能力组合 / 任务能力
类比API / 函数微服务 / 业务模块
功能执行一个操作完成一个任务
是否直接被 LLM 调用通常 由 Skill 调用Agent 调用 Skill
典型数量很多比较少

Tool 示例

{
  "name": "baidu_search",
  "type": "http"
}

作用:

执行百度搜索

Skill 示例

{
  "name": "internet_search",
  "tools": [
    "baidu_search",
    "webpage_fetch",
    "content_extract"
  ]
}

作用:

1 搜索
2 打开网页
3 提取内容
4 返回摘要

二、Agent → Skill → Tool 调用链

OpenClaw 的执行链:

User
  ↓
Agent
  ↓
Skill
  ↓
Tool
  ↓
External API

例子:

用户:DeepSeek 最近有什么新闻

Agent
  ↓
Skill: internet_search
  ↓
Tool: baidu_search
  ↓
百度

三、为什么要有 Skill 层(关键设计)

如果 Agent 直接调用 Tool 会出现几个问题:

1 Agent 不知道如何组合工具

例如搜索信息需要:

search
fetch webpage
extract content
summarize

如果没有 Skill:

Agent 必须自己规划全部步骤。

稳定性很差。


2 Prompt 复杂度爆炸

如果有 50 个 tool:

baidu_search
bing_search
google_search
fetch_page
pdf_parse
db_query
erp_create_order

LLM 很难选。


3 权限控制

Skill 可以作为 权限边界:

skill: internet_search
skill: erp_operation
skill: database_query

不同用户可以启用不同 skill。


四、能不能只做一个百度搜索 Skill?

可以。

如果你只想简单搜索,可以这样:

Tool

{
  "tools": {
    "baidu_search": {
      "type": "http",
      "url": "http://localhost:8090/search"
    }
  }
}

Skill

{
  "name": "baidu_search_skill",
  "tools": [
    "baidu_search"
  ]
}

结构:

Agent
  ↓
baidu_search_skill
  ↓
baidu_search tool

完全可以运行。


五、更合理的搜索 Skill(推荐)

真实 AI 搜索通常需要 3 个 tool:

search
fetch
summarize

架构:

Skill: internet_search
   │
   ├── tool: baidu_search
   ├── tool: webpage_fetch
   └── tool: content_extract

效果:

1 搜索结果
2 打开网页
3 提取正文
4 LLM总结

这就是 Perplexity / Cursor 的搜索模式。


六、很多人误解的一点

在 OpenClaw 里:

Skill ≠ Tool

很多人会写:

skill: baidu_search

其实只是:

tool: baidu_search

LLM会直接调用。

可以,但:

  • 不利于扩展
  • Agent 不好管理

七、企业系统的推荐结构

如果你在做 ERP + LLM Agent(你之前提过),建议:

OpenClaw
   │
   ├── skill: internet_search
   │      ├── baidu_search
   │      └── page_fetch
   │
   ├── skill: knowledge_search
   │      └── vector_db_query
   │
   └── skill: erp_operation
          ├── create_order
          ├── query_inventory
          └── create_purchase

好处:

  • 技能模块清晰
  • Agent规划更稳定
  • 权限可控

八、一句话总结

Tool

单个能力(函数)

Skill

多个 Tool 组合形成的任务能力

调用关系:

Agent → Skill → Tool

在 OpenClaw 里,自定义 Tool 本质上是一个 Agent 可调用的接口封装。OpenClaw 官方设计上是尽量灵活,支持多种协议,但有一些实际限制。下面我帮你梳理清楚。


一、OpenClaw 自定义 Tool 支持的协议

协议类型使用方式备注
HTTP / HTTPS最常用,通过 type: http 注册 Tool支持 GET / POST / PUT / DELETE 等方法,可绑定 query/body 参数,可直接返回 JSON 或文本
WebSocket / SSE通过 type: websocket 注册支持流式数据,Agent 可以接收实时结果;SSE 常用于 LLM 流式返回场景
Local Python / Scripttype: python 或在 Skill 内调用 Python 函数可以直接执行 Python 代码,调用本地库,支持文件操作、抓取、解析等;适合内部逻辑或快速实验
gRPC / HTTP2通过 HTTP/gRPC 网关或自定义适配器OpenClaw 不直接支持 gRPC,需要在中间写一个 HTTP 包装层,Tool 实际上还是 HTTP 调用
数据库 / Vector DB通过 Python Tool 或 HTTP API比如 MySQL / Postgres / ClickHouse / Milvus / Pinecone;Tool 封装查询和结果返回接口
消息队列 / Kafka / RabbitMQ通过 Python 或 HTTP 封装Tool 可以发送/接收消息,实现异步任务,但 Agent 调用是同步封装

二、Tool 类型示例

1️⃣ HTTP Tool

{
  "name": "baidu_search",
  "type": "http",
  "method": "GET",
  "url": "http://localhost:8090/baidu_search",
  "query": {
    "q": "{{query}}"
  }
}

支持 GET / POST / PUT / DELETE,返回 JSON 或文本


2️⃣ Python Tool

{
  "name": "calculate",
  "type": "python",
  "description": "Simple calculation tool",
  "code": "def run(a, b): return a + b"
}

可以访问本地库,也可以调用 requests 做 HTTP 请求。


3️⃣ WebSocket Tool(流式)

{
  "name": "chat_stream",
  "type": "websocket",
  "url": "ws://localhost:9000/stream"
}

适合 LLM 流式对话或长任务反馈


三、注意事项

  1. 安全性
    • Python / Local Tool 可以访问系统文件、网络,生产环境要控制权限
    • HTTP Tool 可以绑定外部 API Key,避免泄露
  2. 返回格式
    • OpenClaw 推荐 JSON 格式返回
    • Python Tool 返回 dict / list / str 都可,但最终 Agent 会序列化为 JSON
  3. 组合能力
    • Tool 单一功能,Skill 可以组合多个 Tool
    • 例如:搜索 Tool + 摘要 Tool + 爬网页 Tool → Skill: internet_search

四、总结

✅ OpenClaw 自定义 Tool 支持:

  1. HTTP/HTTPS(GET/POST/PUT/DELETE)
  2. WebSocket / SSE(流式)
  3. Local Python 函数 / 脚本
  4. 间接支持 gRPC / HTTP2(通过适配层)
  5. 数据库访问(MySQL/Postgres/ClickHouse/Vector DB)
  6. 消息队列(Kafka / RabbitMQ)

本质上 只要你能包装成 HTTP / Python / WebSocket 接口,OpenClaw 就能当 Tool 调用。


完全可以,而且这是 OpenClaw Python Tool 的常用做法。核心逻辑是:Python Tool 本质上就是 在 OpenClaw 的 Python 执行环境里运行一段代码,这段代码可以直接导入和调用本地 Python 文件(模块)里的函数。

我帮你整理清楚规则和示例:


一、支持本地 Python 文件的方式

1️⃣ 直接在 code 字段写 Python 逻辑

{
  "name": "hello_tool",
  "type": "python",
  "code": "def run(name):\n    return f'Hello {name}!'"
}
  • 简单函数适合短逻辑
  • 不能直接管理大型项目,模块化能力差

2️⃣ 调用本地 Python 文件(推荐)

假设你有一个文件结构:

/opt/openclaw-tools/
   ├── mytool.py
   └── utils.py

mytool.py 内容:

# mytool.py
from utils import helper

def run(query):
    return f"Processed: {helper(query)}"

utils.py 内容:

# utils.py
def helper(text):
    return text.upper()

在 OpenClaw Tool 配置里写:

{
  "name": "my_local_tool",
  "type": "python",
  "file": "/opt/openclaw-tools/mytool.py"
}

这里的 file 字段指向本地 Python 文件路径,OpenClaw 会在执行 Tool 时导入这个文件并调用 run() 函数。


3️⃣ 注意事项

  1. 文件路径
    • Docker 部署时要注意 volume 映射,例如:-v ~/openclaw-tools:/opt/openclaw-tools 保证容器内路径 /opt/openclaw-tools 可访问
  2. 依赖库
    • Python Tool 会在 OpenClaw 的 Python 环境里运行
    • 如果本地 Python 文件依赖第三方库,必须先安装:pip install requests beautifulsoup4
  3. 函数规范
    • OpenClaw 默认调用 Python 文件里的 run() 函数
    • 参数可以是任意 JSON 可序列化对象
    • 返回值应为 JSON 可序列化类型(dict / list / str / int / float)
  4. 安全性
    • Python Tool 可以执行任意代码
    • 生产环境要限制路径和权限,避免写入敏感系统文件

4️⃣ Docker 中的示例

docker run -d \
  --name openclaw \
  -v ~/openclaw-tools:/opt/openclaw-tools \
  -e TZ=Asia/Shanghai \
  alpine/openclaw:main

然后 Tool 配置:

{
  "name": "my_local_tool",
  "type": "python",
  "file": "/opt/openclaw-tools/mytool.py"
}

5️⃣ 调用示例

Agent 调用:

Agent -> Tool: my_local_tool
Input: {"query": "hello world"}
Output: {"result": "Processed: HELLO WORLD"}

✅ 结论:

  • Python Tool 完全支持本地 Python 文件
  • 文件路径通过 file 指定,必须保证 OpenClaw 可访问
  • Tool 调用约定:文件里必须有 run() 函数
  • 支持导入本地模块 / 包,实现复杂逻辑和企业级功能

如果你需要,我可以帮你写一个 完整模板,实现:

  • 一个 Python Tool
  • 可调用本地模块
  • 支持百度搜索 + 网页抓取 + 摘要
  • 可直接在 Docker OpenClaw 中运行
标签: 暂无
最后更新:2026-03-06

阅山

知之为知之 不知为不知

点赞
< 上一篇

COPYRIGHT © 2099 登峰造极境. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

蜀ICP备14031139号-5

川公网安备51012202000587号