使用 C# 和 Microsoft Agent Framework 构建 AI 代理

目录

[什么是 Microsoft Agent Framework?](#什么是 Microsoft Agent Framework?)

为什么你会选择它而不是语义内核

设置您的第一个代理人

使用线程管理增加内存

为您的经纪人提供工具

多智能体工作流

[Microsoft.Extensions.AI 怎么样?](#Microsoft.Extensions.AI 怎么样?)

让我绊倒的事情

可以投入生产了吗?

常见问题解答

最后想说的话


如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

本文学习如何使用 Microsoft Agent Framework 在 C# 中构建可用于生产环境的 AI 代理。内容涵盖设置、内存管理、工具和多代理工作流。

上个月的大部分时间里,我都在琢磨到底应该用哪个微软AI框架来进行AI编排。是语义内核?自动生成?还是Microsoft.Extensions.AI?最终的答案是,它们都适用,某种程度上来说。

Microsoft Agent Framework 是业界新秀。它几个月前发布了公开预览版,基本上是 AutoGen 和 Semantic Kernel 背后的团队决定停止维护两个独立的框架,并构建一个无需用户做出选择的框架而产生的。

什么是 Microsoft Agent Framework?

这是微软正在构建的,用来取代AutoGenSemantic 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.0

dotnet add package Azure.Identity --version 1.17.1

dotnet add package Microsoft.Extensions.AI.OpenAI --version 10.1.1-preview.1.25612.2

dotnet add package Microsoft.Agents.AI.OpenAI --version 1.0.0-preview.251219.1

Microsoft.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 终结点来使用 Azure OpenAIClientOpenAI AzureOpenAIClient

使用线程管理增加内存

智能体需要记忆功能。否则,每次对话都得从头开始。

代理框架使用线程来处理这个问题。每个线程都维护着自己的对话历史记录和上下文。

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 turn

var response1 = await agent.RunAsync(

"What's the difference between IAsyncEnumerable and Task<List>?",

thread

);

Console.WriteLine(response1);

// Second turn - agent remembers the context

var 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 Task<string> GetWeather([Description("City name")] string city)

{

// Simulate API call

await 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("What's 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 phase

var 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 writer

var 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 中人工智能的未来发展前景大致如此。你最好现在就开始熟悉它。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

相关推荐
AC赳赳老秦1 小时前
2026多智能体协同趋势:DeepSeek搭建多智能体工作流,实现复杂任务自动化
人工智能·python·microsoft·云原生·virtualenv·量子计算·deepseek
njsgcs1 小时前
我要让ai理解3d模型,什么孔面是装轴承,什么面是攻牙孔,什么面是轴面,区分从动轮主动轮
人工智能
猫头_1 小时前
RAG 全链路深度拆解:“大白”学习RAG的极简指南
人工智能·langchain·llm
灰化肥发挥2 小时前
韩国草药制剂数据查询:如何获取MFDS注册数据与韩国药典标准?
大数据·人工智能·医药数据库
小王毕业啦2 小时前
2010-2023年 地级市-破产法庭设立数据(+文献)
大数据·人工智能·数据挖掘·数据分析·社科数据·经管数据·破产法庭
一只川页2 小时前
从“对话”到“实干”:大模型应用架构演进全景解析
人工智能·架构
雷焰财经2 小时前
从系统承建到生态赋能:宇信科技全球化战略的纵深与逻辑
大数据·人工智能·科技
阿_旭2 小时前
基于YOLO26深度学习的风力机缺陷检测与语音提示系统【python源码+Pyqt5界面+数据集+训练代码】
人工智能·python·深度学习·风力机缺陷检测
阿蒙Amon2 小时前
C#常用类库-详解AutoMapper
开发语言·c#