Spiga

2025年11月的文章归档

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