跳转到内容

AI Skills ​

概述 ​

AI Skills(技能)是 Agent 可调用的具体能力单元。每个 Skill 封装了一组相关的操作逻辑,使 Agent 能够完成特定类型的任务。良好的 Skill 设计是构建高效 Agent 系统的关键。

Skill 与 Tool 的区别 ​

概念说明示例
Tool(工具)原子的、单一功能的操作搜索网页、执行代码、读写文件
Skill(技能)由多个 Tool 组合而成的复合能力代码审查(读文件 + 分析 + 写评论)

可以理解为:Tool 是动词,Skill 是动词短语。

Skill 设计原则 ​

1. 单一职责 ​

每个 Skill 应该只做一件事,但做到完整。

❌ bad:  "开发技能" — 太宽泛
✅ good: "创建 REST API 端点技能" — 明确且可执行

2. 声明式定义 ​

Skill 应该通过声明式的方式定义,包括:

  • 名称:简洁的标识符
  • 描述:何时应该使用此 Skill
  • 输入:需要的参数及其类型
  • 输出:返回结果的格式
  • 步骤:执行流程

3. 可组合性 ​

Skill 之间应该可以自由组合,形成更复杂的工作流。

Skill 定义示例 ​

注意

下面的 YAML 格式不是行业统一标准,仅用于理解 Skill 的结构要素(名称、描述、输入、输出、步骤)。实际上每个框架的定义格式各不相同——OpenAI/Anthropic/MCP 都用 JSON Schema,LangChain 用 Python 装饰器,CrewAI 用 Python 类。真正的统一标准是 JSON Schema,见下方实现框架一节。

yaml
# 示例:代码审查 Skill(示意格式,非标准)
name: code-review
description: 审查代码变更,发现潜在问题并提供建议
inputs:
  - name: diff
    type: string
    description: 代码变更内容
  - name: language
    type: string
    description: 编程语言
outputs:
  - name: findings
    type: array
    description: 发现的问题列表
  - name: suggestions
    type: array
    description: 改进建议列表
steps:
  - name: parse-diff
    tool: diff-parser
  - name: analyze-code
    tool: code-analyzer
  - name: check-patterns
    tool: pattern-matcher
  - name: generate-report
    tool: report-generator

每个 Skill 的参数各不相同——code-review 需要 diff/language,k8s-manage 需要 action/resource_type/namespace。它们各自定义自己的输入输出,唯一的共同点是都用 JSON Schema 来描述参数结构。

常见 Skill 类型 ​

代码类 Skill ​

Skill说明
代码生成根据需求描述生成代码
代码审查审查代码质量、安全性和最佳实践
代码重构改善代码结构而不改变行为
Bug 修复分析和修复代码缺陷
测试生成为代码自动生成单元测试

知识类 Skill ​

Skill说明
文档搜索在知识库中检索相关信息
网页搜索搜索互联网获取最新信息
数据分析分析结构化数据并生成洞察
报告生成汇总信息并生成结构化报告

操作类 Skill ​

Skill说明
文件操作读取、创建、修改文件
API 调用调用外部 API 获取或提交数据
命令执行运行 Shell 命令
K8s 管理连接 Kubernetes 集群,查询和管理集群资源
部署发布执行部署和发布流程

实战示例:K8s 管理 Skill ​

下面以"连接 Kubernetes 集群"为场景,展示如何将 Python 连接 K8s 的能力封装为 Agent 可调用的 Skill。

Skill 定义 ​

yaml
name: k8s-manage
description: 管理 Kubernetes 集群资源,支持查询、创建、更新和删除操作
inputs:
  - name: action
    type: string
    description: "操作类型:list / get / create / delete / logs"
    enum: [list, get, create, delete, logs]
  - name: resource_type
    type: string
    description: "资源类型:pod / deployment / service / namespace / configmap"
  - name: name
    type: string
    description: 资源名称(get / delete / logs 时必填)
  - name: namespace
    type: string
    description: 命名空间(默认 default)
outputs:
  - name: result
    type: object
    description: 操作结果,包含状态和数据

Function Calling 实现 ​

python
from kubernetes import client, config

# 加载集群配置
config.load_kube_config()

def k8s_manage(action: str, resource_type: str,
               name: str = None, namespace: str = "default") -> dict:
    """管理 K8s 集群资源"""

    if action == "list" and resource_type == "pod":
        v1 = client.CoreV1Api()
        pods = v1.list_namespaced_pod(namespace=namespace)
        return {
            "status": "success",
            "data": [
                {"name": p.metadata.name, "phase": p.status.phase}
                for p in pods.items
            ]
        }

    elif action == "list" and resource_type == "deployment":
        apps_v1 = client.AppsV1Api()
        deploys = apps_v1.list_namespaced_deployment(namespace=namespace)
        return {
            "status": "success",
            "data": [
                {
                    "name": d.metadata.name,
                    "ready": f"{d.status.ready_replicas or 0}/{d.spec.replicas}"
                }
                for d in deploys.items
            ]
        }

    elif action == "logs" and resource_type == "pod":
        v1 = client.CoreV1Api()
        logs = v1.read_namespaced_pod_log(name=name, namespace=namespace)
        return {"status": "success", "data": logs}

    # ... 更多操作

注册为 Agent 工具 ​

python
# 将 Skill 注册为 LLM 可调用的 Tool
tools = [
    {
        "type": "function",
        "function": {
            "name": "k8s_manage",
            "description": "管理 Kubernetes 集群资源,支持查询 Pod、Deployment、Service 等",
            "parameters": {
                "type": "object",
                "properties": {
                    "action": {
                        "type": "string",
                        "enum": ["list", "get", "create", "delete", "logs"],
                        "description": "操作类型"
                    },
                    "resource_type": {
                        "type": "string",
                        "enum": ["pod", "deployment", "service", "namespace"],
                        "description": "资源类型"
                    },
                    "name": {
                        "type": "string",
                        "description": "资源名称"
                    },
                    "namespace": {
                        "type": "string",
                        "description": "命名空间,默认 default"
                    }
                },
                "required": ["action", "resource_type"]
            }
        }
    }
]

效果 ​

用户只需要对 Agent 说:

  • "帮我看看 default 命名空间有哪些 Pod" → Agent 调用 k8s_manage(action="list", resource_type="pod", namespace="default")
  • "查看 nginx-deployment 的状态" → Agent 调用 k8s_manage(action="get", resource_type="deployment", name="nginx-deployment")
  • "看一下 my-pod 的日志" → Agent 调用 k8s_manage(action="logs", resource_type="pod", name="my-pod")

这就是 Skill 的核心价值:把底层实现细节封装起来,让用户用自然语言就能操作 K8s 集群。

Skill 实现框架 ​

Function Calling(函数调用) ​

LLM 原生支持的 Skill 调用机制:

python
# OpenAI Function Calling 示例
tools = [
    {
        "type": "function",
        "function": {
            "name": "search_knowledge_base",
            "description": "搜索知识库获取相关信息",
            "parameters": {
                "type": "object",
                "properties": {
                    "query": {
                        "type": "string",
                        "description": "搜索关键词"
                    }
                },
                "required": ["query"]
            }
        }
    }
]

MCP(Model Context Protocol) ​

Anthropic 推出的标准化协议,用于 LLM 与外部工具的交互:

  • 统一接口:定义了 LLM 调用工具的标准协议
  • 服务发现:支持动态发现和注册可用的工具
  • 跨平台:不同 LLM 和工具之间互操作

最佳实践 ​

  1. Skill 粒度适中:太细增加调度开销,太粗降低灵活性
  2. 清晰的输入输出:明确定义参数类型和返回格式
  3. 错误处理:Skill 应该优雅地处理异常,返回有意义的错误信息
  4. 幂等性:相同输入应产生相同输出,避免副作用
  5. 可测试性:每个 Skill 应该可以独立测试和验证

参考资料 ​

基于 MIT 许可发布