














文档版本: v1.0
创建日期: 2026-03-12
设计原则: 抽象接口与实现完全分离
目标: 构建通用、可扩展、易测试的多Agent框架
本文档是MAF框架的架构设计概览,提供核心架构、设计原则和技术选型的快速了解。
详细专题文档:
MAF框架严格遵循SOLID原则:
| 原则 | 说明 | MAF中的应用 |
|---|---|---|
| 单一职责 (SRP) | 每个类只负责一件事 | IMafAgent只负责执行任务ITaskDecomposer只负责任务分解 |
| 开闭原则 (OCP) | 对扩展开放,对修改关闭 | 新增Agent无需修改框架 新功能通过接口扩展 |
| 里氏替换 (LSP) | 子类可替换父类 | MafAgentBase可被任何Agent替换 |
| 接口隔离 (ISP) | 接口精简,按需实现 | IMafMainAgent扩展IMafAgentIMafAgentLifecycle独立生命周期 |
| 依赖倒置 (DIP) | 依赖抽象而非具体 | 实现层依赖抽象接口 高层不依赖低层 |
┌─────────────────────────────────────┐
│ 应用层 │ 智能家居、设备控制、客服 │
├─────────────────────────────────────┤
│ 实现层 │ Agent实现、服务实现 │
├─────────────────────────────────────┤
│ 抽象层 │ 接口定义、模型定义 │
├─────────────────────────────────────┤
│ 基础设施层 │ LLM、数据库、消息队列 │
└─────────────────────────────────────┘
依赖方向: 应用层 → 实现层 → 抽象层 → 基础设施层
graph TB User[用户输入] --> MainAgent[MainAgent<br/>主控代理] MainAgent --> Intent[意图识别] MainAgent --> Decompose[任务分解] MainAgent --> Match[Agent匹配] MainAgent --> Orchestrate[任务编排] MainAgent --> Aggregate[结果聚合] MainAgent --> Sub1[LightingAgent] MainAgent --> Sub2[ClimateAgent] MainAgent --> Sub3[MusicAgent] Sub1 --> Device1[智能设备] Sub2 --> Device2[智能设备] Sub3 --> Device3[智能设备] style MainAgent fill:#fff4e1 style Sub1 fill:#e1f5ff style Sub2 fill:#e1f5ff style Sub3 fill:#e1f5ff
职责划分:
| 层级 | 存储 | TTL | 延迟 | 用途 |
|---|---|---|---|---|
| L1 | 内存缓存 | 会话期间 | <1ms | 热数据、高频访问 |
| L2 | Redis | 1小时 | ~0.3ms | 会话数据、共享缓存 |
| L3 | PostgreSQL | 永久(30天归档) | ~10ms | 审计日志、历史数据 |
框架:
- .NET 10
- ABP Framework
LLM:
首选: 智谱AI (GLM-4/4-Plus)
备选: 通义千问、文心一言
数据库:
关系型: PostgreSQL 16
缓存: Redis 7
向量: Milvus
消息队列:
- RabbitMQ / Redis Streams
测试:
- xUnit
- Moq
- FluentAssertions
框架:
首选: Blazor Server
备选: Blazor WebAssembly
UI库:
- MudBlazor (Material Design)
实时通信:
- SignalR (内置)
图表:
- Plotly.Blazor
classDiagram class Conversation { +string ConversationId +string UserId +List~MainTask~ MainTasks +ConversationStatus Status } class MainTask { +string TaskId +string UserInput +MainTaskStatus Status +List~SubTask~ SubTasks } class SubTask { +string SubTaskId +string Intent +SubTaskStatus Status +string AgentId } class AgentSession { +string SessionId +string AgentId +List~MessageContext~ Context } Conversation "1" --> "*" MainTask MainTask "1" --> "*" SubTask AgentSession --> SubTask
Submitted → Decomposing → Dispatching → Aggregating → Completed/Failed
Pending → Ready → Running → Completed/Failed/Timeout
↓ ↓
Cancelled InputRequired → Waiting
多维评分系统 (0-100分):
优先级等级:
场景1:晨间例程
用户输入: "我起床了"
↓
任务分解:
1. 打开客厅灯 (High, 45分)
2. 设置空调26度 (Normal, 25分)
3. 播放轻音乐 (Normal, 20分, 依赖任务1)
4. 打开窗帘 (Low, 10分)
↓
执行计划:
第一组(并行): 任务1
第二组(并行): 任务2, 任务3
第三组(并行): 任务4
场景2:紧急停止
用户输入: "紧急停止"
↓
关键任务 (Critical, 50分):
- 立即中断所有任务
- 独占资源
- 5秒超时
| 场景 | Agent数 | 任务数 | 依赖关系 | 执行策略 |
|---|---|---|---|---|
| 简单控制 | 1 | 1-2 | 无 | 串行 |
| 场景模式 | 4-6 | 4-8 | 简单 | 混合 |
| 长对话 | 多个 | 10+ | 复杂 | 混合 |
# 1. 克隆仓库
git clone https://github.com/your-org/maf-framework.git
# 2. 启动基础服务
docker-compose up -d redis postgres milvus
# 3. 配置环境变量
cp appsettings.Development.json.example appsettings.Development.json
# 4. 运行应用
dotnet run --project src/MafApplication
// 1. 创建MainAgent
var mainAgent = serviceProvider.GetRequiredService<IMafMainAgent>();
// 2. 处理用户输入
var request = new MafTaskRequest
{
TaskId = Guid.NewGuid().ToString(),
UserInput = "我起床了",
ConversationId = conversationId
};
var response = await mainAgent.ExecuteAsync(request);
// 3. 检查结果
if (response.Success)
{
Console.WriteLine($"成功: {response.Result}");
}
else
{
Console.WriteLine($"失败: {response.Error}");
}
| 角色 | 推荐阅读路径 |
|---|---|
| 架构师 | 本文档 → 接口设计规范 → 任务调度系统 → 架构图表集 |
| 后端开发 | 本文档 → 接口设计规范 → 实现指南 → 部署指南 |
| 前端开发 | 本文档 → UI设计规范 → 架构图表集 |
| 测试工程师 | 本文档 → 实现指南 → 测试指南 |
| 运维工程师 | 本文档 → 部署指南 → 架构图表集 |
第1周: 理解核心架构
第2周: 深入接口设计
第3周: 实践编码
第4周: 部署上线
| 特性 | MAF | LangGraph | AutoGen |
|---|---|---|---|
| 命名空间 | MAF前缀,无冲突 | 可能冲突 | 可能冲突 |
| 语言 | C#/.NET | Python | Python/多语言 |
| 执行策略 | 弹性(自动选择) | 图状态机 | 对话式 |
| 存储架构 | 三层存储 | 单层 | 单层 |
| 多轮对话 | 完整支持 | 有限 | 有限 |
| 生产就绪 | 是 | 部分是 | 部分是 |
// 1. 继承MafAgentBase
public class MyCustomAgent : MafAgentBase
{
public override string AgentId => "mydomain:custom:agent";
public override string Name => "我的自定义Agent";
public override IReadOnlyList<string> Capabilities =>
new List<string> { "MyDomain:Custom:Action" };
protected override async Task<ExecutionResult> ExecuteBusinessLogicAsync(
MafTaskRequest request,
CancellationToken ct)
{
// 实现业务逻辑
return new ExecutionResult { Success = true };
}
}
// 2. 注册到DI
services.AddSingleton<IMafAgent, MyCustomAgent>();
MAF自动管理长对话上下文:
| 术语 | 定义 |
|---|---|
| MAF | Multi-Agent Framework(多代理框架) |
| MainAgent | 主控Agent,负责意图识别、任务分解、Agent编排 |
| SubAgent | 子Agent,负责特定领域的具体任务 |
| Conversation | 用户与系统的完整对话上下文 |
| MainTask | 用户单次请求的完整处理过程 |
| SubTask | 委托给SubAgent的独立执行单元 |
| AgentSession | SubAgent的LLM上下文,会话期间维护 |
文档版本: v1.0
最后更新: 2026-03-12
维护团队: MAF架构团队
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。