Agent 技能调用 - 赋予 AI 超能力
title: Agent 技能调用 - 赋予 AI 超能力 tags: [agent, 技能]
Agent 技能调用 - 赋予 AI 超能力
深入解析 OpenCLAW Agent 技能系统,了解如何通过技能扩展 Agent 能力边界,实现强大的自动化能力。
什么是技能(Skill)?
技能是赋予 Agent 各种能力的模块化组件。通过技能,Agent 可以:
- 读写文件、操作文件夹
- 控制浏览器、自动化 Web 操作
- 执行代码、运行程序
- 调用外部 API
- 发送消息、邮件
- 操作数据库
- 等等...
┌─────────────────────────────────────────────┐
│ Agent │
│ ┌─────────────────────────────────────────┐│
│ │ 技能系统 ││
│ ├─────────┬─────────┬─────────┬───────────┤│
│ │ 文件操作 │ 浏览器 │ 代码执行 │ 外部API ││
│ └─────────┴─────────┴─────────┴───────────┘│
└─────────────────────────────────────────────┘
技能配置基础
启用内置技能
skills:
# 文件操作技能
- name: file-operations
enabled: true
permissions:
- read
- write
- list
# 浏览器控制技能
- name: browser-control
enabled: true
permissions:
- navigate
- click
- screenshot
# 代码执行技能
- name: code-executor
enabled: true
language: python
timeout: 60
完整技能配置
skills:
- name: file-operations
enabled: true
# 权限设置
permissions:
- read
- write
- delete
allowed_paths:
- ./workspace
- ./data
# 高级选项
max_file_size: 10MB
allowed_extensions:
- .txt
- .md
- .json
- .yaml
内置技能详解
1. 文件操作技能
skills:
- name: file-operations
enabled: true
permissions:
- read # 读取文件
- write # 写入文件
- list # 列出目录
- delete # 删除文件
- copy # 复制文件
- move # 移动文件
allowed_paths:
- ./workspace
- /tmp/data
max_file_size: 50MB
使用示例:
# Agent 可以执行以下操作
# 读取文件
file_content = agent.read_file("./data/config.json")
# 写入文件
agent.write_file("./output/result.md", "# 结果\n\n内容...")
# 列出目录
files = agent.list_directory("./workspace")
# 创建目录
agent.create_directory("./workspace/new_project")
2. 浏览器控制技能
skills:
- name: browser-control
enabled: true
permissions:
- navigate # 导航
- click # 点击
- type # 输入
- screenshot # 截图
- evaluate # 执行 JS
timeout: 30
user_agent: "Mozilla/5.0..."
使用示例:
# 导航到网页
agent.browser.navigate("https://example.com")
# 点击元素
agent.browser.click(".login-button")
# 输入文本
agent.browser.type("#username", "myuser")
agent.browser.type("#password", "mypass", submit=True)
# 截图
agent.browser.screenshot("./screenshots/page.png")
# 提取内容
title = agent.browser.evaluate("document.title")
3. 代码执行技能
skills:
- name: code-executor
enabled: true
language: python
timeout: 60
allowed_packages:
- requests
- beautifulsoup4
- pandas
max_memory: 512MB
sandbox: true
使用示例:
# 执行 Python 代码
result = agent.execute_code("""
import requests
response = requests.get('https://api.github.com')
print(f'Status: {response.status_code}')
""")
# 执行 JavaScript
js_result = agent.execute_js("""
return document.body.innerText.length;
""")
4. HTTP 请求技能
skills:
- name: http-request
enabled: true
permissions:
- GET
- POST
- PUT
- DELETE
allowed_domains:
- api.example.com
- *.github.com
timeout: 30
headers:
User-Agent: OpenCLAW/1.0
5. 消息发送技能
skills:
- name: messaging
enabled: true
channels:
- email
- slack
- discord
- webhook
# Email 配置
email:
smtp_host: smtp.gmail.com
smtp_port: 587
from: agent@example.com
# Slack 配置
slack:
webhook_url: ${SLACK_WEBHOOK}
自定义技能开发
创建自定义技能
from openclaw.skills import BaseSkill
class WeatherSkill(BaseSkill):
"""天气预报技能"""
name = "weather"
description = "查询指定城市的天气信息"
# 定义技能可以调用的工具
tools = ["http_request"]
async def execute(self, city: str, days: int = 1):
"""获取天气信息"""
# 调用 HTTP 请求工具
response = await self.call_tool("http_request", {
"url": f"https://api.weather.com/v3/weather",
"params": {
"city": city,
"days": days,
"key": self.config["api_key"]
}
})
return self.format_weather(response)
def format_weather(self, data):
"""格式化天气信息"""
return f"""
🌤️ {data['city']} {data['date']}
温度: {data['temp']}°C
天气: {data['condition']}
湿度: {data['humidity']}%
"""
注册自定义技能
skills:
# 使用自定义技能
- name: weather
type: custom
path: ./skills/weather.py
config:
api_key: ${WEATHER_API_KEY}
default_days: 3
技能配置
# skills/weather.py
from openclaw import Skill
class WeatherSkill(Skill):
name = "weather"
description = "查询天气"
# 配置项
config_schema = {
"api_key": {"type": "string", "required": True},
"default_days": {"type": "int", "default": 1}
}
async def execute(self, city: str, days: int = None):
days = days or self.config["default_days"]
# 实现逻辑...
技能调用方式
1. Agent 智能调用
配置后,Agent 会根据任务自动判断需要调用的技能:
system_prompt: |
你是一个助手,可以使用各种技能完成任务。
可用技能:
- file-operations: 文件读写
- browser-control: 浏览器控制
- code-executor: 代码执行
- weather: 天气查询
当需要使用某个技能时,直接调用即可。
用户说"帮我查下北京天气",Agent 会自动调用 weather 技能。
2. 显式调用
# 直接调用技能
result = agent.skills.weather.execute(city="北京")
3. 工具式调用
# 在代码中使用工具
result = agent.call_tool("file_operations", {
"action": "read",
"path": "./config.yaml"
})
技能权限管理
权限级别
skills:
- name: file-operations
enabled: true
# 细粒度权限
permissions:
# 允许的操作
allow:
- read
- write
- list
# 禁止的操作
deny:
- delete
# 路径限制
path_allow:
- ./workspace/*
- ./data/*
path_deny:
- ./workspace/secrets/*
- ./data/private/*
安全沙箱
skills:
- name: code-executor
enabled: true
sandbox:
enabled: true
# 资源限制
max_memory: 512MB
max_cpu: 50%
max_execution_time: 60
# 网络限制
network:
enabled: false
allowed_domains:
- api.example.com
# 文件系统限制
filesystem:
read_paths:
- /tmp/sandbox/read
write_paths:
- /tmp/sandbox/write
技能组合使用
工作流示例:爬取数据并分析
# 1. 使用浏览器技能爬取网页
html = agent.browser.navigate("https://example.com/products")
content = agent.browser.evaluate("document.body.innerText")
# 2. 使用代码执行技能解析
products = agent.execute_code(f"""
from bs4 import BeautifulSoup
soup = BeautifulSoup({repr(html)}, 'html.parser')
items = [item.text for item in soup.select('.product')]
print(items)
""")
# 3. 使用文件操作保存结果
agent.write_file("./data/products.json", json.dumps(products))
# 4. 发送通知
agent.send_message("slack", f"爬取完成,共 {len(products)} 个产品")
技能链配置
skills:
# 定义技能链
chains:
- name: data-pipeline
description: 数据采集分析流程
steps:
- skill: browser-control
action: navigate
args:
url: "${url}"
- skill: code-executor
action: parse
args:
format: json
- skill: file-operations
action: save
args:
path: "./data/output.json"
技能市场
安装社区技能
# 搜索技能
openclaw skill search weather
# 安装技能
openclaw skill install weather
# 列出已安装技能
openclaw skill list
# 更新技能
openclaw skill update weather
# 卸载技能
openclaw skill uninstall weather
常用技能推荐
| 技能名称 | 功能 | 安装命令 |
|---|---|---|
| weather | 天气查询 | skill install weather |
| translate | 翻译 | skill install translate |
| image-generation | AI 绘图 | skill install image-generation |
| 邮件发送 | skill install email |
|
| database | 数据库操作 | skill install database |
| scheduler | 定时任务 | skill install scheduler |
技能调试
查看可用技能
# 列出 Agent 的技能
openclaw agent skills my-agent
# 输出示例
# Skills for my-agent:
# - file-operations: enabled (read, write, list)
# - browser-control: enabled (navigate, click, screenshot)
# - code-executor: enabled (python, timeout=60s)
# - weather: enabled
调试技能调用
# 启用技能调试日志
openclaw agent debug my-agent --skills
# 测试技能调用
openclaw agent test-skill my-agent weather --args city=北京
技能调用日志
# 查看技能调用历史
logs = agent.get_skill_logs(
skill_name="weather",
limit=10
)
for log in logs:
print(f"时间: {log.timestamp}")
print(f"参数: {log.args}")
print(f"结果: {log.result}")
print(f"耗时: {log.duration}ms")
最佳实践
1. 最小权限原则
# ❌ 权限过大
skills:
- name: file-operations
enabled: true
permissions: [read, write, delete, execute]
allowed_paths: [/]
# ✅ 最小权限
skills:
- name: file-operations
enabled: true
permissions: [read, write]
allowed_paths:
- ./workspace
- ./data/output
2. 超时设置
skills:
- name: browser-control
timeout: 30
- name: code-executor
timeout: 60
- name: http-request
timeout: 15
3. 错误处理
class WeatherSkill(BaseSkill):
async def execute(self, city: str):
try:
result = await self.call_tool(...)
return result
except TimeoutError:
return "请求超时,请稍后重试"
except Exception as e:
self.logger.error(f"技能执行失败: {e}")
return f"执行出错: {str(e)}"
小结
本文详细介绍了 OpenCLAW Agent 技能系统:
- 技能概念 - 技能是扩展 Agent 能力的模块
- 内置技能 - 文件操作、浏览器、代码执行、HTTP、消息
- 自定义技能 - 开发自己的技能模块
- 权限管理 - 细粒度权限控制和安全沙箱
- 技能组合 - 多个技能协同工作
- 技能市场 - 安装和使用社区技能
- 调试监控 - 查看和管理技能调用
接下来学习定时任务: - 定时任务设置 - 实现自动化运营