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……
阅读全文
2025-11-29 19:00:55
摘要:一、快速开始
1. 什么是 Workflow Orchestration
在企业级 AI 应用开发中,我们经常面临以下挑战:
单个 Agent 难以处理复杂任务:一个 Agent 无法同时擅长需求分析、代码生成、测试等多个领域
业务逻辑与 AI 调用耦合:复杂的条件判断、循环、并发控制分散在代码各处
流程难以可视化和维护:多步骤的 AI 处理流程缺乏清晰的结构
缺乏统一的状态管理:多个步骤之间的数据传递和状态共享容易出错
Workflow Orchestration (工作流编排) 正是为了解决这些问题而生:
模块化设计:将复杂任务拆分为独立的 Executor 和 Agent
清晰的流程定义:使用 Builder API 构建可读、可维护的流程图
灵活的流程控制:支持条件分支、循环迭代、并发执行等复杂模式
统一的状态管理:内置 WorkflowContext 管理跨步骤的状态和数据
实时流式反馈:通过事件机制实时监控工作流的执行进度
MAF Workflow 位于应用层和 Agent 层之间,负责:
编排多个 Agent:决定 Agent 的执行顺序、条件和并发策略
管理数据流:在 Agent 和 Executor 之间传递数据
监控执行状态:实时报告工作流的执行进度和结果
错误处理:统一处理执行过程中的异常和重试逻辑
2. 第一个工作流:文本处理管道
业务场景:将用户输入的文本 → 转为大写 → 反转顺序
步骤 1:定义第一个 Executor - 大写转换。
继承 ExecutorTInput, TOutput:
TInput = string:接收字符串输入
TOutput = string:返回字符串输出
构造函数传入 UppercaseExecutor 作为唯一标识符
实现 HandleAsync 方法:
message:接收上一个步骤传递的数据 (对于第一个 Executor,是工作流的输入)
context:工作流上下文,用于访问共享状态、发布事件等 (后续课程详解)
cancellationToken:用于取消操作
返回值:会自动作为消息沿着 Edge 传递给下一个 Executor
业务逻辑:
使用 ToUpperInvariant() 进行文化无关的大写转换
返回 ValueTask (高性能异……
阅读全文
2025-11-22 18:21:43
摘要:一、核心概念
1. Executor(执行器)
Executor(执行器) 是 Workflow 中的最小工作单元,类似于:
类比
说明
工厂里的工人
每个工人负责一道工序
乐高积木块
每个积木有特定功能,组合成整体
电路中的元件
接收输入信号,输出处理结果
flowchart LR
Input[输入消息] --> Executor[Executor\n执行器]
Executor --> Output[输出消息]
style Executor fill:#4CAF50,color:white
Executor 的核心特征
唯一标识(Id):每个 Executor 有一个唯一的 ID,用于在 Workflow 中引用
消息处理:接收特定类型的输入消息,处理后产生输出消息
路由配置:通过 ConfigureRoutes 方法定义能处理哪些类型的消息
状态感知:可以通过 IWorkflowContext 访问和修改工作流状态
Executor 的类型层次:MAF 提供了多种 Executor 类型,满足不同场景需求
classDiagram
class Executor {
+string Id
+ExecuteAsync()
#ConfigureRoutes()
}
class Executor~TInput~ {
+HandleAsync(TInput)
}
class Executor~TInput,TOutput~ {
+HandleAsync(TInput) TOutput
}
class FunctionExecutor~TInput~ {
+委托函数处理
}
class FunctionExecutor~TInput,TOutput~ {
+委托函数处理
}
class StatefulExecutor~TState~ {
+TState State
+ReadStateAsync()
……
阅读全文
2025-11-15 21:29:53
摘要:一、自定义 Agent 的实现
1. 场景分析
在大多数场景下,使用 chatClient.CreateAIAgent() 创建的标准 Agent 已经足够强大。但在某些特殊场景下,自定义 Agent 实现能带来更大的价值:
场景 1:规则引擎替代 AI(成本优化)
问题:客服系统每天处理数万次重复性问题(营业时间?,退货流程?),每次调用 AI 模型都会产生成本。
解决方案:自定义 Agent 使用 FAQ 知识库进行关键词匹配,只在无法匹配时才调用 AI。
收益:
成本降低 70-90%(高频简单问题零成本)
响应速度提升 10 倍(无需等待 AI 推理)
答案一致性更高(预定义标准答案)
场景 2:遗留系统集成(ERP/CRM/工作流引擎)
问题:企业内部有成熟的审批工作流引擎,需要将其包装为 Agent 供统一调度。
解决方案:自定义 Agent 作为适配器,将工作流引擎的 API 转换为 Agent 接口。
收益:
无缝集成现有系统(无需重构)
复用企业级规则引擎(审批、权限、流程)
数据安全可控(不发送敏感数据到外部 AI)
场景 3:测试模拟(Mock Agent)
问题:开发和测试环境中,不希望调用真实 AI 模型(成本、稳定性、可预测性)。
解决方案:自定义 Agent 返回固定或可配置的测试数据。
收益:
单元测试更可靠(确定性输出)
开发环境零成本
CI/CD 管道更快(无需等待 AI 响应)
场景 4:混合模式(规则 + AI)
问题:希望结合规则引擎的确定性和 AI 的灵活性。
解决方案:自定义 Agent 先尝试规则匹配,失败后转发给 AI Agent。
收益:
平衡成本与效果
灵活的分流策略(按优先级、置信度)
逐步优化规则库(分析 AI 处理的高频问题)
对比: 标准 Agent vs 自定义 Agent
特性
ChatClientAgent(标准)
自定义 Agent
说明
创建方式
chatClient.CreateAIAgent()
继承 AIAgent 抽象类
标准方式更简单
开发复杂度
低
高
自定义需实现所有核心方法
灵活性
受限于 IChatClient 能力
完全可控
自定义可实现任意逻辑
成本
按 Token 计费……
阅读全文
2025-11-08 18:11:37
摘要:一、自定义文件消息存储
1. ChatMessageStore 架构概览
classDiagram
class ChatMessageStore {
abstract>>
#IChatReducer? ChatReducer
+AddMessagesAsync(messages)
+GetMessagesAsync()
+ClearAsync()
+Serialize()
+Deserialize(state)
}
class InMemoryChatMessageStore {
-List~ChatMessage~ _messages
+AddMessagesAsync()
+GetMessagesAsync()
+ClearAsync()
}
class FileChatMessageStore {
-string _filePath
-SemaphoreSlim _lock
+AddMessagesAsync()
+GetMessagesAsync()
+ClearAsync()
}
class RedisChatMessageStore {
-IConnectionMultiplexer _redis
+AddMessagesAsync()
+GetMessagesAsync()
+ClearAsync()
}
ChatMessageStore |-- InMemoryChatMessageStore
ChatMessageStore |-- FileChatMessageStore
ChatMessageStore |-- RedisChatMessageStore
ChatMessageStore 抽象类核心方法职责
方法
职责
使用场景
AddMessagesAsync
添加新消……
阅读全文
2025-11-01 21:04:55
摘要:一、第一个智能体
1. 什么是 MAF
Microsoft Agent Framework (MAF) 是微软推出的企业级 AI Agent 开发框架,构建在 Microsoft.Extensions.AI (MEAI) 之上,提供了构建生产级 AI Agent 所需的完整能力。
flowchart TB
subgraph "应用层"
A[你的应用]
end
subgraph "Agent 框架层"
B[Microsoft Agent Framework]
end
subgraph "AI 抽象层"
C[Microsoft.Extensions.AIbr/>IChatClient]
end
subgraph "AI 服务层"
D1[Azure OpenAI]
D2[OpenAI]
D3[DeepSeek]
D4[其他模型]
end
A --> B
B --> C
C --> D1
C --> D2
C --> D3
C --> D4
style B fill:#4CAF50,stroke:#2E7D32,stroke-width:3px,color:#fff
style C fill:#2196F3,stroke:#1565C0,stroke-width:2px,color:#fff
Agent vs ChatClient - 什么时候用 Agent?
特性
IChatClient
AIAgent
定位
底层 AI 调用抽象
高级智能体封装
状态管理
无状态,每次调用独立
内置对话线程 (AgentThread)
身份定义
需要手动在每次调用中传入 System Message
固定的 Instructions 和 Name
工具管理
需要手动配置 ChatOptions.Tools
Agent 级别统一管理工具
使用场景
构建自定义 AI 功能,单次对话场景
企业级对话系统,多轮交互场景
简单来说:
ChatClient 就像一个纯函数……
阅读全文
2025-10-25 18:15:33
摘要:一、自定义传输协议
我们已经知道 MCP 的 Stdio 和 HTTP 传输协议了,今天我们深入探索一下 InMemory Transport(进程内传输)的实现原理,以及如何创建自定义传输协议。InMemory Transport 特别适合单进程内的 MCP 通信、单元测试和高性能场景。
1. InMemory Transport 原理
InMemory Transport 是一种在单进程内实现 MCP Client 和 Server 通信的传输方式。它使用内存中的数据结构(如 Pipe、Channel)进行消息传递,避免了跨进程通信的开销。
主要优势:
高性能:无需序列化到文件或网络,直接在内存中传递消息
易于测试:非常适合编写单元测试,不依赖外部进程或网络
同步控制:Client 和 Server 在同一进程,便于调试和状态管理
零依赖:不需要启动外部进程或监听端口
实现原理:InMemory Transport 基于 Pipe(管道)实现双向通信:
创建两个 Pipe:
clientToServerPipe:Client → Server 方向
serverToClientPipe:Server → Client 方向
连接读写端:
Client 写入 clientToServerPipe.Writer,Server 读取 clientToServerPipe.Reader
Server 写入 serverToClientPipe.Writer,Client 读取 serverToClientPipe.Reader
消息序列化:
使用 JSON-RPC 格式序列化消息
每条消息以换行符 \n 分隔
sequenceDiagram
participant C as McpClient
participant CTP as clientToServerPipe
participant STP as serverToClientPipe
participant S as McpServer
Note over C,S: 初始化连接
C->>CTP: Write (Request)
CTP->>S: Read (Request)
S->>STP: Wr……
阅读全文
2025-10-18 14:05:37
摘要:一、MCP 协议基础
1. 协议概述
MCP 是一个基于 JSON-RPC 2.0 的应用层协议,专为 AI 应用程序设计。它定义了:
标准化消息格式:统一的请求/响应/通知结构
能力协商机制:Client 和 Server 协商支持的功能
双向通信:支持请求-响应和异步通知
错误处理:标准化的错误代码和异常处理
MCP 协议栈
MCP 协议建立在 JSON-RPC 2.0 之上,提供了额外的语义和约定:
┌─────────────────────────────────────────┐
│ AI Application Layer │ ← 使用 MCP 的应用
├─────────────────────────────────────────┤
│ MCP Protocol Layer (Application) │ ← MCP 协议语义
│ (Tools, Resources, Prompts, etc.) │
├─────────────────────────────────────────┤
│ JSON-RPC 2.0 Layer │ ← 基础 RPC 协议
├─────────────────────────────────────────┤
│ Transport Layer (Stdio/HTTP) │ ← 传输机制
└─────────────────────────────────────────┘
核心设计原则
原则
说明
示例
标准化
统一的协议格式
所有工具调用使用 tools/call 方法
协商式
能力协商机制
Client 和 Server 协商支持的功能
双向通信
支持请求和通知
Server 可以主动发送日志通知
类型安全
JSON Schema 验证
参数和返回值都有明确的类型定义
可扩展
支持自定义扩展
可以添加自定义 Capabilities
MCP vs 其他协议
协议
用途
MCP 的优势
REST API
通用 Web 服务
MCP 专为 AI 上下文设计,支持工具发现和类型安全
gRPC
高性能 RPC
MCP ……
阅读全文