技能不是魔法。它们是有范围的上下文。 🧭🗂️
Source: Dev.to
请提供您希望翻译的完整文本(除代码块和 URL 之外),我会按照要求将其翻译成简体中文并保持原有的格式、Markdown 语法以及技术术语不变。
🦄 技能不是魔法提升——它们是上下文管理
当加载上下文时,技能会改变。
当你添加 Copilot 技能时,你会迅速从“如何做”转向对 行为 的讨论。驱动自定义代理、可复用提示和仓库指令的相同模式同样适用于这里:机制 比文件本身更重要。
核心困惑
大多数人期望技能能让代理 更聪明。实际上,它让代理更 挑剔。有趣的问题是 何时 技能有帮助,何时 会带来负面影响。
“更大的区别不在于 哪个模型更聪明;而在于 每个代理系统如何决定哪些上下文值得关注。”
📦 技能的作用
| 激活前 | 激活后 |
|---|---|
| 在推断的仓库模式上操作 | 执行已定义的过程规则 |
| 仅使用基线指令 | 使用基线指令 + 技能指导 |
| 优化以实现通用适用性 | 优化以实现任务特定行为 |
技能通过仅在相关时加载详细指令来减少上下文负荷 仅在相关时。
🛠️ 隐喻:“Bob the Builder”
| 元素 | 类比 |
|---|---|
| 代理人 | 建造者 |
| 指令 | 蓝图(始终加载) |
| 技能 | 工具(按需加载) |
- 蓝图 (
.github/copilot-instructions.md) 包含始终存在的通用指导。 - 工具(技能)仅在当前任务匹配其描述时才会获取,防止基础上下文膨胀。
📁 技能的仓库布局
.github/
└── skills/
└── your-skill-name/
└── SKILL.md
目录树本身并不重要;关键是 何时 代理激活该技能。
- 首先只检查 元数据(名称和描述)。
- 如果描述与任务匹配,代理会加载完整的
SKILL.md。 - 技能文件夹内的其他文件保持不可见,除非被显式引用。
技巧提示: GitHub 关于 agent skills 的文档以及 Claude Code 的 skills docs 详细解释了激活机制。
⚙️ 激活工作原理
- Baseline Load – 代理读取仓库的基线指令。
- Metadata Scan – 它扫描每个技能的
name和description。 - Match? – 如果当前请求匹配描述,代理加载该技能的
SKILL.md。 - Execution – 应用该技能的过程性指导。
- No Match – 该技能从未出现在代理的上下文中,因此没有“被遗忘”。
📄 SKILL.md 结构
---
name:
description:
---
- YAML 前置块(
name与description)始终可见。 - 前置块以下的内容仅在调用后才会激活。
一个 skill 可以充当:
- 自定义代理
- 可复用提示
- 自定义指令
- 或上述三者的任意组合
🧬 示例:changelog-writer 技能
---
name: changelog-writer
description: |
Rewrite changelog entries with cheeky, narrative flair following project
conventions. Use this when asked to rewrite or update CHANGELOG.md entries.
---
# Guidance (visible only after activation)
1. **Identify the entry** to be updated.
2. **Preserve the date** and version number.
3. Rewrite the description in a *light‑hearted, narrative* tone.
4. Keep bullet‑point formatting consistent with existing entries.
5. Add a short “why” note if the change is non‑trivial.
# Example
之前
- 修复了登录流程中的错误。
之后
- 修复了一个潜伏的登录流程错误,该错误导致偶尔出现 500 错误。 🎉
When a user asks the agent to “update the changelog”, the description matches, the skill loads, and the guidance above is applied.
💡 快速要点
- 技能 = 条件工具,保持基础上下文简洁。
- 元数据很重要——编写清晰、针对任务的描述。
- 避免过度加载基础指令;让技能处理繁重工作。
- 查看 GitHub Copilot 和 Claude Code 的官方文档,以掌握激活细节。
祝构建愉快! 🚦💎
执行工作流
- 读取
CHANGELOG.md以提取语气和结构。 - 确定发布类型和重大变更。
- 选择与发布主题相符的表情符号。
- 撰写斜体的开场引用。
- 编写正文内容。
- 验证链接、格式以及重大变更的可见性。
关键观察点不是工作流本身,而是激活边界。没有激活,这些逻辑就不存在于代理的工作记忆中。
🦄 完整版本位于我的 awesome‑github‑copilot 仓库,如果你想更仔细地检查它。
- 如果某个行为必须始终如一,它应放在仓库或全局指令中。
- 如果某个行为是有条件的、程序性的或任务特定的,它应放在技能中。
技能应像你偶尔使用的工具——而不是代理每次会话都必须自行重新发现的一致规则。然而,一旦指令变得足够庞大,它们就不再像基线上下文,而是变成噪音。此时,裁剪比添加更有价值。
如果有帮助的话,这就是我在为新 LLM 减少指令臃肿时使用的提示:
审查
#copilot‑instructions.md并针对 AI 使用进行优化。删除可以从仓库结构或代码使用中推断出的信息。消除重复以及任何不能提升清晰度或降低歧义的内容。保留个性和语气指令。最终文件应优先考虑代理的理解,而非人类的可读性。
💡 技巧提示: 首先备份原始文件。代理是自信的编辑者,但有时自信的编辑者会删除最关键的一行。
我撰写了这篇文章,ChatGPT 像一个明确定义的技能一样提供帮助。我做了最终决定——它在需要时激活,平时则不干扰。