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