Skip to content

Skills 输入/输出规范设计

一个优秀的 Skill,不仅能完成任务,还要清晰地定义"接受什么"和"产出什么"。

良好的输入输出规范,是 Skill 可靠运行的基础。


为什么要定义输入输出规范

Skills 面对的是真实的用户请求,输入格式千变万化。

没有明确规范的 Skill,Claude 会自行猜测输入意图,导致行为不稳定。

规范不是限制,而是给 Claude 明确的行动边界,减少歧义,提高输出一致性。


输入规范的四个要素

要素说明示例
输入类型文件、文本、URL、参数等用户上传的 PDF 文件
格式要求文件扩展名、编码、结构.csv,UTF-8 编码,第一行为表头
必填/可选哪些输入是必须的文件路径必填,列名可选
缺省行为可选参数未提供时如何处理未指定列名时分析所有列

在 SKILL.md 中定义输入规范

实例

bash

## 输入规范

### 必填输入

- **数据文件**:用户上传的 `.csv` `.xlsx` 文件

  - 编码:UTF-8(CSV)或标准 Excel 格式

  - 第一行必须为列标题

  - 文件大小不超过 50MB

### 可选输入

- **目标列**:指定分析哪些列,默认分析所有数值列

- **输出格式**:`table`(表格)或 `text`(文字摘要),默认 `table`

- **精度**:保留小数位数,默认 2

### 输入缺失时的处理

若文件未上传,告知用户:"请上传需要分析的 CSV 或 Excel 文件。"

若文件格式不支持,告知用户并列出支持的格式列表。

输出规范的三个维度

维度一:输出内容

明确指定输出什么内容,避免遗漏或过度输出。

实例

bash

## 输出内容

分析完成后,提供以下内容:

1. **统计摘要表格**:各列的行数、均值、最大/最小值、空值数量

2. **数据质量报告**:列出发现的问题(如空值过多、数据类型混乱)

3. **文件路径**:若生成了输出文件,提供下载路径

维度二:输出格式

指定输出用哪种格式呈现,以及存储到哪里。

输出目标格式存储路径
在对话中展示Markdown 表格、代码块无需存储
可下载文件.xlsx、.pdf、.html/mnt/user-data/outputs/
中间结果JSON、CSV/home/claude/(临时)

维度三:输出时机

指定什么时候输出,是一次性全部输出,还是分步骤逐步展示。

实例

bash

## 输出时机

1. **读取文件后**:立即告知用户文件的基本信息(行数、列数、大小)

2. **分析进行中**:若分析耗时超过 10 秒,先输出进度提示

3. **分析完成后**:输出完整的统计摘要

4. **文件生成后**:展示文件路径,并调用 present_files 工具

完整的输入输出规范示例

以下是一个文档摘要 Skill 的完整输入输出规范:

实例

bash

---

name: doc-summarizer

description: >

  对用户上传的文档进行摘要提取,支持 PDF、Word(.docx)、纯文本。

  当用户需要快速了解文档内容、提取关键信息、生成文档摘要时使用。

---

# 文档摘要器

## 输入规范

### 必填

- 文档文件(.pdf、.docx .txt)

### 可选

- **摘要长度**:`short`(3句)/ `medium`(1段)/ `long`(3段),默认 `medium`

- **语言**:输出语言,默认与原文相同

- **重点方向**:如"重点关注结论部分"、"提取数字数据"

### 异常处理

- 文件超过 10MB:告知用户文件过大,建议分割后上传

- 格式不支持:列出支持的格式并请用户重新上传

- 文档为图片扫描件且无法识别文字:告知无法处理,建议使用 OCR 工具预处理

## 输出规范

### 输出内容(按顺序)

1. 文档基本信息:标题(若有)、页数、字数估计

2. 核心摘要:按用户指定长度输出

3. 关键词:5-8 个主题关键词

### 输出格式

- 全部在对话中展示,使用 Markdown 格式

- 不生成额外文件,除非用户明确要求保存

### 输出示例

---

**文档**:runoob-annual-report.pdf(24页,约 12,000 字)

**摘要**:本报告回顾了 runoob 年度业务表现,用户量同比增长 35%,

技术文档覆盖率提升至 98%。收入结构趋向多元化,广告与会员收入比例持平。

**关键词**:年度报告、用户增长、技术文档、收入结构、多元化

---

脚本层面的输入输出约定

如果 Skill 附带脚本,建议使用 JSON 作为结构化输入输出格式,便于 Claude 解析结果。

实例

python

# 文件路径:scripts/summarize.py

# 标准化的 JSON 输入输出模式

import json

import sys

def summarize(file_path: str, length: str = "medium") -> dict:

    """

    对文档进行摘要

    参数:

        file_path: 文档路径(必填)

        length: 摘要长度,short/medium/long(可选,默认 medium)

    返回:

        dict,包含 status、data 或 error 字段

    """

    try:

        # 模拟读取文档

        with open(file_path, "r", encoding="utf-8") as f:

            content = f.read()

        # 模拟生成摘要

        summary = content[:200] + "..."  # 实际应调用真实摘要逻辑

        return {

            "status": "success",

            "data": {

                "word_count": len(content),

                "summary": summary,

                "length": length

            }

        }

    except FileNotFoundError:

        return {"status": "error", "error": f"文件不存在:{file_path}"}

    except Exception as e:

        return {"status": "error", "error": str(e)}

if __name__ == "__main__":

    file_path = sys.argv[1] if len(sys.argv) > 1 else ""

    length    = sys.argv[2] if len(sys.argv) > 2 else "medium"

    result = summarize(file_path, length)

    # 统一输出 JSON,便于 Claude 解析

    print(json.dumps(result, ensure_ascii=False, indent=2))
json
{
  "status": "success",
  "data": {
    "word_count": 12480,
    "summary": "runoob 年度报告回顾了平台在过去一年的业务表现...",
    "length": "medium"
  }
}

使用 JSON 作为脚本输出格式,让 Claude 可以稳定地解析结果,而不需要对自由文本进行猜测性解读。

AI 思考中...

Skills 调试

Skills 错误处理与容错

基于 VitePress 构建,部署于 GitHub Pages