Spiga

分类为读书笔记的文章

Net+AI智能体12:AG-UI解决交互之痛

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…… 阅读全文

Net+AI智能体11:A2A多智能体协作

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 之间的标准化通信与协…… 阅读全文

Net+AI智能体10:Workflow进阶扩展

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…… 阅读全文

Net+AI智能体9:Workflow基础篇

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 (高性能异…… 阅读全文

Net+AI智能体8:Workflow概念篇

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() …… 阅读全文

Net+AI智能体7:自定义Agent

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 计费…… 阅读全文

Net+AI智能体6:Agent进阶扩展

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 添加新消…… 阅读全文

Net+AI智能体5:Agent智能体

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 就像一个纯函数…… 阅读全文

Net+AI智能体4:MCP进阶扩展

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…… 阅读全文

Net+AI智能体3:MCP大模型外挂商店

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 …… 阅读全文