微软Agent Framework
微软Agent Framework
MAF的分层架构:模块化的严谨设计
Microsoft Agent Framework 是一个开源开发工具包,用于生成适用于 .NET 和 Python 的 AI 代理 和 多代理工作流 。 它将 语义内核 和 AutoGen 项目的想法汇集在一起,并扩展了其优势,同时添加了新功能。 由同一团队构建,是今后构建 AI 代理的统一基础。
代理框架提供两个主要类别的功能:
AI 代理:使用 LLM 处理用户输入、调用工具和 MCP 服务器以执行作并生成响应的单个代理。 代理支持模型提供程序,包括 Azure OpenAI、OpenAI 和 Azure AI。
工作流:基于图形的工作流,用于连接多个代理和函数来执行复杂的多步骤任务。 工作流支持基于类型的路由、嵌套、检查点和人工循环方案的请求/响应模式。
该框架还提供基础构建基块,包括模型客户端(聊天完成和响应)、状态管理的代理线程、代理内存的上下文提供程序、用于截获代理作的中间件,以及用于工具集成的 MCP 客户端。 这些组件可让你灵活地构建交互式、可靠且安全的 AI 应用程序。
为什么是另一个代理框架?
语义内核 和 AutoGen 开创了 AI 代理和多代理业务流程的概念。 代理框架是同一团队创建的直接后续任务。 它将 AutoGen 的简单抽象与语义内核的企业级功能(例如基于线程的状态管理、类型安全、筛选器、遥测以及广泛的模型和嵌入支持)相结合,用于单代理模式和多代理模式。 除了合并这两者之外,Agent Framework 还引入了工作流,使开发人员能够显式控制多代理执行路径,以及一个可靠的状态管理系统,用于长时间运行和人机循环方案。 简言之,Agent Framework 是下一代语义内核和 AutoGen。
若要详细了解如何从语义内核或 AutoGen 迁移,请参阅 语义内核的迁移指南 和 AutoGen 的迁移指南。
语义内核和 AutoGen 都受益于开源社区,并且代理框架预期也是如此。 Microsoft代理框架欢迎贡献,并将不断改进新功能。
dotnet/src/
├── Microsoft.Agents.AI.Abstractions/ # 核心抽象层
│ ├── AIAgent.cs # Agent基类
│ ├── AgentThread.cs # 线程抽象
│ ├── AgentRunResponse.cs # 响应模型
│ └── Message models/ # 消息体系
├── Microsoft.Agents.AI/ # 核心实现
│ ├── ChatClientAgent.cs # 聊天型Agent
│ ├── OpenTelemetryAgent.cs # 遥测包装
│ └── Middleware/ # 中间件系统
├── Microsoft.Agents.AI.Workflows/ # 工作流引擎
│ ├── Executor.cs # 执行器抽象
│ ├── Workflow.cs # 工作流定义
│ ├── InProcessRunner.cs # 进程内运行器
│ └── Checkpointing/ # 检查点系统
├── Microsoft.Agents.AI.Workflows.Declarative/ # 声明式工作流
└── Integration layers/ # Azure、OpenAI等集成
设计亮点:明确的抽象契约:Abstractions层定义接口,具体实现可替换执行器模式:工作流基于Executor构建,消息路由清晰中间件架构:借鉴ASP.NET Core,支持拦截、过滤、审批检查点内置:工作流原生支持状态持久化与恢复。
Python侧结构:
python/packages/
├── core/ # 核心包
│ ├── _agents.py # Agent协议与实现
│ ├── _threads.py # 线程与存储
│ ├── _workflows.py # 工作流集成
│ ├── _middleware.py # 中间件支持
│ └── _observability.py # 可观测性
└── Vendor integrations/ # Azure、OpenAI等扩展
Python版本更"聚合":核心能力集中在core包,通过扩展包提供供应商集成。
负责任的人工智能透明度常见问题解答
Responsible AI Transparency FAQs
什么是 Microsoft 代理框架?
Microsoft 代理框架是一个全面的多语言(C#/.NET 和 Python)框架,用于生成、协调和部署 AI 代理和多代理工作流。该系统接受用户指令和对话输入,并通过可以与各种 LLM 提供商(OpenAI、Azure OpenAI、Azure AI Foundry)集成的 AI 代理生成智能响应。它提供简单的聊天代理和复杂的多代理工作流程,并具有基于图形的编排。
What is Microsoft Agent Framework?
Microsoft Agent Framework is a comprehensive multi-language (C#/.NET and Python) framework for building, orchestrating, and deploying AI agents and multi-agent workflows. The system takes user instructions and conversation inputs and produces intelligent responses through AI agents that can integrate with various LLM providers (OpenAI, Azure OpenAI, Azure AI Foundry). It provides both simple chat agents and complex multi-agent workflows with graph-based orchestration.
Microsoft 代理框架可以做什么?
该框架提供:
代理创建:使用自定义指令和工具构建 AI 代理
多代理编排:群聊、顺序、并发和切换模式
基于图形的工作流程:使用具有流式处理、检查点、时间旅行和人机交互的数据流连接代理和确定性函数
可扩展性框架:使用本机函数、A2A、模型上下文协议 (MCP) 进行扩展
LLM 集成:支持 OpenAI、Azure OpenAI、Azure AI Foundry 和其他提供商
运行时支持:进程内和分布式代理执行
Microsoft 代理框架的预期用途是什么?
预期用途包括:
企业 AI 应用程序:使用多个专业代理构建 AI 驱动的业务应用程序
多代理协作:协调多个 AI 代理执行复杂任务(例如,与作家/审稿人代理创建内容)
工作流程自动化:编排业务流程中的人工智能代理和确定性函数
如何评估 Microsoft 代理框架?哪些指标用于衡量性能?
What can Microsoft Agent Framework do?
The framework offers:
Agent Creation: Build AI agents with custom instructions and tools
Multi-Agent Orchestration: Group chat, sequential, concurrent, and handoff patterns
Graph-based Workflows: Connect agents and deterministic functions using data flows with streaming, checkpointing, time-travel, and Human-in-the-loop
Extensibility Framework: Extend with native functions, A2A, Model Context Protocol (MCP)
LLM Integration: Support for OpenAI, Azure OpenAI, Azure AI Foundry, and other providers
Runtime Support: Both in-process and distributed agent execution
Microsoft 代理框架是一个开发框架,而不是已部署的 AI 系统。该框架对组件功能进行了工程测试、对多代理方案进行集成测试,以及跨 .NET 和 Python 实现的一致性测试。然而,准确性、有用性和安全性等人工智能性能指标取决于底层 LLM 提供商和特定的应用程序实现。使用该框架的开发人员应进行特定于应用程序的评估,包括适合其选择的 LLM 提供商、部署上下文和用例的性能、安全性和准确性测试。
What is/are Microsoft Agent Framework’s intended use(s)?
Intended uses include:
Enterprise AI Applications: Building AI-powered business applications with multiple specialized agents
Multi-Agent Collaboration: Coordinating multiple AI agents for complex tasks (e.g., content creation with writer/reviewer agents)
Workflow Automation: Orchestrating AI agents and deterministic functions in business processes
Microsoft 代理框架有哪些限制?用户在使用系统时如何最大程度地减少 Microsoft 代理框架限制的影响?
Microsoft 代理框架依赖于现有的 LLM。使用该框架保留了大型语言模型的常见限制,包括:
LLM 继承的局限性:
数据偏差:根据大量数据进行训练的大型语言模型可能会无意中携带源数据中存在的偏差。因此,模型可能会产生可能存在偏见或不公平的输出。
缺乏上下文理解:尽管这些模型在语言理解和生成方面具有令人印象深刻的能力,但现实世界的理解能力有限,导致潜在的不准确或无意义的响应。
缺乏透明度:由于复杂性和规模,大型语言模型可以充当“黑匣子”,从而难以理解特定输出或决策背后的基本原理。
内容危害:大型语言模型可能造成多种类型的内容危害。在使用这些模型时,重要的是要意识到它们,并采取措施防止它们。建议利用不同公司和机构提供的各种内容审核服务。
不准确或无根据的内容:重要的是要意识到并谨慎,不要完全依赖给定的语言模型来做出可能产生深远影响的关键决策或信息,因为如何防止这些模型在没有高权威输入源的情况下伪造内容并不明显。
滥用的可能性:如果没有适当的保护措施,这些模型就有可能被恶意用于生成虚假信息或有害内容。
特定于框架的限制:
平台要求:需要 Python 3.10+,特定 .NET 版本(.NET 8.0、9.0、netstandard2.0、net472)
API 依赖项:需要正确配置 LLM 提供程序密钥和端点
编排功能:群聊、顺序和并发编排等高级编排模式即将推出,用于 Python 实现
隐私和数据保护:该框架允许人工参与代理之间的对话。确保用户数据和对话受到保护以及开发人员使用适当的措施来保护隐私非常重要。
问责制和透明度:该框架涉及多个代理商的对话和协作,建立明确的问责制和透明度机制非常重要。用户应该能够理解和跟踪相关代理的决策过程,以确保问责制并解决任何潜在问题或偏见。
安全和意外后果:在复杂任务中使用多代理对话和自动化可能会产生意想不到的后果。特别是,允许代理通过工具调用或函数执行对外部环境进行更改可能会带来重大风险。开发人员应仔细考虑潜在风险,并确保采取适当的保障措施来防止伤害或负面结果,包括让人类参与决策。
缓解步骤:
按照设置指南正确配置 API 密钥
使用提供的示例作为起点,以避免配置问题
监视 GitHub 存储库中的功能版本和更新
在部署代理时实施内容审核和安全措施
对关键决策和行动保持人工监督
使用适当的安全措施来保护用户数据和对话
哪些作因素和设置允许有效和负责任地使用 Microsoft 代理框架?
配置要求:
API 密钥:正确配置 LLM 提供商凭据和端点
模型选择:针对特定用例选择合适的部署模型
工具集成:仔细选择和验证外部工具和 MCP 服务器
类型安全:代理和线程之间的强类型和兼容性验证
负责任的发展实践:
人工监督:Microsoft 代理框架优先考虑多人机交互中的人工参与。用户应保持监督,并可以介入向代理提供反馈并引导他们朝着正确的方向前进。在关键应用程序中,用户应在执行作之前确认作。
代理模块化:模块化允许代理拥有不同级别的信息访问。其他代理可以承担有助于控制其他代理的角色。例如,可以轻松添加专门的代理来扮演保护的角色。
LLM 选择:用户可以选择针对负责任使用进行优化的 LLM。我们鼓励开发人员查看并遵守 LLM 提供商的政策。开发人员在使用代理时应添加内容审核和/或使用安全元提示,就像直接使用 LLM 时一样。
安全措施:为工具执行和外部系统集成实施适当的安全措施。考虑在代码执行场景中使用容器化或沙盒,以防止意外的系统更改。
测试和验证:使用提供的测试框架(单元、集成、一致性测试)来验证代理行为并确保可靠性。
监控和可观察性:实施适当的错误处理、日志记录,并使用 OpenTelemetry 实现可观察性,以跟踪代理行为并识别潜在问题。
如何实现提供有关 Microsoft 代理框架的反馈?
错误报告:https://github.com/microsoft/agent-framework/issues 的文件问题
什么是外部服务,Microsoft 代理框架如何使用它们?
该框架支持多种外部服务类型:
本机函数:代理可以调用的自定义 Python/C# 函数
A2A (Agent2Agent)集成:代理与代理之间的通信和协调
模型上下文协议 (MCP):通过 MCP 服务器的外部工具和数据源
工具和外部功能:代理可调用的外部服务
外部服务开发对可以创建自定义函数和集成外部 API 的开发人员开放。用户可以控制在代理创建期间向代理提供哪些工具。
Microsoft 代理框架可以向外部服务提供哪些数据?Microsoft 代理框架外部服务具有哪些权限?
Microsoft 代理框架是一个开源框架,允许与各种类型的外部服务集成。数据访问和权限取决于您配置和实施这些集成的方式:
按服务类型查阅数据:
本机函数:您开发的自定义函数可以访问您作为参数显式传递给它们的任何数据
A2A (Agent2Agent):外部代理可以访问对话历史记录、消息以及您配置为通过通信接口共享的任何数据
模型上下文协议 (MCP) 服务器:外部 MCP 服务器可以根据特定的 MCP 服务器实现和您的配置访问数据
外部工具:第三方工具和 API 可以访问您通过函数调用显式发送给它们的数据
重要的安全注意事项:
社区和第三方服务:Microsoft 代理框架是一个开源项目。使用社区开发的第三方提供商提供的工具或服务时,您有责任评估并确保其安全性、保障性并符合您的数据保护要求。
数据边界注意事项:将 Azure 托管的代理连接到外部代理或服务时,数据可能会离开 Azure 边界和 Microsoft 的安全边界。在共享敏感或受监管的数据之前,应验证外部提供商的数据处理实践、安全措施和合规性认证。
提供商尽职调查:在集成任何外部服务之前,您应该查看他们的隐私政策、安全实践、数据保留政策和服务条款,以确保它们满足您组织的要求和监管义务。
数据最小化:仅向外部服务提供其功能所需的最少数据。避免共享敏感、个人或机密信息,除非绝对需要且妥善保护。
建议:在集成外部服务之前,请咨询组织的安全、隐私和法律团队,尤其是在处理敏感数据的生产环境中。
使用启用了外部服务的 Microsoft 代理框架时,可能会出现哪些类型的问题?
潜在问题:
API 密钥安全:在配置或日志中暴露 API 密钥的风险
工具可靠性:外部工具故障或不可用影响代理性能
类型安全:代理和处理程序之间的消息类型不匹配
提供商依赖项:依赖外部 LLM 提供商可用性和速率限制
缓解机制:
遵循 API 密钥管理的安全最佳实践
对工具故障实施适当的错误处理
使用强类型和兼容性验证
监视外部服务运行状况并实施回退策略
在预览期间定期更新存储库以修复 bug
