技能不是魔法。它们是有范围的上下文。 🧭🗂️

发布: (2026年2月18日 GMT+8 21:44)
8 分钟阅读
原文: Dev.to

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 详细解释了激活机制。

⚙️ 激活工作原理

  1. Baseline Load – 代理读取仓库的基线指令。
  2. Metadata Scan – 它扫描每个技能的 namedescription
  3. Match? – 如果当前请求匹配描述,代理加载该技能的 SKILL.md
  4. Execution – 应用该技能的过程性指导。
  5. No Match – 该技能从未出现在代理的上下文中,因此没有“被遗忘”。

📄 SKILL.md 结构

---
name: 
description: 
---
  • YAML 前置块namedescription)始终可见。
  • 前置块以下的内容仅在调用后才会激活。

一个 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 CopilotClaude Code 的官方文档,以掌握激活细节。

祝构建愉快! 🚦💎

执行工作流

  1. 读取 CHANGELOG.md 以提取语气和结构。
  2. 确定发布类型和重大变更。
  3. 选择与发布主题相符的表情符号。
  4. 撰写斜体的开场引用。
  5. 编写正文内容。
  6. 验证链接、格式以及重大变更的可见性。

关键观察点不是工作流本身,而是激活边界。没有激活,这些逻辑就不存在于代理的工作记忆中。

🦄 完整版本位于我的 awesome‑github‑copilot 仓库,如果你想更仔细地检查它。

  • 如果某个行为必须始终如一,它应放在仓库或全局指令中。
  • 如果某个行为是有条件的、程序性的或任务特定的,它应放在技能中。

技能应像你偶尔使用的工具——而不是代理每次会话都必须自行重新发现的一致规则。然而,一旦指令变得足够庞大,它们就不再像基线上下文,而是变成噪音。此时,裁剪比添加更有价值。

如果有帮助的话,这就是我在为新 LLM 减少指令臃肿时使用的提示:

审查 #copilot‑instructions.md 并针对 AI 使用进行优化。删除可以从仓库结构或代码使用中推断出的信息。消除重复以及任何不能提升清晰度或降低歧义的内容。保留个性和语气指令。最终文件应优先考虑代理的理解,而非人类的可读性。

💡 技巧提示: 首先备份原始文件。代理是自信的编辑者,但有时自信的编辑者会删除最关键的一行。

我撰写了这篇文章,ChatGPT 像一个明确定义的技能一样提供帮助。我做了最终决定——它在需要时激活,平时则不干扰。

0 浏览
Back to Blog

相关文章

阅读更多 »

为什么仅有LLMs并非智能体

引言 大型语言模型功能强大,但单独称它们为“agents”是一种类别错误。这种混淆在实际项目中经常出现……

为什么 Prompt 不仅仅是消息

我曾经以为提示(prompt)只是用户给大型语言模型(LLM)的信息或查询。你输入一些内容,模型就会回应。如果输出不理想,你就会微调 w……