Microsoft 于 7 月 15 日发布了适用于 Python 的稳定版 Agent Skills 框架。它允许开发者仅在 LLM 驱动的智能体真正需要时才引入相关能力。通过将单一且不断膨胀的系统提示词(system prompt)替换为按需加载技能,该方法缩减了提示词大小,降低了 token 成本,并使智能体的推理过程更加清晰。
为什么提示词会膨胀,以及其重要性
LLM 智能体依赖于“系统提示词”,其中封装了模型在每一轮对话中都应看到的策略、运行手册和参考资料。只需添加少量策略文档,提示词就会膨胀到数千个 token。更长的提示词会增加推理成本——模型处理的每个 token 都会计费——并且会稀释指令信号,使智能体的输出变得模糊。在事件分诊或合规性检查中,模糊的提示词可能会让一个得力的助手变成误导信息的来源。
Agent Skills 模式:渐进式披露
新框架将单体式提示词替换为四步工作流:
- 技能宣告 – 一个轻量级的元数据条目,用于告知路由层技能名称。
- 加载指令 – 智能体通过阅读简洁的描述,来决定该技能是否符合请求。
- 读取资源 – 可选的策略或参考文件,仅在智能体选择该技能后才进行获取。
- 运行脚本 – 执行具体操作的代码执行过程,需经过明确批准。
只有简短的 SKILL.md 文件存在于核心提示词中。所有较大的文档和脚本都存放在基于文件的技能包中,由运行时按需拉取。目录布局保持简单:
SKILL.md– 简短的人类可读描述。references/– 策略或指南文件。scripts/– 可执行代码。
由于智能体在决定该技能是否匹配之前,永远不会看到 references/ 或 scripts/ 的完整内容,因此无论注册多少技能,主提示词都能保持精简。
框架内置的安全防护机制
该框架假定加载技能可能存在风险,并强制执行开发者必须遵守的规则:
- 技能名称宣告 – 自动执行,仅用于路由。
- 指令加载 – 对于经过筛选的列表是自动的;未经审核的指令可能会无意中改变行为。
- 策略读取 – 当数据是非敏感时自动执行;请将敏感材料置于额外的访问控制之后。
- 脚本执行 – 始终需要明确批准。脚本将智能体从“建议”转变为“行动”,因此必须由人工或策略检查介入。
- 外部系统调用 – 必须通过具有有限权限的独立工具进行;技能本身并不是一种授权机制。
这些规则促使开发者在尝试数据库更新或代码部署等写操作之前,先从只读工作流开始——如事件分诊、策略查询、状态查询。
运维规范:日志记录与版本控制
当技能运行时,框架鼓励(且许多部署要求)记录以下内容:
- 原始请求和所选技能 ID。
- 所使用的技能包版本。
- 智能体是仅加载了描述,还是同时也获取了资源文件。
- 脚本执行的批准决策。
- 提供的所有工具参数以及返回的结果。
如果智能体选择了错误的技能,请将该误选转化为测试用例。这可以在技能进入生产环境之前建立回归检查。
将每个技能视为具有明确边界的版本化依赖,而不是一堆松散的提示词文件夹。版本控制允许你在不干扰智能体其余知识库的情况下,回滚有故障的脚本。
入门指南:务实清单
- 选择一个只读工作流 – 例如,“查询最新的安全事件指南”。
- 将指令和脚本分开打包 – 保持
SKILL.md简短;将沉重的策略文件存放在references/中。 - 整理目录 – 维护一份已批准技能的列表,并对任何脚本强制执行审批。
- 设置沙箱限制 – 为脚本执行定义 CPU、内存和网络约束;记录每一次运行。
- 与旧的大型提示词进行基准测试 – 对比 token 使用量、延迟和成功率,以确认成本节省情况。
后续关注
Microsoft 的发布目前是一个稳定的 Python 实现。
总结
Agent Skills 让 LLM 驱动的助手在保持轻量化的同时,能够访问不断扩充的策略和脚本库。通过仅预先加载描述并在需要时才调用重型资源,提示词得以保持简短,推理成本随之降低,且 Agent 的推理过程能够保持专注。
