探索 Microsoft Agent Framework:构建你的第一个 AI Agent(入门篇)
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的炼丹房

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