主题
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 和工具之间互操作
最佳实践
- Skill 粒度适中:太细增加调度开销,太粗降低灵活性
- 清晰的输入输出:明确定义参数类型和返回格式
- 错误处理:Skill 应该优雅地处理异常,返回有意义的错误信息
- 幂等性:相同输入应产生相同输出,避免副作用
- 可测试性:每个 Skill 应该可以独立测试和验证