让 AI 代理拥有"专业技能包":Microsoft Agent Skills

本文介绍如何使用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)。该方法通过三个阶段逐步展示技能信息,避免一次性加载所有信息,从而提升上下文管理的效率。

  1. 广告阶段:加载每个技能的名称和描述(约100个tokens),让代理了解可用的技能。
  2. 加载阶段 :任务与技能匹配时,代理调用 load_skill 获取完整的 SKILL.md 指令,推荐加载量控制在5,000个tokens以下。
  3. 按需读取 :通过 read_skill_resource 获取附加文件(如引用、模板等),确保仅在必要时加载,以提高上下文利用率。

这一策略使代理能有效访问深度领域知识,同时保持上下文窗口简洁。这在处理多领域任务或控制token使用时尤为重要,确保代理在不增加复杂性的前提下,灵活应对用户请求。

总结

通过Agent Skills,Microsoft代理框架中的代理可以动态加载可重用领域技能,而无需修改核心指令。这将提升代理的专业水平,提升业务响应能力。建议开发者根据特定需求实现自定义技能包,以适应变化的市场环境。


标签:Agent Skills, Microsoft Agent Framework, 领域专业技能, .NET, Python