[](https://youtu.be/V6HpE9hZEx0?si=A7K44uMCqgvLQVCa)
> _(点击上方图片观看本课视频)_
# 多代理设计模式
一旦你开始从事涉及多个代理的项目,就需要考虑多代理设计模式。然而,何时切换到多代理以及其优势可能并不立即明了。
## 介绍
本课我们将解答以下问题:
- 多代理适用的场景有哪些?
- 使用多代理相比单一代理执行多任务有什么优势?
- 实现多代理设计模式的构建模块有哪些?
- 如何了解多个代理之间的交互情况?
## 学习目标
完成本课后,你应该能够:
- 识别适合多代理的场景
- 认识多代理相较于单一代理的优势
- 理解实现多代理设计模式的构建模块
更宏观的视角是:
*多代理是一种设计模式,允许多个代理协同工作以实现共同目标*。
该模式广泛应用于机器人学、自主系统和分布式计算等多个领域。
## 多代理适用场景
那么,什么场景适合使用多代理呢?答案是存在很多场景特别适合采用多代理,尤其是在以下情况:
- **大工作量**:大工作量可以拆分成更小任务,并分配给不同代理,实现并行处理,加快完成速度。比如大数据处理任务。
- **复杂任务**:复杂任务同样可拆分成更小子任务,分配给专注不同方面的多个代理。比如自动驾驶车辆中,不同代理负责导航、障碍物探测和车辆间通信。
- **多样专业知识**:不同代理可具备多样专业能力,从而比单一代理更有效地处理任务各个方面。比如医疗领域中,代理分别负责诊断、治疗方案和患者监护。
## 多代理相较于单一代理的优势
单一代理系统适合简单任务,对复杂任务则可通过多代理获得诸多优势:
- **专业化**:每个代理专注于特定任务。单一代理缺乏专业化,可能面对复杂任务时不知所措,甚至执行不适合自己的任务。
- **可扩展性**:通过增加代理更易扩展系统,避免单个代理过载。
- **容错性**:某个代理失败,其他代理可继续运行,确保系统可靠性。
举例说明:为用户预订旅行。单一代理需处理整个流程(查找航班、预订酒店和租车)。为此,这个代理必须具备处理所有任务的工具,导致系统复杂且难以维护、扩展。相反,多代理系统可分为查找航班、预订酒店、租车等多个专属代理,使系统模块化、易维护且具扩展性。
类似对比旅行社店铺:一个夫妻店里单个代理处理全部流程,而加盟连锁则由不同代理分别处理业务环节。
## 实现多代理设计模式的构建模块
实现多代理设计模式前,需要了解其构建模块。
依然以为用户预订旅行为例,这些构建模块包括:
- **代理通信**:查找航班、预订酒店、租车代理需沟通共享用户偏好和限制。需决定通信协议和方式。具体而言,查找航班代理需与预订酒店代理沟通,确保酒店预订和航班时间匹配。这意味着代理间需共享用户出行日期,需确定*哪些代理共享信息以及如何共享*。
- **协调机制**:代理间动作需协调,确保满足用户偏好和限制。例如用户偏好靠近机场的酒店,限制是租车只在机场可取。酒店预订代理需与租车代理协调满足这些条件,需决定*代理如何协调行动*。
- **代理架构**:代理应具备内部结构以决策并从用户交互中学习。例如查找航班代理应能决策推荐哪些航班,需决定*代理如何决策和学习*。举例,查找航班代理可借助机器学习模型,根据用户过往偏好推荐航班。
- **多个代理交互的可视性**:需具备工具和方法监控多个代理的活动和交互,如日志监控、可视化工具和性能指标。
- **多代理模式**:有多种多代理系统架构,如集中式、去中心化和混合架构。需选择最适合用例的模式。
- **人类介入**:大多数情况下存在人类介入,需要指示代理何时请求人工干预。例如用户要求特定酒店或航班,代理未推荐,或预订前须请求确认。
## 多代理交互的可视性
了解多个代理如何相互作用非常重要,此能力对调试、优化及确保系统整体有效性至关重要。为此,需具备追踪代理活动及交互的工具和技术,形式包括日志工具、监控工具、可视化工具和性能指标。
以用户预订旅行为例,可建仪表盘显示各代理状态、用户偏好和限制及代理间交互。仪表盘显示用户出行时间、航班代理推荐的航班、酒店代理推荐的酒店及租车代理推荐的车辆,清晰展现代理如何协作及是否达到用户需求。
进一步介绍相关方面:
- **日志和监控工具**:应为代理执行的每个动作建立日志。日志记录代理身份、动作内容、动作时间及结果。此信息用于调试和优化。
- **可视化工具**:帮助直观查看代理间交互。比如信息流图,有助识别瓶颈、低效或其它问题。
- **性能指标**:跟踪多代理系统效果。如任务完成时间、单位时间内完成任务数、代理推荐准确率等。这能帮助发现优化空间。
## 多代理模式
我们来探讨一些构建多代理应用的具体模式,包含以下有趣模式:
### 群聊
该模式适用于创建多个代理互相通信的群聊应用。典型应用包括团队协作、客户支持和社交网络。
每个代理代表群聊内的用户,代理间用消息协议交换信息。代理可向群聊发送消息、接收消息及回应其他代理。
该模式可用集中式架构实现,所有消息通过中央服务器中转,或用去中心化架构直接交换消息。

### 任务转接
该模式适合多个代理间转接任务的应用。
典型用例有客户支持、任务管理及工作流程自动化。
每个代理代表某个任务或工作流程步骤,代理根据预定义规则将任务转交给其他代理。

### 协同过滤
该模式适用于多个代理协作给用户推荐内容的应用。
为何需要多个代理协作,因各代理具备不同专长,可在推荐过程中贡献各自优势。
举例用户想买股票推荐,一个代理专家某行业;另一个代理精通技术分析;再一个代理擅长基本面分析。协作后可给用户提供更全面推荐。

## 场景:退款流程
考虑顾客申请产品退款的场景,流程中涉及多个代理。我们将代理分为退款流程专属代理和可在其它业务中使用的通用代理。
**退款流程专属代理**:
可能涉及的代理包括:
- **客户代理**:代表客户,负责发起退款流程。
- **卖家代理**:代表卖家,负责处理退款。
- **支付代理**:负责退款支付流程。
- **解决代理**:解决退款流程中出现的问题。
- **合规代理**:确保退款流程遵守法规和政策。
**通用代理**:
这些代理可被业务其他部分使用。
- **运输代理**:负责将产品退回卖家,可用于退款及普通产品运输。
- **反馈代理**:收集客户反馈,反馈可在任何时间非仅退款阶段。
- **升级代理**:负责将问题升级至更高级别支持,适用于任何需升级的流程。
- **通知代理**:在退款流程各阶段向客户发送通知。
- **分析代理**:分析退款相关数据。
- **审计代理**:审计退款流程确保正确执行。
- **报告代理**:生成退款流程报告。
- **知识代理**:维护退款相关知识库,也掌握业务其他领域信息。
- **安全代理**:保障退款流程安全。
- **质量代理**:确保退款流程质量。
以上列出了不少专属退款流程及通用代理,希望帮助你理解如何在多代理系统中选择合适代理。
## 作业
设计一个客户支持流程的多代理系统。识别流程中涉及的代理、它们的角色和职责,以及它们之间的交互。考虑客户支持专属代理及可用于业务其他部分的通用代理。
> 在阅读以下解决方案之前,请先思考,你可能需要比想象中更多的代理。
> TIP:考虑客户支持流程的不同阶段,也要考虑任何系统所需的代理。
## 解决方案
[解决方案](./solution/solution.md)
## 知识检测
问题:什么时候应该考虑使用多代理?
- [ ] A1:当你的工作量较小且任务简单时。
- [ ] A2:当你的工作量较大时。
- [ ] A3:当你的任务简单时。
[解决方案测验](./solution/solution-quiz.md)
## 总结
在本课程中,我们探讨了多代理设计模式,包括适用多代理的场景、使用多代理而非单一代理的优势、实现多代理设计模式的构建模块,以及如何了解多个代理之间的交互情况。
### 对多代理设计模式有更多疑问?
加入 [Microsoft Foundry Discord](https://aka.ms/ai-agents/discord) ,结识其他学习者,参加答疑时间,解答你的 AI 代理相关问题。
## 额外资源
- Microsoft 代理框架文档
- 代理设计模式
## 上一课
[规划设计](../07-planning-design/README.md)
## 下一课
[AI 代理中的元认知](../09-metacognition/README.md)
---
**免责声明**:
本文件使用 AI 翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们力求准确,但请注意,自动翻译可能包含错误或不准确之处。请以原始语言版本的文档为权威来源。对于重要信息,建议采用专业人工翻译。因使用本翻译而引起的任何误解或误释,我们不承担任何责任。