基于FileBased和CodeBased和ClassBased组合 Skills与Agent Framework的实践探索
目录1. 创建项目 安装包2. 组合Skills3. 运行效果 Skill 的扩展能力总结我们在前面的文章中介绍了FileBased、CodeBased和ClassBased三种不同的技能实现方式并且在Agent Framework中也提供了相应的支持。 在Agent Framework中我们可以通过组合不同类型的技能来让一个 Agent 同时具备多种能力。这一节将介绍如何在Agent Framework中使用FileBased、CodeBased和ClassBased技能例如电商系统中的单位换算重量 / 体积国际化应用中的温度转换数据分析中的多单位统一处理1. 创建项目 安装包先建一个控制台项目然后把依赖装上dotnet add package Azure.AI.OpenAI --version 2.9.0-beta.1 dotnet add package Azure.Identity --version 1.21.0 dotnet add package Microsoft.Agents.AI.OpenAI --version 1.1.0需要注意的是如果使用GetResponsesClient()必须安装Azure.AI.OpenAI 2.9.0-beta.1及以上版本否则可能会出现接口不可用或运行时报错如 404的情况。2. 组合Skills前面我们已经分别实现了三种 SkillFile-Based基于文件从 MCP 到 Skill基于FileBased Skill与 Agent Framework 的实践探索Code-Based基于代码基于CodeDefined Skill与 Agent Framework 的实践探索Class-Based基于类基于ClassBased Skill与 Agent Framework 的实践探索但这些方式本质上都是在使用“单个 Skill”对应的类是AgentSkillsProvider。在实际场景中我们往往需要让一个 Agent 同时具备多种能力这时候就需要将多个 Skill 组合起来。这里使用AgentSkillsProviderBuilder来组合不同来源的 Skill是实现多能力 Agent 的关键。var skillsProvider new AgentSkillsProviderBuilder() .UseFileSkill(Path.Combine(AppContext.BaseDirectory, skills)) // 基于文件unit-converter .UseSkill(volumeConverterSkill) // 代码定volume-converter .UseSkill(temperatureConverter) // 基于类temperature-converter .UseFileScriptRunner(myRunner) .Build();我们把三种技能组合在一起形成一个统一的技能提供者skillsProvider并注入到 Agent 的AIContextProviders中。AIAgent agent new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential()) .GetResponsesClient() .AsAIAgent(new ChatClientAgentOptions { Name MultiConverterAgent, ChatOptions new() { Instructions 你是一个乐于助人的助手可以进行单位、体积和温度转换。, }, AIContextProviders [skillsProvider], }, model: deploymentName);这里的AIContextProviders会把所有 Skill 暴露给模型。模型在推理过程中会根据用户的问题自动判断是否需要调用某个 Skill并选择合适的工具来完成任务类似 Function Calling 的机制。3. 运行效果await foreach (var response in agent.RunStreamingAsync( 我需要三个换算 1马拉松26.2 英里是多少公里 25 加仑是多少升 398.6°F 是多少摄氏度)) { Console.WriteLine(response.Text); }输出示例 Skill 的扩展能力其实 Skill 不只是本地写的代码你也可以把它理解成一层“对外能力的入口”可以接各种东西HTTP API比如调天气、地图、支付这些接口️数据库查询直接查你系统里的业务数据其他 AI 模型多个 Agent 一起配合干活外部协议以后也可以接像 MCP 这种标准能力 说白了你能接多少东西Agent 就能干多少事。总结AgentSkillsProviderBuilder提供了一种统一的组合方式可以将通过不同路径实现的 SkillFile / Code / Class整合在一起。通过这种方式Agent 不再只是单一能力的工具而是可以根据用户问题自动选择并调用不同 Skill 来完成任务。随着 Skill 的不断扩展HTTP、数据库、AI 等Agent 的能力也会随之增强随着 Skill 的不断扩展HTTP、数据库、AI 等Agent 的能力也会持续增强能够处理更加复杂的任务。源代码地址https://github.com/bingbing-gui/dotnet-platform/tree/master/src/09-AI-Agent/Agent-Framework/31-Mixed-Agent-Skills引入地址