使用 C# 和 Microsoft Agent Framework 构建 AI 代理
目录什么是 Microsoft Agent Framework为什么你会选择它而不是语义内核设置您的第一个代理人使用线程管理增加内存为您的经纪人提供工具多智能体工作流Microsoft.Extensions.AI 怎么样让我绊倒的事情可以投入生产了吗常见问题解答最后想说的话如果您喜欢此文章请收藏、点赞、评论谢谢祝您快乐每一天。本文学习如何使用 Microsoft Agent Framework 在 C# 中构建可用于生产环境的 AI 代理。内容涵盖设置、内存管理、工具和多代理工作流。上个月的大部分时间里我都在琢磨到底应该用哪个微软AI框架来进行AI编排。是语义内核自动生成还是Microsoft.Extensions.AI最终的答案是它们都适用某种程度上来说。Microsoft Agent Framework 是业界新秀。它几个月前发布了公开预览版基本上是 AutoGen 和 Semantic Kernel 背后的团队决定停止维护两个独立的框架并构建一个无需用户做出选择的框架而产生的。什么是 Microsoft Agent Framework这是微软正在构建的用来取代AutoGen和Semantic Kernel 的系统。同样的团队同一个框架。你可以获得能够记住对话、调用 C# 方法作为工具并与其他智能体协作的智能体。底层抽象层可以与 OpenAI、Azure OpenAI、Ollama 等任何平台兼容。基于线程的状态管理是内置的。遥测、过滤器以及所有在旧框架中需要自行添加的生产环境功能也都是内置的。目前正处于公开预览阶段预计将于2026年初正式发布。这意味着可能会出现破坏性变更。我在测试过程中已经遇到过几次。团队NotifyThreadOfNewMessagesAsync在一个版本中移除了某些功能又在另一个版本中对线程创建方式进行了破坏性更改。虽然不是什么灾难性问题但如果你计划下周将版本发布到生产环境还是值得注意的。为什么你会选择它而不是语义内核我也问过自己同样的问题。Semantic Kernel 在处理提示链和函数调用时表现良好。但如果您需要代理在十几个对话回合中保持上下文或者与其他代理协调工作Semantic Kernel 就会出现问题。Agent Framework 原生支持这些功能。基于图的执行、条件路由、持久线程等等Semantic Kernel 中需要自定义底层架构才能实现的功能在这里都能直接使用。如果您已经在使用旧版框架那么迁移路径是存在的。这些框架不会消失只是不再获得新功能。设置您的第一个代理人你需要 .NET 8 或更高版本。我使用的是 .NET 10它内置了 Agent Framework集成度更高。安装软件包dotnet add package Azure.AI.OpenAI --version 2.1.0dotnet add package Azure.Identity --version 1.17.1dotnet add package Microsoft.Extensions.AI.OpenAI --version 10.1.1-preview.1.25612.2dotnet add package Microsoft.Agents.AI.OpenAI --version 1.0.0-preview.251219.1Microsoft.Agents.AI.OpenAIMicrosoft.Extensions.AI 程序包目前处于预览阶段。截至 2026 年 1 月Agent Framework 程序包也处于预览阶段。这是最简单的代理using Microsoft.Agents.AI;using Microsoft.Extensions.AI;using OpenAI;AIAgent agent new OpenAIClient(your-api-key).GetChatClient(gpt-4o-mini).AsIChatClient().CreateAIAgent(instructions: You help developers find accurate technical information.);var response await agent.RunAsync(What is C#?);Console.WriteLine(response);就这样你已经找到经纪人了。它目前功能还不多。但它确实存在它有自己的特性由指令定义并且它知道如何与 OpenAI 通信。您也可以通过替换并提供您的 Azure 终结点来使用 AzureOpenAIClientOpenAIAzureOpenAIClient。使用线程管理增加内存智能体需要记忆功能。否则每次对话都得从头开始。代理框架使用线程来处理这个问题。每个线程都维护着自己的对话历史记录和上下文。AIAgent agent new OpenAIClient(your-api-key).GetChatClient(gpt-4o-mini).AsIChatClient().CreateAIAgent(instructions: You are a helpful technical assistant.);AgentThread thread agent.GetNewThread();// First turnvar response1 await agent.RunAsync(Whats the difference between IAsyncEnumerable and TaskList?,thread);Console.WriteLine(response1);// Second turn - agent remembers the contextvar response2 await agent.RunAsync(Which one should I use for streaming large datasets?,thread);Console.WriteLine(response2);线程状态会保持。下次您使用RunAsync同一线程调用时代理会记住您上次通话的内容。我用一个关于 SQL Server 索引的五回合对话测试了这个功能。代理程序无需我重复上下文就能引用对话中前面提到的要点。效果完全符合预期。为您的经纪人提供工具工具方面这个框架赢得了我的尊重。你编写普通的 C# 方法给它们添加一些属性代理程序会自动判断何时调用它们。using System.ComponentModel;using Microsoft.Extensions.AI;[Description(Gets the current weather for a location)]async Taskstring GetWeather([Description(City name)] string city){// Simulate API callawait Task.Delay(500);return $Sunny, 72°F in {city};}var chatClient new OpenAIClient(your-api-key).GetChatClient(gpt-4o-mini).AsIChatClient();AIAgent weatherAgent chatClient.CreateAIAgent(name: WeatherAgent,instructions: You provide weather information.,tools: [AIFunctionFactory.Create(GetWeather)]);var response await weatherAgent.RunAsync(Whats the weather in Seattle?);Console.WriteLine(response);代理程序看到问题后会识别出需要天气数据然后调用你的GetWeather方法并将结果整合到响应中。你无需编写任何编排逻辑。你可以给代理配备多种工具。模型会自行决定使用哪些工具。我开发了一个文档代理它可以搜索 GitHub、读取文件内容并查询 Stack Overflow。我给它配备了六种不同的工具。它能根据问题自动判断应该使用哪些工具。即使测试了五十次仍然感觉像魔法一样。多智能体工作流对于简单的任务单个智能体就足够了。但有些问题需要专门的智能体来解决。您可以协调多个代理人。给每个代理人分配特定的任务var openAIClient new OpenAIClient(your-api-key);var researchAgent openAIClient.GetChatClient(gpt-4o-mini).AsIChatClient().CreateAIAgent(instructions: You find and verify technical information. Be concise.);var writerAgent openAIClient.GetChatClient(gpt-4o-mini).AsIChatClient().CreateAIAgent(instructions: You write clear, concise documentation based on research.);// Research phasevar researchThread researchAgent.GetNewThread();var researchResult await researchAgent.RunAsync(Provide key technical facts about: async/await in C#,researchThread);Console.WriteLine($Research: {researchResult});// Writing phase - pass research results to writervar writerThread writerAgent.GetNewThread();var documentation await writerAgent.RunAsync($Based on this research, write a brief explanation:\n\n{researchResult},writerThread);Console.WriteLine($Documentation: {documentation});你把问题交给调研代理它进行调研。然后你把调研结果交给撰稿代理由它负责撰写文档。这是简化版。你还可以构建条件路由、共享状态、基于图的模式等等满足工作流程的各种需求。我构建了一个包含四个代理的代码审查工作流程一个用于分析性能一个用于检查安全性一个用于查找可维护性问题还有一个用于将所有信息综合成可操作的反馈。效果比我预期的要好。Microsoft.Extensions.AI 怎么样你会看到这两个名称同时出现。它们的区别如下。Microsoft.Extensions.AI是抽象层。它允许您针对IChatClientOpenAI、Azure OpenAI 或 Ollama 编写代码并在它们之间切换而无需更改任何内容。Agent Framework 构建于其上。它提供代理原语、线程管理和工具编排也就是实际的代理功能。两者都会用到。Extensions.AI 用于客户端Agent Framework 用于其他所有操作。让我绊倒的事情重大变更。预览版意味着 API 接口可能会发生变化。更新前请查看版本说明。令牌成本。具有记忆功能的代理会积累对话历史记录。长对话线程意味着大量的令牌。您需要实现某种摘要或截断策略。错误处理。如果工具抛出异常您需要捕获它并返回代理可以理解的内容。否则对话将停止。测试。我仍在探索测试智能体行为的最佳方法。对单个工具进行单元测试很简单。但测试具有不确定响应的多轮对话呢那就难多了。可以投入生产了吗这取决于你的风险承受能力。底层 Microsoft.Extensions.AI 层已正式发布 (GA)。稳定且受支持。Agent Framework 目前仍处于预览阶段预计很快将正式发布。微软表示AutoGen 或 Semantic Kernel 上的现有工作负载是安全的。迁移路径暂无重大变更计划。但“暂无重大变更计划”并不等同于“不会发生重大变更”。如果你正在构建新的项目这个框架的稳定性足以满足大多数使用场景。只需锁定你的软件包版本并留意正式发布前的更新即可。过去一个月我一直在一个业余项目中使用 Agent Framework。虽然没有实际的生产流量但测试足以让我对其有所了解。它足够稳定所以我并不担心。我只是在关注 GitHub 上的版本更新。常见问题解答Agent Framework 和 Semantic Kernel 有什么区别Agent Framework 是替代方案。微软正在将 AutoGen 和 Semantic Kernel 整合到这个框架中。主要区别在于状态管理。语义内核没有内置的对话持久化功能而代理框架则有。如果您需要构建任何能够记住单回合以上上下文的系统那么代理框架是更简便的选择。Microsoft Agent Framework 是否已准备好投入生产环境这取决于你对“可用于生产环境”的定义。底层 Microsoft.Extensions.AI 层已正式发布 (GA)。该部分稳定且受支持。截至 2026 年 1 月Agent Framework 本身仍处于预览阶段但已接近正式发布。我一直用它来做一些业余项目还没遇到什么大问题。只要锁定你的软件包版本并密切关注发布说明就行了。正式版发布前可能会出现一些重大变更但微软表示迁移路径不会受到影响。我可以从 AutoGen 或 Semantic Kernel 迁移到 Agent Framework 吗没错。这正是微软设计它的初衷。我上个月迁移了一个语义内核项目。线程管理替换了我的一些编排模式代理定义替换了另一些。对于一个中等规模的代码库来说整个过程大约花了一天时间。核心抽象概念足够相似所以你不需要从头开始重写所有代码。而且 AutoGen 和 Semantic Kernel 都会继续获得安全更新因此你没有严格的截止日期。Agent Framework 支持哪些 AI 模型任何实现了IChatClientMicrosoft.Extensions.AI 的功能。我用 Azure OpenAI、OpenAI 和 Ollama 都测试过了无需更改代理逻辑即可正常工作。这正是抽象层的意义所在只需编写一次代码即可在预算或需求发生变化时更换服务提供商。最后想说的话Microsoft Agent Framework 最终为 .NET 开发人员提供了一种一流的方法来构建 AI 代理而无需将三个不同的库拼凑在一起。如果你一直在等待 AutoGen 和 Semantic Kernel 团队确定发展方向那么现在就是最佳时机。就从这里开始吧。文档详尽模式清晰而且也提供了从旧框架迁移的路径。记住这只是预览版。锁定你的版本。注意重大变更。彻底测试你的工具。.NET 中人工智能的未来发展前景大致如此。你最好现在就开始熟悉它。如果您喜欢此文章请收藏、点赞、评论谢谢祝您快乐每一天。