Estructura de directorios de Skills

Comprender la estructura de directorios y el mecanismo de ejecución de Skill es la base para construir capacidades de AI Agent mantenibles y reutilizables.

Este artículo desglosa desde cero la estructura de directorios de un Skill estándar, la función de cada archivo y el flujo de trabajo completo.


¿Qué es Skill?

Skill es una unidad de capacidad independiente que se utiliza para completar un tipo específico de tarea.

Si comparamos a Agent con un sistema operativo, Skill es como una aplicación; si comparamos a Agent con un gerente de proyectos, Skill es una capacidad profesional que puede ser invocada.

Tipos comunes de Skill

A continuación se presentan algunos escenarios de aplicación típicos de Skill:

TipoDescripciónEscenario aplicable
Análisis de documentos PDFExtraer contenido de PDF y generar resúmenesProcesamiento de documentos, extracción de información
Rastreo webObtención automática de datos webRecopilación de datos, monitoreo de información
Optimización de SQLAnalizar y optimizar consultas SQLAjuste de rendimiento de bases de datos
Estadísticas de datosCálculo de datos y procesamiento estadísticoAnálisis de datos, generación de informes
Reconocimiento de imágenesReconocer el contenido de las imágenesOCR, clasificación de imágenes

Relación entre Skill y Agent

Skill en sí no decide cuándo usarse; quien realmente toma la decisión es Agent.

El flujo de trabajo completo es el siguiente:

Skill 工作流程

Punto clave: Agent no carga el contenido completo de todos los Skills a la vez. Primero lee la información de descripción de cada Skill y, una vez que encuentra el Skill objetivo, carga el contenido completo. La razón es: si hay cientos de Skills, cargar todo cada vez desperdiciaría enormemente tokens.


Estructura de directorios estándar de Skill

Un Skill completo no es un solo archivo, sino un directorio que contiene múltiples archivos.

A continuación se muestra la estructura de directorios completa de un Skill estándar:

my-skill/
│
├── SKILL.md          ← 核心执行文件
├── metadata.json     ← 元信息
├── examples/         ← 示例目录
│   ├── example1.md
│   └── example2.md
│
├── scripts/          ← 可执行脚本
│   ├── main.py
│   └── utils.py
│
├── resources/        ← 资源目录
│   ├── prompt.md
│   └── config.yaml
│
├── tests/            ← 测试目录
│   ├── test_cases.md
│   └── eval.yaml
│
├── README.md         ← 使用说明
│
└── CHANGELOG.md      ← 变更日志

A continuación, desglosaremos uno por uno la función de cada archivo y directorio.


SKILL.md: archivo de ejecución central

Este es el archivo más importante de Skill, define toda la lógica de ejecución del Skill.

Contiene la siguiente información clave:

SecciónDescripciónFunción
DescriptionDescripción funcional de SkillPara que Agent lo use en la coincidencia
When to useDefinir escenarios aplicablesEvitar activación accidental
When NOT to useDefinir escenarios no aplicablesEvitar conflictos con otros Skills
InputDefinir formato de entradaEstandarizar el método de invocación
InstructionsPasos de ejecuciónGuiar la ejecución de tareas
OutputDescripción del formato de salidaGarantizar consistencia de resultados

A continuación se muestra un ejemplo estándar de SKILL.md:

Ejemplo

# Skill de análisis de PDF

## Description
Se utiliza para analizar contenido de PDF y generar resúmenes.

## When to use

Apto para:

- Lectura de PDF
- Extracción de resúmenes
- Análisis de contenido

## When NOT to use

No apto para:

- Edición de imágenes
- Procesamiento de video

## Input

Archivo PDF

## Instructions

1. Extraer texto
2. Identificar estructura de capítulos
3. Resumir contenido principal
4. Producir puntos clave

## Output

Resumen en formato Markdown

Errores comunes de escritura

Muchos principiantes escriben un SKILL.md demasiado simplificado, por ejemplo:

Escritura no recomendada

# PDF Skill

Leer PDF
Resumir contenido
Devolver resultado

Los problemas de esta escritura son: no se sabe cuándo usarlo, no se sabe cuándo no usarlo, el formato de salida no es claro y es fácil que entre en conflicto con otros Skills.

Un SKILL.md calificado debe permitir que Agent juzgue de un vistazo: si este Skill es adecuado para la tarea actual.


metadata.json: metainformación de Skill

Este archivo proporciona datos estructurados legibles por máquina, ayudando a Agent a filtrar rápidamente Skills.

Ejemplo

{
  "name": "pdf-analyzer",
  "version": "1.0.0",
"description": "Analizar PDF y generar resumen"
  "tags": ["pdf", "summary"],
  "category": "document"
}

Descripción de campos comunes

CampoFunciónImportancia
nameNombre de SkillObligatorio
descriptionDescripción funcional; Agent depende de ella para hacer coincidenciasMás importante
versionNúmero de versiónRecomendado
tagsEtiquetas, para facilitar la búsquedaRecomendado
categoryCategoríaOpcional
authorAutorOpcional
permissionsPermisos requeridosOpcional

Entre ellosdescriptionel campo es el más importante, porque Agent normalmente depende de él para hacer coincidencias.

El proceso de coincidencia es aproximadamente el siguiente: después de que el usuario hace una solicitud, Agent escanea la description de todos los Skills, encuentra la descripción coincidente y luego carga el contenido completo del Skill y lo ejecuta.


examples: directorio de ejemplos

Muchos desarrolladores ignoran esta parte, pero en realidad es muy importante.

Estructura de directorios

examples/
├── example1.md
├── example2.md

Contenido del archivo de ejemplo

Ejemplo

Entrada:

Ayúdame a analizar este PDF

Salida:

# Resumen del documento

## Contenido principal

1. ...
2. ...
3. ...

Función de examples

FunciónDescripción
Proporcionar ejemplos few-shotAyuda al modelo a comprender el comportamiento esperado mediante ejemplos
Estandarizar el formato de salidaAclarar la estructura y el estilo de salida mediante ejemplos
Mejorar la estabilidad de salidaReducir el comportamiento aleatorio y hacer los resultados más predecibles

Experiencialmente, buenos examples suelen ser más efectivos que aumentar el prompt.


scripts: scripts ejecutables

Skill no es solo un prompt; a veces es necesario ejecutar código real para completar el trabajo real.

Los escenarios comunes que requieren scripts incluyen: leer PDF, ejecutar OCR, llamar a bases de datos, procesamiento de datos, generar gráficos, etc.

Estructura de directorios

scripts/
├── main.py
└── utils.py

Ejemplo de script Python

Ejemplo

# Ruta de archivo: scripts/extract.py
# Función: extraer contenido de texto de un archivo PDF

from pypdf import PdfReader

# Abrir archivo PDF
reader = PdfReader("demo.pdf")

# Almacenar el texto extraído
text = ""

# Recorrer cada página y extraer texto
for page in reader.pages:
    text += page.extract_text()

# Mostrar todo el contenido de texto
print(text)

El flujo de trabajo de Skill es: leer el archivo → ejecutar el script → obtener el resultado, y luego entregar el resultado al modelo grande para su procesamiento.


resources: directorio de recursos

Se utiliza para guardar contenido auxiliar, separando la configuración del código.

Estructura de directorios

resources/
├── prompt.md
├── config.yaml

Tipos de recursos que puede incluir

Tipo de recursoDescripciónEjemplo
Plantilla de PromptPlantillas de prompts reutilizablesprompt.md
Archivo de configuraciónParámetros y ajustesconfig.yaml
Plantilla de textoPlantillas de correo e informestemplate.txt
Recursos de imagenIconos, diagramaslogo.png
Plantilla SQLPlantillas de consulta predefinidasquery.sql

Ejemplo de archivo de configuración

Ejemplo

# Ruta del archivo: resources/config.yaml
# Configuración relacionada con el resumen

max_length
: 1000    # Longitud máxima del resumen (número de caracteres)
language
: zh        # Idioma de salida: zh=chino, en=inglés

Al colocar la configuración en un archivo independiente, en el futuro no será necesario modificar el código para cambiar los parámetros.


tests: directorio de pruebas

Los proyectos maduros suelen incluir pruebas para verificar la efectividad y estabilidad de Skill.

Estructura de directorios

tests/
├── test_cases.md
└── eval.yaml

Ejemplo de caso de prueba

Ejemplo

Prueba:

Entrada:

Ayúdame a analizar el PDF

Esperado:

Resumen de salida
Incluir puntos clave

Función de las pruebas

FunciónDescripción
Verificar la efectividadAsegurar que la salida de Skill cumpla con lo esperado
Pruebas de regresiónVerificar después de cambios que las funciones antiguas no se vean afectadas
Evaluación automáticaPruebas por lotes junto con flujos automatizados
Pruebas A/BComparar la calidad de salida de diferentes versiones

Un Skill sin pruebas es propenso al problema de "cambié una frase y las funciones antiguas dejaron de funcionar de repente".


README: instrucciones de uso

README está dirigido a desarrolladores, explica cómo instalar y usar este Skill.

Ejemplo

# Instalación

Copiar al directorio skills

# Cómo usar

Subir PDF

# Formato de salida

Markdown

El problema central que resuelve es: en el futuro ni siquiera uno mismo sabrá cómo usar el Skill que escribió.


Caso completo: Skill de análisis de PDF

A continuación, se conectan todos los conceptos anteriores con un ejemplo completo.

Vista general de la estructura de directorios

pdf-analyzer/
├── SKILL.md
├── metadata.json
├── examples/
│   └── summary.md
├── scripts/
│   └── extract.py
├── tests/
│   └── eval.md
└── README.md

Flujo de invocación completo

用户:
上传 PDF 并总结

        ↓

Agent:
扫描所有 Skills

        ↓

发现:
description: 分析 PDF 并生成摘要

        ↓

命中 pdf-analyzer

        ↓

读取 SKILL.md

        ↓

调用 extract.py

        ↓

提取 PDF 内容

        ↓

生成摘要

        ↓

返回结果

¿Por qué Skill se diseña como estructura de directorios?

Mucha gente preguntará: ¿por qué no usar un solo prompt.txt para resolver todo?

La razón es que cuando la escala crece, se sale de control.

Problemas del enfoque de un solo archivo

ProblemaManifestación específica
Imposible de mantenerTodo el contenido amontonado en un solo archivo, difícil de modificar
Imposible de probarSin casos de prueba, no se sabe si funciona correctamente después de los cambios
Imposible de reutilizarCada Skill tiene que escribirse desde cero
Imposible gestionar versionesDifícil rastrear el historial de cambios
Imposible colaborar en equipoUn archivo modificado por varias personas fácilmente genera conflictos

Ventajas del enfoque basado en directorios

VentajaForma de implementación
MantenibleResponsabilidades claras por archivo, localización rápida de cambios
ReutilizableLos scripts y configuraciones se pueden compartir entre Skills
TesteableDirectorio de pruebas independiente, soporta verificación automatizada
ExtensiblePara agregar nuevas funciones solo hay que añadir archivos
PublicableEmpaquetar el directorio y listo para distribuir

Resumen

Skill no es esencialmente un prompt, sino un paquete completo de capacidades de software.

Relación entre archivos centrales

SKILL.md
    ↓
定义行为

metadata.json
    ↓
定义信息

examples/
    ↓
定义示例

scripts/
    ↓
定义能力

tests/
    ↓
定义质量

README
    ↓
定义使用方式

El Prompt solo puede resolver un problema puntual, mientras que Skill convierte las capacidades en activos.

Otras extensiones