Microsoft Agent Framework(简称 MAF)是微软推出的一款用于构建 AI 应用程序的强大工具。它支持 C# 和 Python两种语言使用,当然,尤其适合 .NET 技术栈的开发者,帮助我们快速集成大语言模型(LLM)并构建智能 Agent。本文将带你从零开始,逐步了解如何使用 MF 创建自己的第一个 Agent,并实现文字对话、图片理解、多轮交互以及会话持久化等功能。

为什么现在开始学习 MAF?

MAF 已经发布数月,早期版本变动较快,但如今大部分功能已趋于稳定。尽管目前仍处于预览阶段(版本号 RC2),但其核心设计已经确定,非常适合开发者学习和实验。未来若有破坏性更新,官方文档及社区会及时同步,本文内容也将尽量保持与最新版本一致。

什么是 Microsoft Agent Framework?

MAF 主要包含两大核心概念:

Agent:与大语言模型交互的基本单元。你可以通过 Agent 发送消息、接收回复,并配置提示词、模型参数等。

Workflow:工作流,用于将多个 Agent 或其他算子组合成复杂的处理流程,实现更高级的 AI 应用。本文聚焦于 Agent,Workflow 将在后续文章中介绍。

MAF 基于 .NET 的抽象接口(如 Microsoft.Extensions.AI),可以轻松接入 OpenAI、Azure OpenAI、Claude 等主流模型。本文将使用 Azure OpenAI 作为示例,你也可以根据实际需求替换为其他模型。

环境准备

在开始编码前,需要安装以下 NuGet 包。打开终端并执行:

dotnet add package Azure.AI.OpenAI --prerelease
dotnet add package Azure.Identity
dotnet add package Microsoft.Agents.AI.OpenAI --prerelease

创建第一个 Agent

以下代码演示了如何创建一个使用 Azure OpenAI 的 Agent。它通过 Azure CLI 进行身份认证(无需手动管理 API Key),并设置系统提示词和 Agent 名称。

(使用az login登陆)

using Azure.AI.OpenAI;
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
using OpenAI.Chat;
// 从环境变量读取终结点,并使用 Azure CLI 凭证
var endpoint = new Uri(Environment.GetEnvironmentVariable("AZURE_AI_ENDPOINT"));
var credential = new Azure.Identity.AzureCliCredential();
// 获取聊天客户端(使用 gpt-4o 模型)
var chatClient = new AzureOpenAIClient(endpoint, credential)
    .GetChatClient("gpt-4o");
// 将聊天客户端包装为 Agent,并配置系统提示词和名称
AIAgent ai = chatClient.AsAIAgent(
    instructions: "你是一个充满宇宙诗意的AI助手,会很有想象力、诗意地回答用户的问题。",
    name: "Cosmos AI"
);

如果未安装 Azure CLI 或希望使用 API Key,可以改用以下方式:

​​​​​​​

var chatClient = new AzureOpenAIClient(new Uri(endpoint), new ApiKeyCredential(apiKey))
    .GetChatClient("gpt-4o")
    .AsAIAgent();

与 Agent 进行文字对话

创建 Agent 后,可以通过 RunAsync 方法发送消息并获取回复:​​​​​​​

var result = await ai.RunAsync("What is Microsoft Agent Framework?");
Console.WriteLine(result.Text);

若希望实现流式输出(逐字显示),可使用 RunStreamingAsync:​​​​​​​

var stream = ai.RunStreamingAsync("What is Microsoft Agent Framework?");
await foreach (var item in stream)
{
    Console.Write(item.Text);
}
Console.WriteLine();

流式输出能提供更接近平常使用的用户体验,可根据实际场景选择。

用图片与 Agent 交流

对于支持多模态的模型(如 GPT-4o),你可以发送图片给 Agent。只需构造一个包含文字和图片 URL 的 ChatMessage 列表:

var messages = new Microsoft.Extensions.AI.ChatMessage(ChatRole.User, new List<AIContent>
{
    new TextContent("这张图片是什么?"),
    new UriContent(new Uri("https://example.com/microsoft-logo.jpg"), "image/jpeg")
});
result = await ai.RunAsync([messages]);
Console.WriteLine(result.Text);

图片 URL 需为公开可访问地址。示例中通过 UriContent 传递图片链接。

实现多轮连续对话

要实现连续对话,MF 提供了 CreateSessionAsync 方法,它会自动维护会话历史,无需手动拼接上下文。

// 创建会话
var session = await ai.CreateSessionAsync();
// 第一次提问
Console.WriteLine(await ai.RunAsync("791 + 197 = ?", session));
// 第二次提问(自动带上历史上下文)
Console.WriteLine(await ai.RunAsync("then add 555 = ?", session));
输出示例:

******988******
******1543*****

可以看到,Agent 在第二次提问时正确记住了前一次的结果,并在此基础上继续计算。会话对象会自动处理历史消息的传递。

持久化对话:保存和加载会话

在某些场景下,我们需要将对话保存下来,以便后续恢复使用。MF 提供了序列化和反序列化会话的功能。

// 序列化当前会话
var serializedSession = await ai.SerializeSessionAsync(session);
Console.WriteLine(serializedSession); // 可将其保存到本地文件
// 创建新的 Agent 实例
AIAgent ai2 = new AzureOpenAIClient(endpoint, credential)
    .GetChatClient("gpt-4o")
    .AsAIAgent("你是一个充满宇宙诗意的AI助手", "Cosmos AI");
// 反序列化,恢复之前的会话
var restoredSession = await ai2.DeserializeSessionAsync(serializedSession);
// 继续对话
Console.WriteLine(await ai2.RunAsync("then add 777 = ?", restoredSession));
// 输出:2320

这样,即使程序重启,也能从之前中断的地方继续与 Agent 对话,非常适合需要长期交互的应用。

总结

通过本文,你已掌握了 Microsoft Agent Framework 的基础用法:

安装和配置环境

  • 创建基于 Azure OpenAI 的 Agent

  • 进行同步和流式文字对话

  • 发送图片实现多模态交互

  • 使用会话机制管理多轮对话

  • 序列化和反序列化会话以实现持久化

这仅仅是 Agent 的入门。在后续文章中,我们将深入探讨 Tools(工具调用)、Skills(技能) 以及 Workflow(工作流) 等高级特性,帮助你构建更强大的 AI 应用。

学会了吗?学会了

Github Demo: 文章代码

Bilibili: @无聊的年

微信公众号: @scixing的炼丹房

https://www.bilibili.com/video/BV1kGAfzFEnD/?spm_id_from=333.1387.upload.video_card.clickhttps://www.bilibili.com/video/BV1kGAfzFEnD/?spm_id_from=333.1387.upload.video_card.click

图片

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐