2025-12-25 20:27:37
摘要:一、AG-UI 协议概览
1. 为什么需要 AG-UI
随着 AI Agent 技术的发展,传统的 Web 应用交互模式面临新的挑战。AI Agent 的响应具有以下特点:
flowchart LR
subgraph 传统API
A1[请求] --> B1[处理] --> C1[响应]
end
subgraph AI Agent
A2[请求] --> B2[思考...]
B2 --> C2[工具调用]
C2 --> D2[中间结果]
D2 --> E2[继续思考...]
E2 --> F2[流式输出]
F2 --> G2[最终响应]
end
style A1 fill:#e1f5ff
style C1 fill:#e1f5ff
style A2 fill:#ffe1e1
style G2 fill:#ffe1e1
在构建 AI Agent 应用界面时,传统 API 模式面临诸多挑战:
问题
传统 API
AI Agent 需求
影响
响应模式
请求/响应(阻塞等待)
流式实时响应
用户体验差,等待时间长
中间过程
无法展示
需要可视化思考/工具调用
用户无法理解 Agent 行为
状态同步
单次请求完成
需要持续状态同步
复杂 UI 状态管理困难
交互模式
确定性 UI
非确定性(Agent 决定 UI)
难以提前规划界面
长时间任务
超时问题
需要进度反馈
无法处理复杂任务
AG-UI (Agent User Interaction Protocol) 专为 AI Agent 与用户界面的交互而设计:
flowchart TB
subgraph AG-UI协议
direction LR
Streaming[流式响应]
Events[事件系统]
State[状态同步]
Tools[工具可视化]
end
UI[用户界面] -->|AG-UI 协议| AG-UI协议
AG-UI协议 -->|实时交互| Agent[A……
阅读全文
2025-12-13 16:03:39
摘要:一、A2A 协议
1. 为什么需要 A2A 协议?
随着 AI 技术的发展,企业中的 AI Agent 数量不断增加。这些 Agent 可能来自不同的团队、不同的技术栈,甚至不同的组织:
flowchart LR
subgraph 企业A
A1[客服 Agent]
A2[销售 Agent]
end
subgraph 企业B
B1[物流 Agent]
B2[库存 Agent]
end
subgraph 第三方服务
C1[支付 Agent]
C2[天气 Agent]
end
A1 -.->|如何通信?| B1
A2 -.->|如何协作?| C1
B2 -.->|如何发现?| C2
style A1 fill:#e1f5ff
style A2 fill:#e1f5ff
style B1 fill:#ffe1e1
style B2 fill:#ffe1e1
style C1 fill:#e1ffe1
style C2 fill:#e1ffe1
在没有标准协议的情况下,Agent 之间的互联面临诸多挑战:
问题
描述
影响
协议不统一
每个 Agent 使用不同的 API 格式
集成成本高,难以扩展
发现困难
无法自动发现其他 Agent 的能力
需要人工配置,耦合度高
状态不透明
无法追踪跨 Agent 任务的执行状态
调试困难,可靠性差
安全性参差
缺乏统一的认证授权机制
安全风险高
Agent-to-Agent (A2A) Protocol 提供了一套标准化的解决方案,核心价值:
统一发现机制:通过 Agent Card 声明和发现能力
标准化通信:基于 JSON-RPC 2.0 的统一消息格式
任务生命周期:完整的任务状态管理和追踪
流式支持:SSE 实时事件推送
安全机制:内置认证和授权方案
2. 什么是 A2A 协议?
Agent-to-Agent (A2A) Protocol 是由 Google 发起并开源的一个开放协议,旨在实现 AI Agent 之间的标准化通信与协……
阅读全文
2025-12-06 15:07:16
摘要:一、自定义工作流事件
1. 为什么需要自定义事件?
场景
内置事件
自定义事件
粒度
Executor 级别
业务逻辑级别
语义
系统通用 (调用、完成)
业务特定 (审核通过、风险预警)
数据
执行元数据
业务数据 (敏感词、风险分数)
监控
技术监控
业务监控 + 审计
前端
通用进度条
具体业务状态展示
2. 自定义事件类定义
基本定义模式:自定义事件本质上就是继承 WorkflowEvent 的普通 C# 类。让我们从最简单的开始:
/// summary
/// 表示检测到敏感词的事件
/// /summary
public class SensitiveWordDetectedEvent : WorkflowEvent
{
public SensitiveWordDetectedEvent(string word, int position) : base(data: null) // 可以传递简单数据到 base
{
Word = word;
Position = position;
}
public string Word { get; }
public int Position { get; }
}
设计原则
DO (推荐做法):
类名以 Event 结尾,语义清晰
使用只读属性 ({ get; }),确保事件不可变
添加 XML 注释说明事件的业务含义
属性类型尽量简单(string, int, DateTime 等可序列化类型)
DON'T (避免做法):
不要在事件类中包含方法逻辑
不要引用不可序列化的对象(如 DbContext, HttpClient)
不要使用可变属性({ get; set; })
不要在构造函数中执行耗时操作
3. 携带复杂数据的事件
当需要传递更复杂的业务数据时,有两种设计模式:
模式 1: 使用属性传递结构化数据
/// summary
/// 风险评估完成事件
/// /summary
public class RiskAssessmentCompletedEvent : WorkflowEvent
{
public RiskAssessmentCom……
阅读全文