当前位置: 首页 > news >正文

用户智能体交互协议AG-UI(上)

三大Agent协议对比

我们之前已经学习了MCP 和 A2A两个重要的协议了,加上AG-UI,它们共同组成了Agent的三大通信协议体系。

不过,它们的定位各有侧重,并非非此即彼,而是协同使用,用形象的比喻来讲:

AG-UI 像是"客服窗口":

  • 用户与 Agent 之间的交互界面

  • 实时展示 Agent 的工作状态

  • 支持用户输入和反馈

MCP 像是"工具箱":

  • Agent 调用外部工具完成任务

  • 工具是被动的,等待调用

  • 扩展 Agent 的能力边界

A2A 像是"同事协作":

  • 多个 Agent 之间的任务分发

  • 每个 Agent 都是自主的

  • 可以互相委托和协作

在实际企业场景中,三大协议通常协同使用:

  • AG-UI:用户通过界面与主 Agent 交互

  • MCP:Agent 内部使用 MCP 调用工具

  • A2A:复杂任务委托给专家 Agent 处理

下图展示了三大协议的详细对比:

2 快速开始:AG-UI对话应用

AG-UI协议定义了清晰的架构组件,包括 Server、Client 和 Agent。

在MAF中提供了一个内置的AG-UI组件,我们可以非常方便地创建集成AG-UI的Agent应用。

接下来,我们就一步一步完成一个AG-UI对话应用涉及到的Server 和 Client。

AG-UI Server

首先,我们创建一个ASP.NET Web应用,安装以下NuGet包:

Microsoft.Agents.AI.Hosting.AGUI.AspNetCore Microsoft.Agents.AI.OpenAI Microsoft.Extensions.AI.OpenAI

然后,就是整个示例的核心部分,我们一块一块来说:

(1)创建应用并注册AG-UI服务

// Step0. Create WebApplication builder var builder = WebApplication.CreateBuilder(args); builder.Services.AddHttpClient().AddLogging(); // Step1. Register AG-UI services builder.Services.AddAGUI();

(2)创建一个AI Agent:

var app = builder.Build(); // Step2. Load Configuration var config = new ConfigurationBuilder() .AddJsonFile($"appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", optional: true, reloadOnChange: true) .Build(); var openAIProvider = config.GetSection("OpenAI").Get<OpenAIProvider>(); // Step3. Create one ChatClient var chatClient = new OpenAIClient( new ApiKeyCredential(openAIProvider.ApiKey), new OpenAIClientOptions { Endpoint = new Uri(openAIProvider.Endpoint) }) .GetChatClient(openAIProvider.ModelId) .AsIChatClient(); // Step4. Create one AI Agent var agent = chatClient.AsAIAgent( name: "AGUI-Assistant", instructions: "你是一个友好的AI助手,请使用中文回答用户的问题。"); Console.WriteLine("✅ AI Agent 创建成功");

(3)映射AGUI端点并启动应用:

// Step5. Mapping AG-UI Endpoints app.MapAGUI("/", agent); Console.WriteLine("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"); Console.WriteLine("🚀 AG-UI Server 已启动"); Console.WriteLine("📍 端点地址: https://localhost:8443/"); Console.WriteLine("💡 使用 Ctrl+C 停止服务"); Console.WriteLine("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"); app.Run();

可以看到,我们仅用一行代码 app.MapAGUI() 就启用了AG-UI协议,So Easy!

启动起来的效果如下图所示:

AG-UI Client

首先,我们创建一个控制台应用,安装以下NuGet包:

Microsoft.Agents.AI.AGUI Microsoft.Agents.AI

然后,我们创建AG-UI Client 和 AI Agent:

// Load Configuration var config = new ConfigurationBuilder() .AddJsonFile($"appsettings.json", optional: false, reloadOnChange: true) .Build(); var openAIProvider = config.GetSection("OpenAI").Get<OpenAIProvider>(); var serverEndpoint = config.GetValue<string>("AGUI_SERVER_URL") ?? "https://localhost:8443"; Console.WriteLine("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"); Console.WriteLine("🚀 AG-UI 客户端已启动"); Console.WriteLine($"📍 服务端地址: {serverEndpoint}"); Console.WriteLine("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"); // Step1. Create HTTP Client using HttpClient httpClient = new() { Timeout = TimeSpan.FromSeconds(60) }; // Step2. Create AG-UI Client var chatClient = new AGUIChatClient(httpClient, serverEndpoint); // Step3. Create AI Agent var agent = chatClient.AsAIAgent( name: "agui-client", description: "AG-UI Client Agent");

然后,准备开始对话:

// Step4. Prepare for Conversation var session = await agent.GetNewSessionAsync(); var messages = new List<ChatMessage>() { new ChatMessage(ChatRole.System, "你是一个友好的AI助手,使用中文回答用户的问题。") }; Console.WriteLine("💬 开始对话(输入 :q 或 quit 退出)\n"); while (true) { Console.Write("👤 用户: "); string? message = Console.ReadLine(); if (string.IsNullOrWhiteSpace(message)) continue; if (message is ":q" or "quit") break; // 添加用户消息 messages.Add(new ChatMessage(ChatRole.User, message)); // 流式接收响应 Console.Write("🤖 助手: "); await foreach (var update in agent.RunStreamingAsync(messages, session)) { foreach (AIContent content in update.Contents) { switch (content) { case TextContent textContent: Console.Write(textContent.Text); break; case UsageContent usageContent: Console.WriteLine($"\n[📊 Tokens: {usageContent.Details.TotalTokenCount}]"); break; default: Console.Write("Unknown content!"); break; } } } Console.WriteLine("\n"); } Console.WriteLine("👋 再见!"); Console.ReadKey();

最终的调试效果如下图所示:

可以看到,我们很容易就创建了一个用户友好的对话客户端,实时的流式响应也不需要我们写过多代码实现。

3 小结

http://www.cnnetsun.cn/news/1677098.html

相关文章:

  • 换个框架聊Kuikly:探秘轻量高性能动态化方案
  • 郭庆华 生物量产品 数据介绍及下载
  • 【文献速递】山西大学 ACS Nano :限域焦耳加热,让单原子催化剂实现工业化量产
  • Claude Code 源码设计分析
  • 基于深度学习的设备监控技术:从被动报警到主动预警的革新
  • 做对这三步,拥有一个聪明的智能问数与分析Agent
  • 2026数据治理解决方案(PPT文件)
  • 实时数仓与维表时态Join实战
  • 04 月 03 日 AI 每日参考:中外厂商密集发新模型,智元发布周将启
  • 2026届毕业生推荐的五大AI科研神器实测分析
  • Blender场景教程:秘密实验室
  • 如何彻底解决Mac滚动方向混乱:Scroll Reverser完整配置指南
  • 3.30作业
  • 剑指offer-14、链表中倒数第k个结点
  • 2026 Java后端面试“三剑客”:集合、JUC、Redis 高频考点解析
  • 【初中地生会考练习系统】一个类似驾考宝典的初中地理生物会考在线练习系统,支持题库管理、错题本、顺序练习、模拟考试等功能
  • 软件开发常见骗局有哪些?
  • 什么是数据标准管理?怎么进行数据标准管理?
  • 09_语义网之行业应用与企业实践
  • T113的Linux系统调试记录(二)T113 的Linux 编译过程详解
  • 全球辅助动力装置(APU):稳增6.0%,2032年剑指106.47亿美元
  • 我的 Nexent 实操手记:零代码搭建「旅行规划师」智能体
  • 2026届最火的降重复率工具实际效果
  • 我发现了一个超级好用快速生成er图的工具
  • 2026年计算机科学论文降AI工具推荐:代码说明和算法描述怎么处理
  • 从一次线上文件泄露事件说起:深度复盘KKFileView配置踩坑与最佳实践
  • 所有下载都一定要直接从个人服务器直接下载--------因为个人宽带的上传速度一点也不慢
  • python web框架streamlit
  • 告别模糊边界!用DeepLabv3+在Cityscapes数据集上实现像素级街景分割(附PyTorch实战代码)
  • 从‘正在加载’到‘用户体验’:用Qt QProgressDialog打造更友好的长时间任务交互(附模态/非模态选择指南)