本文介绍如何使用Agent Skills为Microsoft代理框架中的代理提供可重用的领域专业技能包。通过.NET和Python内置技能提供者,代理可以在运行时动态加载所需技能,增强其能力而无需修改核心指令。
Introduction to Agent Skills
您现在可以在Microsoft Agent Framework中配置可移植、可重用的Agent Skills包,以提供领域专业知识,而无需修改代理核心指令。本文构建了.NET和Python提供的内嵌技能提供程序,允许代理在运行时发现并加载Agent Skills,仅在需要时调用。
Agent Skills是一个简单的开放格式,用于赋予代理新能力和专业知识。每个技能的核心是一个SKILL.md文件,这是一个描述技能功能并提供指导步骤的Markdown文档。技能还可包含可选的脚本、参考文档和其他资源,以供代理随时访问。
技能目录示例如下:
expense-report/
├── SKILL.md # 必需 --- 前言 + 指令
├── scripts/
│ └── validate.py # 可执行代码,代理可运行
├── references/
│ └── POLICY_FAQ.md # 按需加载的参考文档
└── assets/
└── expense-report-template.md # 模板和静态资源
SKILL.md文件包含YAML前言的元数据,后续是用Markdown编写的技能指令。其中,名称和描述是必需的,许可、兼容性和其他元数据为可选项。
使用Agent Skills的好处
- 领域专业知识封装:将特定知识打包为可重用的包。
- 扩展代理能力:为代理增加新特性而无需修改核心指令。
- 确保一致性:将多步骤任务转化为可重用、可审核的工作流程。
- 启用互动性:在不同Agent Skills兼容产品中重用相同技能。
技能列表的示例
构建技能的简单方式是创建一个包含SKILL.md文件的文件夹。技能目录结构如下:
skills/
└── meeting-notes/
└── SKILL.md
SKILL.md文件格式如下:
---
name: meeting-notes
description: >-
将会议记录汇总为结构化笔记和行动项。
在需要处理或总结会议录音或文字记录时使用。
---
## 指令
1. 提取记录中的关键讨论点。
2. 列出所做的决定。
3. 创建行动项列表,包括负责人和截止日期。
4. 保持摘要简洁 --- 限于一页以内。
在.NET中使用技能的示例:
csharp
// 从'skills'目录发现技能
var skillsProvider = new FileAgentSkillsProvider(
skillPath: Path.Combine(AppContext.BaseDirectory, "skills"));
// 创建带有技能提供程序的代理
AIAgent agent = new AzureOpenAIClient(
new Uri(endpoint),
new DefaultAzureCredential())
.GetResponsesClient(deploymentName)
.AsAIAgent(new ChatClientAgentOptions
{
Name = "SkillsAgent",
ChatOptions = new() { Instructions = "你是一个有帮助的助手。" },
AIContextProviders = [skillsProvider]
});
// 代理自动发现并加载匹配的技能
AgentResponse response = await agent.RunAsync(
"总结今天站立会议的关键点和行动项。");
Console.WriteLine(response.Text);
在Python中使用技能的示例:
python
from pathlib import Path
from agent_framework import SkillsProvider
from agent_framework.azure import AzureOpenAIChatClient
from azure.identity.aio import AzureCliCredential
# 从'skills'目录发现技能
skills_provider = SkillsProvider(skill_paths=Path(__file__).parent / "skills")
# 创建带有技能提供程序的代理
agent = AzureOpenAIChatClient(credential=AzureCliCredential()).as_agent(
name="SkillsAgent",
instructions="你是一个有帮助的助手。",
context_providers=[skills_provider],
)
# 代理自动发现并加载匹配的技能
response = await agent.run("总结今天站立会议的关键点和行动项。")
print(response.text)
总之,Agent Skills不断增强在框架中的支持,未来将推出更多功能,包括通过API动态创建和注册代理技能以及支持主动代码执行等。如需了解更多信息并亲自尝试,请查阅相关文档和示例。
Progressive Disclosure
Agent Skills设计原则强调逐步披露(Progressive Disclosure)。该方法通过三个阶段逐步展示技能信息,避免一次性加载所有信息,从而提升上下文管理的效率。
- 广告阶段:加载每个技能的名称和描述(约100个tokens),让代理了解可用的技能。
- 加载阶段 :任务与技能匹配时,代理调用
load_skill获取完整的 SKILL.md 指令,推荐加载量控制在5,000个tokens以下。 - 按需读取 :通过
read_skill_resource获取附加文件(如引用、模板等),确保仅在必要时加载,以提高上下文利用率。
这一策略使代理能有效访问深度领域知识,同时保持上下文窗口简洁。这在处理多领域任务或控制token使用时尤为重要,确保代理在不增加复杂性的前提下,灵活应对用户请求。
总结
通过Agent Skills,Microsoft代理框架中的代理可以动态加载可重用领域技能,而无需修改核心指令。这将提升代理的专业水平,提升业务响应能力。建议开发者根据特定需求实现自定义技能包,以适应变化的市场环境。
标签:Agent Skills, Microsoft Agent Framework, 领域专业技能, .NET, Python