我们如何使用技能(Skills)
技能(Skills)已成为 Claude Code 中最常用的扩展方式之一。它们灵活、易于创建,且便于分发。但这种灵活性也带来了一个问题:如何确定哪种技能最有效?编写优质技能的秘诀是什么?何时将技能分享给他人?在 Anthropic,我们在 Claude Code 中广泛使用技能,目前有数百个技能在活跃使用。以下是我们在使用技能加速开发过程中得出的经验。
什么是技能(Skills)?
如果你是技能的新手,建议阅读我们的文档,或观看 Skilljar 上关于智能体技能的最新课程——本文将假设你已经对技能有一定了解。我们经常听到一个关于技能的误解:认为它们“只是标记语言文件”,但技能最有趣的地方在于,它们不仅仅是文本文件。技能是文件夹,可包含脚本、资源、数据等,智能体可以发现、探索和操作这些内容。在 Claude Code 中,技能还有多种配置选项,包括注册动态钩子。我们发现,Claude Code 中一些最实用的技能,都创造性地利用了这些配置选项和文件夹结构。
技能的类型
在对所有技能进行分类后,我们发现它们可以归纳为几个常见类别。优质的技能通常只属于一个类别,而那些令人困惑的技能则会跨多个类别。这并非一个确定的列表,但它可以帮助你判断,你的团队是否缺少某种类型的技能。
1. 库与 API 参考
这类技能用于说明如何正确使用库、命令行界面(CLI)或软件开发工具包(SDK)。它们既可以针对内部库,也可以针对 Claude Code 有时会遇到困难的通用库。这类技能通常包含一个参考代码片段文件夹,以及 Claude 编写脚本时需要避免的坑点清单。示例:billing-lib——你的内部计费库:包含边缘案例、常见陷阱等。internal-platform-cli——你的内部 CLI 包装器的每个子命令,以及何时使用它们的示例。frontend-design——帮助 Claude 更好地适配你的设计系统。
2. 产品验证
这类技能描述如何测试或验证你的代码是否正常工作。它们通常与 playwright、tmux 等外部工具配合使用,以完成验证工作。验证类技能对于确保 Claude 的输出正确至关重要。让一名工程师花一周时间完善你的验证类技能,是完全值得的。可以考虑一些技巧,例如让 Claude 录制其输出的视频,以便你准确看到它测试的内容;或者在每一步对状态执行程序化断言。这些通常可以通过在技能中包含各种脚本来实现。示例:signup-flow-driver——在无头浏览器中执行注册→邮件验证→引导流程,并在每一步设置状态断言钩子。checkout-verifier——使用 Stripe 测试卡驱动结账界面,验证发票是否确实处于正确状态。tmux-cli-driver——用于交互式 CLI 测试,适用于需要终端(TTY)的验证场景。
3. 数据获取与分析
这类技能用于连接你的数据和监控栈。这些技能可能包含用于获取数据的库(附带凭证)、特定的仪表板 ID 等,以及关于常见工作流程或数据获取方式的说明。示例:funnel-query——包含“需要关联哪些事件才能查看注册→激活→付费转化漏斗”的说明,以及包含标准用户 ID(canonical user_id)的表格。cohort-compare——比较两个群组的留存率或转化率,标记统计上显著的差异,并链接到群组定义。grafana——包含数据源 UID、集群名称,以及“问题→仪表板”查找表。
4. 业务流程与团队自动化
这类技能将重复的工作流程自动化为一个命令。这些技能的指令通常相当简单,但可能依赖其他技能或 MCP,且依赖关系较为复杂。对于这类技能,将之前的结果保存在日志文件中,可以帮助模型保持一致性,并反思工作流程之前的执行情况。示例:standup-post——聚合你的工单跟踪器、GitHub 活动和之前的 Slack 内容,生成仅包含更新内容的晨会总结。create-<ticket-system>-ticket——强制执行工单 schema(有效的枚举值、必填字段),以及工单创建后的工作流程(通知审核者、在 Slack 中发送链接)。weekly-recap——合并已合并的 PR、已关闭的工单和部署记录,生成格式化的周报。
5. 代码脚手架与模板
这类技能为代码库中特定功能生成框架模板。你可以将这些技能与可组合的脚本结合使用。当你的脚手架有纯代码无法完全覆盖的自然语言要求时,这类技能尤其有用。示例:new-<framework>-workflow——生成带有你的注解的新服务/工作流/处理器。new-migration——包含你的迁移文件模板以及常见坑点。create-app——生成带有预配置认证、日志和部署配置的新内部应用。
6. 代码质量与评审
这类技能用于在团队内部执行代码质量规范,并帮助评审代码。它们可以包含确定性脚本或工具,以最大限度地保证可靠性。你可能希望将这些技能作为钩子的一部分自动运行,或在 GitHub Action 中使用。示例:adversarial-review——启动一个“全新视角”子智能体进行评审,实施修复,反复迭代,直到发现的问题降为细微的优化建议(nitpicks)。code-style——执行代码风格规范,尤其是 Claude 默认难以做好的风格。testing-practices——说明如何编写测试以及需要测试哪些内容。
7. CI/CD 与部署
这类技能帮助你在代码库中获取、推送和部署代码。这些技能可能会引用其他技能来收集数据。示例:babysit-pr——监控 PR→重试不稳定的 CI→解决合并冲突→启用自动合并。deploy-<service>——执行构建→冒烟测试→带有错误率对比的渐进式流量部署→出现回归时自动回滚。cherry-pick-prod——创建独立的工作目录→挑选代码(cherry-pick)→解决冲突→生成带有模板的 PR。
8. 运行手册(Runbooks)
这类技能根据症状(如 Slack 线程、告警或错误特征),引导完成多工具调查,并生成结构化报告。示例:<service>-debugging——为你的高流量服务提供“症状→工具→查询模式”的映射。oncall-runner——获取告警→检查常见问题→格式化调查结果。log-correlator——给定一个请求 ID,从所有可能接触过该请求的系统中提取匹配的日志。
9. 基础设施运维
这类技能执行日常维护和运维流程——其中一些涉及破坏性操作,需要防护措施。它们可以让工程师在关键操作中更容易遵循最佳实践。示例:<resource>-orphans——查找孤立的 Pod/卷→发送到 Slack→等待观察期→用户确认→级联清理。dependency-management——你的团队的依赖项审批工作流程。cost-investigation——包含“为什么我们的存储/出口流量费用激增”的查询方法,以及具体的存储桶和查询模式。
编写技能的技巧
确定要创建的技能后,如何编写它?以下是我们发现的一些最佳实践、技巧和方法。我们最近还推出了 Skill Creator,让你在 Claude Code 中创建技能变得更简单。
不要说显而易见的内容
Claude Code 对你的代码库了解很多,而且 Claude 本身也精通编程,包括许多默认的观点。如果你发布的技能主要是提供知识,尽量聚焦于那些能让 Claude 跳出常规思维的信息。前端设计技能就是一个很好的例子——它是由 Anthropic 的一名工程师通过与客户合作迭代开发的,目的是提升 Claude 的设计品味,避免使用 Inter 字体和紫色渐变等经典模式。
添加“坑点(Gotchas)”章节
任何技能中最有价值的内容都是“坑点”章节。这些章节应基于 Claude 使用该技能时遇到的常见失败点来编写。理想情况下,你应该随着时间的推移更新技能,补充这些坑点。
利用文件系统和渐进式披露
正如我们之前所说,技能是一个文件夹,而不仅仅是一个标记语言文件。你应该将整个文件系统视为一种上下文工程和渐进式披露的方式。告诉 Claude 你的技能中包含哪些文件,它会在适当的时候读取这些文件。渐进式披露最简单的形式,就是指向其他标记语言文件供 Claude 使用。例如,你可以将详细的函数签名和使用示例拆分到 references/api.md 中。另一个例子:如果你的最终输出是一个标记语言文件,你可以在 assets/ 文件夹中包含一个模板文件,供 Claude 复制和使用。你可以创建包含参考资料、脚本、示例等的文件夹,这些都能帮助 Claude 更高效地工作。
不要过度约束 Claude(避免 Railroading)
Claude 通常会努力遵循你的指令,而且由于技能具有很高的可复用性,你需要注意不要在指令中过于具体。给 Claude 它需要的信息,但也要给它根据情况调整的灵活性。
仔细考虑设置流程
有些技能可能需要用户提供上下文才能完成设置。例如,如果你正在创建一个将晨会总结发布到 Slack 的技能,你可能希望 Claude 询问要发布到哪个 Slack 频道。实现这一点的一个好方法,是将设置信息存储在技能目录下的 config.json 文件中(如上面的示例)。如果配置未完成,智能体可以向用户询问相关信息。如果你希望智能体呈现结构化的多选题,你可以指示 Claude 使用 AskUserQuestion 工具。
描述字段是给模型看的
当 Claude Code 启动会话时,它会生成所有可用技能的列表及其描述。Claude 会扫描这个列表,判断“是否有适合当前请求的技能?”——这意味着,描述字段不是摘要,而是说明“何时触发这个技能”的说明。
记忆与数据存储
有些技能可以通过在内部存储数据来实现记忆功能。你可以将数据存储在简单的追加式文本日志文件、JSON 文件中,也可以存储在复杂的 SQLite 数据库中。例如,standup-post 技能可能会保留一个 standups.log 文件,记录它编写的每一份晨会总结——这意味着,下次你运行该技能时,Claude 会读取自己的历史记录,并判断自昨天以来发生了哪些变化。当你升级技能时,存储在技能目录中的数据可能会被删除,因此你应该将这些数据存储在稳定的文件夹中。目前,我们提供 `${CLAUDE_PLUGIN_DATA}` 作为每个插件的稳定文件夹,用于存储数据。
存储脚本并生成代码
你能给 Claude 的最强大的工具之一就是代码。给 Claude 提供脚本和库,让它可以将对话轮次用于组合逻辑,决定下一步该做什么,而不是重新构建模板代码。例如,在你的数据科学技能中,你可能有一组用于从事件源获取数据的函数。为了让 Claude 能够进行复杂分析,你可以给它一组辅助函数,如下所示:这样,当用户提出“周二发生了什么?”这类提示时,Claude 可以实时生成脚本来组合这些功能,进行更高级的分析。
按需钩子(On Demand Hooks)
技能可以包含仅在技能被调用时激活的钩子,并且钩子的有效期为整个会话。这种钩子适用于那些你不希望一直运行,但在某些情况下非常有用的个性化钩子。示例:/careful——通过 Bash 的 PreToolUse 匹配器,阻止 rm -rf、DROP TABLE、强制推送(force-push)、kubectl delete 等命令。只有当你知道自己要操作生产环境时,才需要启用这个钩子——如果一直启用,会让你感到非常繁琐。/freeze——阻止任何不在特定目录中的编辑/写入操作。在调试时非常有用:“我想添加日志,但总是不小心‘修复’了不相关的内容。”
技能的分发
技能最大的好处之一,就是你可以将它们分享给团队的其他成员。有两种方式可以将技能分享给他人:1. 将技能提交到你的代码库(位于 ./.claude/skills 目录下)2. 创建插件,并建立一个 Claude Code 插件市场,让用户可以上传和安装插件(更多内容可参阅此处文档)对于在相对较少代码库中工作的小团队来说,将技能提交到代码库是可行的。但每个提交到代码库的技能,都会给模型的上下文增加一点负担。随着团队规模扩大,内部插件市场可以让你分发技能,并让团队自主决定安装哪些技能。
市场管理
如何决定哪些技能可以进入市场?人们如何提交技能?我们没有专门的中央团队来做决定;相反,我们尝试通过自然方式发现最有用的技能。如果你有一个希望大家试用的技能,可以将它上传到 GitHub 的沙箱文件夹,并在 Slack 或其他论坛中告知大家。一旦某个技能获得了一定的关注度(由技能所有者决定),所有者可以提交 PR,将其移入市场。需要注意的是,创建劣质或冗余的技能非常容易,因此在发布前进行某种形式的筛选是很重要的。
技能的组合
你可能希望让技能之间相互依赖。例如,你可能有一个用于上传文件的文件上传技能,以及一个用于生成 CSV 并上传的 CSV 生成技能。目前,市场或技能本身尚未原生支持这种依赖管理,但你可以直接通过名称引用其他技能——如果这些技能已安装,模型会自动调用它们。
技能的衡量
为了了解一个技能的使用情况,我们使用 PreToolUse 钩子来记录公司内部的技能使用情况(示例代码见此处)。这样,我们可以发现哪些技能受欢迎,或者哪些技能的触发频率低于预期。
总结
技能是智能体非常强大、灵活的工具,但目前还处于早期阶段,我们都在摸索如何最好地使用它们。本文更像是一个我们发现的实用技巧集合,而不是一个确定的指南。理解技能的最佳方式是动手尝试,实验并找到适合自己的方法。我们的大多数技能都是从几行文字和一个坑点开始的,随着 Claude 遇到新的边缘案例,人们不断补充完善,技能才变得越来越好。
原文作者:
本文作者:ZKCOI
文章名称:从ClaudeCode看如何Harness智能体(三)
文章链接:https://www.zkcoi.com/365up/ai-agent/4535.html
本站资源仅供个人学习和交流,如若转载,请注明出处,详见《免责声明》。


微信扫一扫
支付宝扫一扫
