现在位置: 首页 > Skills 教程 > 正文

Skills 参数传递与接收

Skills 不像传统函数那样接收显式参数,它通过 Claude 的上下文来感知输入信息。

理解这种"隐式参数传递"机制,是写出实用 Skill 的关键。


Skills 如何获取参数

当 Claude 读取一个 Skill 后,整个对话上下文就是这个 Skill 的参数。

这意味着用户说的话、上传的文件、历史对话记录,都可以成为 Skill 的输入来源。

输入来源 示例 说明
用户当前消息 "帮我处理这份 PDF" 最直接的输入
上传的文件 用户上传了 report.pdf 通过路径或内容传入
历史对话 之前讨论过的数据格式 上下文中可引用
系统变量 当前日期、工作目录路径 Claude 自动感知

在 SKILL.md 中声明期望输入

SKILL.md 中可以通过自然语言描述,告诉 Claude 需要从上下文中提取哪些信息。

以下是一个处理 CSV 文件的 Skill 示例,演示如何在指令中声明输入预期:

实例

---
name: csv-analyzer
description: 分析用户上传的 CSV 文件,输出统计摘要。当用户提到 CSV、表格数据分析时触发。
---

# CSV 分析器

## 输入要求

用户应提供以下信息(从对话上下文中获取):
- **文件路径**:已上传 CSV 文件的路径(位于 /mnt/user-data/uploads/
- **分析目标**(可选):用户希望了解什么,如"找出空值""统计分布"
- **输出格式**(可选):表格、图表或文字摘要

若上述信息未明确,主动向用户确认后再执行。

Skill 中的"输入要求"是写给 Claude 自己看的。Claude 会根据这份说明,主动从上下文中提取信息,或在信息不足时向用户追问。


通过脚本接收结构化参数

当 Skill 附带 Python 或 Shell 脚本时,参数通过命令行参数或标准输入传递。

这与普通脚本的参数处理方式完全一致。

实例

# 文件路径:scripts/analyze.py
import argparse
import pandas as pd

def main():
    # 定义命令行参数
    parser = argparse.ArgumentParser(description="CSV 文件分析脚本")
    parser.add_argument("file",        help="必填:CSV 文件路径")
    parser.add_argument("--col",       help="可选:指定分析的列名")
    parser.add_argument("--limit", type=int, default=10,
                        help="可选:最多显示的行数,默认 10")
    args = parser.parse_args()

    # 读取文件
    df = pd.read_csv(args.file)

    # 按需筛选列
    if args.col:
        df = df[[args.col]]

    # 输出统计信息
    print(df.head(args.limit).to_string())
    print("\n--- 统计摘要 ---")
    print(df.describe())

if __name__ == "__main__":
    main()

Claude 在 SKILL.md 中调用该脚本的写法:

实例

## 执行分析

获取文件路径后,运行以下命令:

```bash
python scripts/analyze.py <文件路径> [--col <列名>] [--limit <行数>]
```

将命令行输出展示给用户,并提供文字解读。

文件路径参数的处理规范

用户上传的文件统一位于 /mnt/user-data/uploads/ 路径下。

在 Skill 脚本中,始终使用绝对路径访问文件,避免路径解析错误。

实例

import os

# 正确:使用绝对路径
UPLOAD_DIR = "/mnt/user-data/uploads"
file_path = os.path.join(UPLOAD_DIR, "report.csv")

# 错误:使用相对路径(会因工作目录不同而失败)
# file_path = "uploads/report.csv"

# 检查文件是否存在
if not os.path.exists(file_path):
    print(f"错误:文件不存在 → {file_path}")
    exit(1)

参数验证:在执行前检查输入

Skill 脚本在执行前,应始终验证关键参数是否合法。

这可以防止因参数缺失或格式错误导致的运行时崩溃。

实例

# 文件路径:scripts/validate_input.py
import sys
import os

def validate_csv_input(file_path: str) -> bool:
    """验证 CSV 文件输入是否有效"""

    # 检查文件路径是否提供
    if not file_path:
        print("错误:未提供文件路径")
        return False

    # 检查文件是否存在
    if not os.path.exists(file_path):
        print(f"错误:文件不存在 → {file_path}")
        return False

    # 检查文件扩展名
    if not file_path.lower().endswith(".csv"):
        print(f"错误:文件类型不支持,期望 .csv,实际 → {file_path}")
        return False

    # 检查文件大小(超过 100MB 时警告)
    size_mb = os.path.getsize(file_path) / (1024 * 1024)
    if size_mb > 100:
        print(f"警告:文件较大({size_mb:.1f} MB),处理可能较慢")

    return True

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("用法:python validate_input.py <文件路径>")
        sys.exit(1)

    ok = validate_csv_input(sys.argv[1])
    sys.exit(0 if ok else 1)

参数验证的失败信息应清晰说明期望什么和实际得到什么,方便 Claude 向用户反馈具体原因。