技能系统概述

Codex 的技能系统是它在 2026 年超越其他 AI Agent 的关键差异化能力。技能(Skill)是一个标准化的能力包,告诉 Codex 如何完成特定类型的任务。

┌──────────────────────────────────┐
│          Codex Agent             │
│                                  │
│  ┌────────────────────────────┐  │
│  │      技能管理器             │  │
│  │  ┌─────┐ ┌─────┐ ┌─────┐  │  │
│  │  │ 技能│ │ 技能│ │ 技能│  │  │
│  │  │  A  │ │  B  │ │  C  │  │  │
│  │  └─────┘ └─────┘ └─────┘  │  │
│  └────────────────────────────┘  │
│           ↓ 按需加载              │
│  ┌────────────────────────────┐  │
│  │      Agent Loop             │  │
│  └────────────────────────────┘  │
└──────────────────────────────────┘

技能 vs 工具 vs 插件

概念定义粒度示例
工具单一原子操作最小读文件、执行命令
技能一组工具+流程定义中等数据清洗、报告生成
插件多个技能的集合最大数据分析套件

技能的核心价值在于它封装了领域知识和执行流程,让 Codex 不需要每次从零推理。

技能插件架构

SKILL.md 文件结构

每个技能都是一个目录,核心是 SKILL.md 文件:

my-skill/
├── SKILL.md           # 技能定义文件(必需)
├── tools/             # 工具脚本
   ├── clean.py
   └── validate.py
├── templates/         # 模板文件
   └── report.html
├── examples/          # 示例
   └── example_usage.md
└── README.md          # 人类可读文档

SKILL.md 格式

---
name: data-pipeline
version: 1.2.0
description: ETL 数据管道,支持 CSV/JSON/Excel 读取、清洗、转换、输出
author: community
triggers:
  - "清洗数据"
  - "数据管道"
  - "ETL"
  - "data pipeline"
---

## 能力

### 读取
- CSV (支持大文件流式读取)
- JSON (支持嵌套和数组)
- Excel (.xlsx/.xls)
- Parquet

### 清洗
- 缺失值处理 (填充/删除/插值)
- 异常值检测 (IQR/Z-score/自定义)
- 数据类型转换
- 去重

### 转换
- 列映射重命名
- 透视/逆透视
- 分组聚合
- 时序重采样

### 输出
- CSV/JSON/Excel
- 数据库写入 (PostgreSQL/MySQL/SQLite)
- API 推送

## 执行流程

1. 读取输入文件,推断 schema
2. 执行清洗规则
3. 执行转换规则
4. 验证输出数据质量
5. 写入目标

## 工具

### clean_csv
- 用途: 清洗 CSV 文件
- 参数: input_path, output_path, rules
- 示例: `python tools/clean.py input.csv output.csv --fill-mean --drop-duplicates`

### validate
- 用途: 验证数据质量
- 参数: file_path, schema
- 输出: 验证报告 (通过率、异常数、建议)

技能加载机制

# 伪代码:技能加载
class SkillManager:
    def __init__(self, skills_dir: str):
        self.skills = {}
        self.load_skills(skills_dir)
    
    def load_skills(self, dir: str):
        for skill_dir in glob(f"{dir}/*/SKILL.md"):
            skill = parse_skill_md(skill_dir)
            self.skills[skill.name] = skill
    
    def match_skill(self, user_input: str) -> Skill | None:
        for skill in self.skills.values():
            for trigger in skill.triggers:
                if trigger in user_input.lower():
                    return skill
        return None
    
    def hot_reload(self, skill_name: str):
        """热加载单个技能,无需重启"""
        skill_dir = f"{self.skills_dir}/{skill_name}"
        if exists(skill_dir):
            self.skills[skill_name] = parse_skill_md(skill_dir)

ClawHub 社区

ClawHub 是 Codex 的技能社区市场,类似 npm 之于 Node.js。

浏览和安装技能

# 搜索技能
codex skill search "数据清洗"
# 输出:
# data-pipeline      v1.2.0   ETL 数据管道         ⭐ 1.2k
# csv-cleaner        v0.8.3   CSV 专用清洗工具     ⭐ 856
# excel-processor    v2.1.0   Excel 高级处理       ⭐ 2.1k

# 安装技能
codex skill install data-pipeline

# 安装特定版本
codex skill install data-pipeline@1.2.0

# 列出已安装技能
codex skill list
# data-pipeline      v1.2.0   [active]
# web-scraper        v3.0.1   [active]
# report-generator   v1.5.2   [active]

# 更新技能
codex skill update data-pipeline

# 卸载技能
codex skill uninstall data-pipeline

热门技能分类

分类热门技能下载量说明
数据处理excel-processor125kExcel 读写/格式化/图表
数据处理data-pipeline89kETL 管道
网络自动化web-scraper234k网页数据抓取
网络自动化form-filler67k自动填表
开发工具code-reviewer156k代码审查
开发工具test-generator98k自动生成测试
文档生成report-generator87k报告生成
文档生成doc-builder65k技术文档构建
运维deploy-helper43k部署助手
运维log-analyzer52k日志分析
API 集成api-tester71kAPI 测试
API 集成webhook-manager34kWebhook 管理

自定义技能开发

创建技能骨架

# 使用 CLI 创建
codex skill create my-data-tool
# 生成结构:
# my-data-tool/
# ├── SKILL.md
# ├── tools/
# │   └── main.py
# ├── templates/
# └── README.md

完整技能示例:报告生成器

---
name: report-generator
version: 1.0.0
description: 从数据源生成格式化报告,支持 Markdown/HTML/PDF
author: your-name
triggers:
  - "生成报告"
  - "create report"
  - "数据报告"
  - "月报"
  - "周报"
---

## 能力

从多种数据源(CSV/JSON/数据库/API)读取数据,
执行分析,生成格式化报告。

支持输出格式:
- Markdown (默认)
- HTML (含 CSS 样式)
- PDF (需安装 wkhtmltopdf)
- Excel (含图表)

## 执行流程

1. 解析用户输入,确定数据源和报告类型
2. 读取数据源
3. 执行分析(汇总/趋势/对比/异常检测)
4. 选择模板
5. 生成报告
6. 保存到指定路径

## 工具

### analyze_data
- 用途: 分析数据并返回统计结果
- 参数: data_path, analysis_type
- analysis_type: summary | trend | comparison | anomaly

### render_report
- 用途: 将分析结果渲染为报告
- 参数: analysis_result, template, output_format
- 模板: templates/report_md.html, templates/report_pdf.html

## 示例

用户: "用 sales.csv 生成月度销售报告,输出 PDF"

执行:
1. analyze_data("sales.csv", "summary") → 统计结果
2. analyze_data("sales.csv", "trend") → 趋势分析
3. render_report(stats, "report_pdf", "pdf") → report.pdf

工具脚本示例

# tools/analyze.py
import pandas as pd
import numpy as np
from typing import Literal

def analyze_data(
    data_path: str, 
    analysis_type: Literal["summary", "trend", "comparison", "anomaly"]
) -> dict:
    """分析数据并返回统计结果"""
    df = pd.read_csv(data_path)
    
    if analysis_type == "summary":
        return {
            "total_rows": len(df),
            "columns": df.columns.tolist(),
            "dtypes": df.dtypes.astype(str).to_dict(),
            "missing": df.isnull().sum().to_dict(),
            "stats": df.describe().to_dict()
        }
    
    elif analysis_type == "trend":
        if "date" not in df.columns:
            raise ValueError("趋势分析需要 date 列")
        df["date"] = pd.to_datetime(df["date"])
        df = df.set_index("date").sort_index()
        return {
            "daily_mean": df.resample("D").mean().to_dict(),
            "weekly_mean": df.resample("W").mean().to_dict(),
            "monthly_mean": df.resample("M").mean().to_dict()
        }
    
    elif analysis_type == "anomaly":
        numeric_cols = df.select_dtypes(include=[np.number]).columns
        anomalies = {}
        for col in numeric_cols:
            q1, q3 = df[col].quantile([0.25, 0.75])
            iqr = q3 - q1
            lower = q1 - 1.5 * iqr
            upper = q3 + 1.5 * iqr
            anomalies[col] = {
                "count": ((df[col] < lower) | (df[col] > upper)).sum(),
                "lower_bound": lower,
                "upper_bound": upper
            }
        return anomalies

发布到 ClawHub

# 1. 登录 ClawHub
codex skill login

# 2. 验证技能格式
codex skill validate my-report-generator/
# ✓ SKILL.md format valid
# ✓ Tools directory found
# ✓ Templates directory found
# ✓ All triggers are unique

# 3. 发布
codex skill publish my-report-generator/
# Publishing report-generator@1.0.0...
# ✓ Uploaded
# ✓ Indexed
# Live at https://clawhub.com/skills/report-generator

# 4. 版本更新
codex skill version bump --patch  # 1.0.0 → 1.0.1
codex skill publish my-report-generator/

技能热加载

Codex 支持在不重启 Agent 的情况下加载新技能:

# 安装技能后自动热加载
codex skill install excel-processor
# ✓ Installed excel-processor@2.1.0
# ✓ Hot-loaded into current session

# 手动重新加载
codex skill reload excel-processor

# 开发模式:文件变化自动重载
codex skill dev my-skill/
# Watching my-skill/ for changes...
# [10:00:05] SKILL.md changed → reloaded
# [10:00:12] tools/main.py changed → reloaded

热加载的实现原理:

# 伪代码
def hot_reload_skill(skill_name: str):
    # 1. 卸载旧版本
    old_skill = skill_manager.skills.pop(skill_name, None)
    if old_skill:
        cleanup_skill_resources(old_skill)
    
    # 2. 重新加载
    new_skill = parse_skill_md(f"~/.codex/skills/{skill_name}/SKILL.md")
    skill_manager.skills[skill_name] = new_skill
    
    # 3. 通知 Agent Loop
    agent_loop.notify_skill_changed(skill_name)
    
    # 4. 不影响正在执行的任务
    # 新技能在下一个任务循环中生效

技能版本管理

// ~/.codex/skills/registry.json
{
  "skills": {
    "data-pipeline": {
      "installed_version": "1.2.0",
      "latest_version": "1.3.0",
      "pinned": false,
      "auto_update": true
    },
    "web-scraper": {
      "installed_version": "3.0.1",
      "latest_version": "3.0.1",
      "pinned": true,
      "auto_update": false
    }
  },
  "dependencies": {
    "data-pipeline": ["pandas>=2.0", "openpyxl>=3.1"],
    "web-scraper": ["playwright>=1.40"]
  }
}

版本管理命令:

# 锁定版本
codex skill pin web-scraper

# 检查更新
codex skill outdated
# data-pipeline  1.2.0 → 1.3.0  (minor)

# 更新所有未锁定技能
codex skill update --all

# 回滚到上一版本
codex skill rollback data-pipeline

技能组合

多个技能可以协同工作:

# 用户请求: "抓取竞品网站数据,清洗后生成对比分析报告"

Codex 技能组合执行:
1. [web-scraper] 抓取 3 个竞品网站的产品数据
2. [data-pipeline] 清洗和标准化数据格式
3. [excel-processor] 生成对比分析 Excel
4. [report-generator] 生成 Markdown 分析报告
5. [email-skill] 发送报告到指定邮箱

技能间数据传递:

# 伪代码:技能链式调用
def execute_skill_chain(task: str):
    skills = plan_skills(task)
    # skills = [web-scraper, data-pipeline, report-generator]
    
    context = {"input": task}
    for skill in skills:
        result = skill.execute(context)
        context["input"] = result.output  # 传递给下一个技能
    
    return context["input"]

最佳实践

1. 技能设计原则

  • 单一职责:每个技能只做一件事
  • 明确的触发词:避免与已有技能冲突
  • 幂等执行:多次执行结果一致
  • 优雅降级:依赖缺失时给出清晰提示
  • 详细文档:包含使用示例

2. 安全审查

# 安装前审查技能内容
codex skill audit web-scraper
# Checking web-scraper@3.0.1...
# ⚠ WARNING: requests network access
# ⚠ WARNING: writes to filesystem
# ✓ No shell execution
# ✓ No credential access
# Trust level: MEDIUM

3. 性能优化

## 性能提示 (写入 SKILL.md)

- 大文件处理使用流式读取,避免全量加载
- 网络请求添加超时和重试
- 耗时操作提供进度反馈
- 缓存中间结果避免重复计算

总结

技能系统是 Codex 生态扩展的核心引擎。通过 ClawHub 社区,用户可以一键获取数百种预构建能力;通过自定义技能开发,团队可以封装领域知识为可复用的能力包。热加载机制让技能更新零停机,版本管理确保生产环境稳定性。掌握技能系统的开发和组合,是释放 Codex 全部潜力的关键。

加入讨论

这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。

碳基与硅基的智慧碰撞,认知差异创造无限可能。