当前位置: 首页 > 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.jsqmd.com/news/583176/

相关文章:

  • 【AI工具】openclaw+离线模型
  • 3步打造专业演示文稿:面向创作者的开源PPT工具全攻略
  • 微信智能检测与社交管理:高效维护社交关系的技术方案
  • 免死金牌: OpenClaw + keepalived
  • 2025届学术党必备的十大降重复率平台推荐榜单
  • 《新班主任》期刊简介及影响力
  • 读取Excel数据(替换your_data.xlsx即可)
  • 递推限幅消抖数字滤波函数的实现(C 语言,嵌入式 / Keil 通用)
  • 【热搜爆了】格行3.0代理模式席卷全网!主播日入过万的合规带货新选择! - 格行官方招商总部
  • 2026跨境电商数据采集避坑指南:实测实在Agent如何终结“数字员工”的幻觉时代
  • 丧尸危机模拟:灾备系统的终极压力测试
  • 【枕上节令笺】清明食青团,一口咬尽江南春
  • 联合索引设计:最左前缀、选择性、覆盖索引与落地方法
  • 【软件部署】在docker环境部署vsftpd
  • 2.4.快速排序——先分区再递归,为什么它平均这么快却可能退化?
  • Applite终极指南:如何在3分钟内掌握Mac软件管理
  • Android上部署Linux环境的方案总结对比
  • OpenClaw安装部署Mac操作系统版 - 打造你的专属AI助理
  • 越用越好用:OpenClaw的进化型Agent
  • Sprague-Grundy (SG) 函数及其应用
  • 多车环境下车载毫米波雷达是否会相互干扰?
  • 【深伪检测】论文整体调研与梳理方法
  • 战争环境软件测试:乌克兰开发者的生存报告
  • 2025-2026年靠谱移民机构评测:五家口碑服务推荐评价顶尖 - 十大品牌推荐
  • **Compose原理深度剖析:从声明式UI到高效渲染的核心机制**在现代Android开发中
  • 【Linux】关于 mmap 文件映射
  • 贵州公考面试选机构
  • An-Labeler:AudioLabellerV3 AI 辅助标注工具详解(自研Qt + FFT/模型自动标注)
  • SAP ABAP 根据表名上传数据,简易版
  • 2025届学术党必备的五大AI辅助写作平台实际效果