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