AutoGen 自定义代理:打造符合企业需求的个性化 Agent 协作网络
AutoGen的所有代理都继承自基类,因此我们可以通过继承和重写基类方法的方式,自定义具有业务属性的代理角色。定义代理的业务属性:如角色名称、角色描述、角色职责、权限级别重写__init__方法:初始化代理的业务属性,并注册代理需要的工具重写方法:自定义代理的回复逻辑(如需求分析师Agent的回复逻辑是“拆解需求→生成报告”)重写on_message方法:自定义代理的消息处理逻辑(如只有符合特定格
AutoGen 自定义代理:打造符合企业需求的个性化 Agent 协作网络
摘要
AutoGen,微软于2023年10月开源的多代理框架(Multi-Agent Framework, MAF),凭借其“原生分布式协作、轻量级交互原语、全栈可定制化”三大核心特性,迅速成为AI应用落地领域的“现象级工具”。但多数企业在初期尝试AutoGen的基础示例(如“代码生成+执行+审查”的Agent链)后,都会面临一个共同的痛点:基础的“通用型用户代理+通用型助手代理”架构,无法满足企业内部复杂的业务流程、权限管控、工具集成、合规审计等需求。
本文将从企业级应用的核心痛点出发,深入拆解AutoGen的底层架构、自定义核心机制(包括代理角色定义、状态管理、工具绑定、协作策略、权限控制、合规审计六大维度),并通过一个完整的“企业级数据可视化分析协作网络”实战案例,手把手教你从零搭建一套可复用、可扩展、符合企业规范的AutoGen个性化Agent系统。
全文约10200字,适合中级以上Python开发者、企业架构师、AI落地工程师阅读——我们不仅会讲“怎么改代码”,更会讲“为什么这么改才能解决企业问题”。
核心概念
在正式进入技术细节之前,我们必须先统一几个AutoGen的核心概念,这是后续自定义的基础。AutoGen的设计理念非常简洁:“一切皆代理,一切皆交互”。
1.1 代理(Agent)
代理是AutoGen的基本执行单元,本质上是一个具有特定功能、可以与其他代理/用户/外部系统交互的Python类实例。
AutoGen内置了5种基础代理类型:
- AssistantAgent:通用型“工具调用+代码生成”助手,默认依赖LLM(大语言模型)完成任务
- UserProxyAgent:通用型“用户/工具执行代理”,可以模拟用户输入、执行代码、调用API
- ConversableAgent:所有代理的基类,提供了核心的“对话循环、消息处理、工具注册”能力
- GroupChatManager:多代理群聊的“调度员”,负责决定下一个发言的代理
- RetrieveAssistantAgent:基于RAG(检索增强生成)的专用助手,擅长回答特定领域的知识
但在企业场景中,这5种基础代理远远不够——我们需要基于业务流程拆分的专用代理,如“需求分析师Agent”“数据工程师Agent”“合规审核Agent”等。
1.2 交互(Interaction)
交互是AutoGen的核心协作机制,本质上是代理之间的消息传递和状态同步。AutoGen支持三种交互模式:
- 一对一交互(1:1):两个代理直接对话,如“UserProxyAgent → AssistantAgent”
- 一对多交互(1:N):一个代理向多个代理发送消息,如“GroupChatManager → 所有群成员”
- 多代理群聊(Group Chat):多个代理组成一个群聊,由GroupChatManager调度发言顺序
但在企业场景中,这三种模式也不够灵活——我们需要基于业务规则的“定向交互+条件触发交互+异步交互”,如“只有数据分析师Agent完成EDA后,合规审核Agent才能介入”。
1.3 工具(Tool)
工具是AutoGen代理的**“能力外延”,本质上是一个可以被代理调用的Python函数或API**。AutoGen内置了“代码执行工具”“文件读写工具”“网络请求工具”等基础工具,但在企业场景中,我们需要定制化的企业内部工具,如“企业数据湖查询工具”“ERP系统API调用工具”“财务审批工具”等。
问题背景
2.1 企业级AI应用的现状
根据Gartner 2024年的《AI应用落地成熟度报告》,目前全球约有70%的企业正在尝试或已经部署了单代理AI应用(如智能客服、代码补全工具),但只有不到5%的企业成功落地了多代理协作的企业级AI应用。
为什么差距这么大?核心原因在于:
- 企业业务流程复杂:单代理无法完成“需求收集→数据分析→方案设计→合规审核→落地执行→结果反馈”的闭环流程
- 企业权限管控严格:不同代理需要访问不同级别的数据和工具,单代理架构无法实现细粒度的权限隔离
- 企业合规要求高:AI应用的每一步操作(如数据查询、代码执行、方案生成)都需要留痕可追溯,单代理架构无法满足合规审计需求
- 企业系统生态复杂:AI应用需要与企业内部的ERP、CRM、数据湖、OA等系统无缝集成,单代理架构的工具集成能力有限
2.2 基础AutoGen框架的局限性
虽然AutoGen提供了多代理协作的基础能力,但在企业场景中,它仍然存在以下局限性:
- 代理角色定义过于通用:内置的AssistantAgent和UserProxyAgent没有业务属性,无法直接映射到企业内部的岗位和角色
- 状态管理能力不足:默认的状态管理只支持“对话历史”,无法存储和共享代理的“业务状态”(如“需求是否已确认”“数据查询是否已完成”“合规审核是否已通过”)
- 协作策略不够灵活:默认的协作策略只有“轮询发言”“LLM决定发言”“指定发言顺序”,无法实现基于业务规则的条件触发和定向交互
- 权限控制机制缺失:默认没有细粒度的权限控制,任何代理都可以调用任何工具、访问任何数据
- 合规审计功能不完善:默认的日志功能只记录对话内容,无法记录工具调用的详细信息、数据访问的来源和目的、操作的时间戳和执行者
- 企业系统集成能力有限:内置的工具集成能力只支持简单的Python函数和HTTP API,无法直接集成企业内部的复杂系统(如需要OAuth2.0/JWT认证的系统、需要异步调用的系统)
问题描述
为了更具体地说明企业的需求和基础AutoGen的局限性,我们可以提出一个典型的企业级问题:
企业需求:某大型零售企业希望搭建一套“数据可视化分析协作网络”,用于快速响应业务部门的数据分析需求。具体流程如下:
- 业务人员通过OA系统提交数据分析需求(如“分析2024年Q1华东区智能手机的销售趋势,包括销量、销售额、市场份额三个维度,并生成可视化报表”)
- 需求分析师Agent自动接收需求,对需求进行拆解和确认,生成《需求分析报告》
- 数据工程师Agent接收《需求分析报告》,从企业数据湖(Data Lake)中提取相关数据,进行清洗和预处理,生成《数据质量报告》
- 数据分析师Agent接收清洗后的数据和《数据质量报告》,进行探索性数据分析(EDA),生成《EDA报告》和可视化图表
- 合规审核Agent接收所有报告和图表,检查数据来源是否合规、数据使用是否符合隐私政策、可视化图表是否存在误导性,生成《合规审核报告》
- 业务总监Agent接收所有报告和图表,进行最终审核,决定是否批准
- 结果输出Agent如果审核通过,将所有报告和图表打包发送给业务人员,并同步到企业知识库;如果审核未通过,将修改意见反馈给需求分析师Agent,重新开始流程
企业要求:
- 权限管控:每个Agent只能访问自己需要的工具和数据(如数据工程师Agent只能访问数据湖,不能访问财务系统;业务总监Agent只能审核,不能执行代码)
- 合规审计:每一步操作都需要留痕可追溯,包括操作时间、操作者(Agent名称)、操作内容、操作结果
- 高可用性:如果某个Agent出现故障,系统需要能够自动切换到备用Agent
- 可扩展性:未来可以轻松添加新的Agent(如“机器学习建模Agent”)和新的工具(如“BI系统API调用工具”)
- 易用性:业务人员不需要了解AutoGen的技术细节,只需要通过OA系统提交需求即可
问题解决
要解决上述问题,我们需要对AutoGen框架进行六大核心维度的自定义:
4.1 维度一:自定义代理角色(映射企业岗位和角色)
AutoGen的所有代理都继承自ConversableAgent基类,因此我们可以通过继承和重写基类方法的方式,自定义具有业务属性的代理角色。
自定义代理角色的核心步骤如下:
- 定义代理的业务属性:如角色名称、角色描述、角色职责、权限级别
- 重写
__init__方法:初始化代理的业务属性,并注册代理需要的工具 - 重写
generate_reply方法:自定义代理的回复逻辑(如需求分析师Agent的回复逻辑是“拆解需求→生成报告”) - 重写
on_message方法:自定义代理的消息处理逻辑(如只有符合特定格式的消息,代理才会处理)
我们将在后面的实战案例中,详细讲解如何自定义上述需求中的所有代理角色。
4.2 维度二:自定义状态管理(存储和共享业务状态)
AutoGen默认的状态管理是基于对话历史字典(chat_history)的,但对话历史字典只能存储“文本消息”,无法存储结构化的“业务状态”(如“需求ID”“需求状态”“数据文件路径”“合规审核结果”)。
因此,我们需要自定义一个分布式状态管理组件,用于存储和共享代理的业务状态。常用的分布式状态管理工具有:
- Redis:适合存储高频访问、低延迟的结构化数据
- MongoDB:适合存储半结构化、大体积的数据(如报告、图表)
- PostgreSQL:适合存储需要复杂查询、事务支持的结构化数据
在实战案例中,我们将使用Redis+MongoDB的组合来实现状态管理:
- Redis:存储高频访问的“业务状态”(如需求ID、需求状态、数据文件路径、合规审核结果)
- MongoDB:存储半结构化的“报告和图表”
4.3 维度三:自定义协作策略(基于业务规则的交互)
AutoGen默认的群聊协作策略是由GroupChat和GroupChatManager实现的,内置的策略有:
round_robin:轮询发言llm:由LLM决定下一个发言的代理random:随机发言manual:手动指定发言顺序
但这些策略无法满足企业场景中的“条件触发交互”和“定向交互”需求(如“只有数据工程师Agent完成数据清洗后,数据分析师Agent才能介入”)。
因此,我们需要自定义一个协作策略组件,通过重写GroupChat的select_speaker方法和GroupChatManager的generate_reply方法,实现基于业务规则的交互。
自定义协作策略的核心思路如下:
- 定义业务规则库:将企业的业务流程转化为结构化的规则(如“如果需求状态是‘需求分析完成’,则下一个发言的代理是数据工程师Agent”)
- 从分布式状态管理组件中获取当前业务状态
- 根据业务规则库和当前业务状态,选择下一个发言的代理
- 如果没有符合条件的代理,则触发异常或等待用户输入
我们将在后面的实战案例中,详细讲解如何自定义上述需求中的协作策略。
4.4 维度四:自定义权限控制(细粒度的工具和数据访问)
AutoGen默认没有细粒度的权限控制机制,任何代理都可以调用任何工具、访问任何数据——这在企业场景中是绝对不可接受的。
因此,我们需要自定义一个权限控制组件,用于控制代理的工具访问权限和数据访问权限。常用的权限控制模型有:
- RBAC(基于角色的访问控制):将权限分配给角色,将角色分配给用户/代理,是企业场景中最常用的权限控制模型
- ABAC(基于属性的访问控制):根据用户/代理的属性、资源的属性、环境的属性来决定是否允许访问,比RBAC更灵活,但也更复杂
- PBAC(基于策略的访问控制):将访问控制规则定义为策略,通过策略引擎来决定是否允许访问,是最灵活的权限控制模型,但也是最复杂的
在实战案例中,我们将使用RBAC+ABAC的混合模型来实现权限控制:
- RBAC:控制代理的“工具访问权限”(如数据工程师Agent只能访问“数据湖查询工具”“数据清洗工具”)
- ABAC:控制代理的“数据访问权限”(如数据工程师Agent只能访问“2024年Q1华东区智能手机的销售数据”,不能访问“财务数据”或“其他区域的销售数据”)
4.5 维度五:自定义合规审计(留痕可追溯)
AutoGen默认的日志功能只记录对话内容,无法记录工具调用的详细信息、数据访问的来源和目的、操作的时间戳和执行者——这在企业场景中是无法满足合规审计需求的(如GDPR、SOX、等保2.0)。
因此,我们需要自定义一个合规审计组件,用于记录代理的每一步操作。合规审计组件的核心功能如下:
- 定义审计日志的格式:包括操作ID、操作时间、操作者(Agent名称)、操作类型(如消息发送、工具调用、数据访问、状态变更)、操作内容、操作结果、操作参数、操作返回值、操作异常信息
- 拦截代理的所有操作:通过重写
ConversableAgent的generate_reply方法、on_message方法、execute_function方法,拦截代理的所有操作 - 将审计日志存储到分布式数据库中:常用的分布式日志数据库有Elasticsearch、ClickHouse、Loki
- 提供审计日志查询接口:用于合规审计人员查询和分析审计日志
在实战案例中,我们将使用Elasticsearch+Kibana的组合来实现合规审计:
- Elasticsearch:存储审计日志
- Kibana:提供审计日志查询和可视化界面
4.6 维度六:自定义企业系统集成(无缝对接内部系统)
AutoGen内置的工具集成能力只支持简单的Python函数和HTTP API,但企业内部的系统往往需要OAuth2.0/JWT认证、异步调用、重试机制、熔断机制等复杂功能。
因此,我们需要自定义一个企业系统集成组件,用于封装企业内部系统的API调用逻辑。企业系统集成组件的核心功能如下:
- 封装认证逻辑:支持OAuth2.0、JWT、API Key、Basic Auth等多种认证方式
- 封装异步调用逻辑:支持aiohttp、httpx等异步HTTP客户端库
- 封装重试和熔断机制:支持tenacity、pybreaker等库
- 封装数据格式转换逻辑:支持JSON、XML、CSV等多种数据格式
- 提供统一的工具注册接口:方便代理注册和调用企业内部工具
在实战案例中,我们将使用httpx+aiohttp+tenacity+pybreaker的组合来实现企业系统集成。
边界与外延
5.1 边界
虽然AutoGen自定义代理可以解决企业级AI应用的很多问题,但它也有一些边界:
- LLM的能力边界:AutoGen自定义代理的核心能力仍然依赖于LLM,因此LLM的能力边界(如幻觉问题、推理能力、知识截止日期)也会影响AutoGen自定义代理的能力
- 计算资源的边界:多代理协作会消耗更多的计算资源(如CPU、内存、GPU、LLM API调用次数),因此需要考虑计算资源的成本和可用性
- 响应时间的边界:多代理协作的响应时间通常比单代理长,因此不适合对响应时间要求非常高的场景(如实时交易系统)
- 可调试性的边界:多代理协作的调试难度通常比单代理大,因此需要完善的日志和监控系统
5.2 外延
除了上述六大核心维度的自定义之外,我们还可以对AutoGen框架进行以下外延扩展:
- 自定义监控告警组件:用于监控代理的运行状态、LLM API的调用情况、计算资源的使用情况,当出现异常时发送告警
- 自定义测试组件:用于测试代理的功能、性能、安全性,确保代理符合企业的要求
- 自定义部署组件:用于将AutoGen自定义代理部署到企业的云平台(如Azure、AWS、阿里云)或本地服务器上,支持Docker、Kubernetes等容器化部署方式
- 自定义可视化组件:用于可视化展示代理的协作过程、业务状态、审计日志,方便企业管理人员和技术人员了解系统的运行情况
概念结构与核心要素组成
6.1 概念结构
AutoGen自定义代理的企业级架构可以分为四层:
- 用户交互层:负责与用户/外部系统交互,如OA系统接口、Web界面、API网关
- 代理协作层:负责代理的调度和协作,如自定义GroupChatManager、自定义协作策略组件、分布式状态管理组件
- 代理执行层:负责代理的执行,如自定义业务代理、权限控制组件、合规审计组件、企业系统集成组件
- 基础设施层:负责提供底层的基础设施,如LLM API、数据库(Redis、MongoDB、Elasticsearch)、容器化部署平台(Docker、Kubernetes)
下面是AutoGen自定义代理的企业级架构的文本示意图:
┌─────────────────────────────────────────────────────────────────┐
│ 用户交互层(User Interaction Layer) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │
│ │ OA系统接口 │ │ Web界面 │ │ API网关(对外提供) │ │
│ └──────────────┘ └──────────────┘ └──────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 代理协作层(Agent Collaboration Layer) │
│ ┌──────────────────────┐ ┌──────────────────────┐ │
│ │ 自定义GroupChatManager│ │ 自定义协作策略组件 │ │
│ └──────────────────────┘ └──────────────────────┘ │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ 分布式状态管理组件(Redis+MongoDB) │ │
│ └───────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 代理执行层(Agent Execution Layer) │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ 自定义业务代理组(Business Agent Group) │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ 需求分析 │ │ 数据工程 │ │ 数据分析 │ │ 合规审核 │ │ │
│ │ │ Agent │ │ Agent │ │ Agent │ │ Agent │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │
│ │ ┌──────────┐ ┌──────────┐ │ │
│ │ │ 业务总监 │ │ 结果输出 │ │ │
│ │ │ Agent │ │ Agent │ │ │
│ │ └──────────┘ └──────────┘ │ │
│ └───────────────────────────────────────────────────────────┘ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │
│ │ 权限控制组件 │ │ 合规审计组件 │ │ 企业系统集成组件 │ │
│ └──────────────┘ └──────────────┘ └──────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 基础设施层(Infrastructure Layer) │
│ ┌──────────────┐ ┌───────────────────────────────────────┐ │
│ │ LLM API │ │ 数据库(Redis/MongoDB/Elasticsearch)│ │
│ │ (GPT-4o/… │ └───────────────────────────────────────┘ │
│ │ Claude3.5) │ ┌───────────────────────────────────────┐ │
│ └──────────────┘ │ 容器化部署平台(Docker/Kubernetes) │ │
│ └───────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
下面是AutoGen自定义代理的企业级架构的Mermaid架构图:
6.2 核心要素组成
AutoGen自定义代理的企业级架构的核心要素如下:
- 自定义业务代理:映射企业岗位和角色,具有特定的业务功能
- 自定义GroupChatManager:调度代理的协作
- 自定义协作策略组件:基于业务规则选择下一个发言的代理
- 分布式状态管理组件:存储和共享代理的业务状态
- 权限控制组件:控制代理的工具和数据访问权限
- 合规审计组件:记录代理的每一步操作
- 企业系统集成组件:封装企业内部系统的API调用逻辑
- 基础设施层:提供底层的基础设施
概念之间的关系
7.1 概念核心属性维度对比
下面是AutoGen自定义代理的企业级架构中核心要素的核心属性维度对比的markdown表格:
| 核心要素 | 核心功能 | 技术实现方式 | 依赖关系 |
|---|---|---|---|
| 自定义业务代理 | 映射企业岗位和角色,完成特定的业务任务 | 继承ConversableAgent基类,重写关键方法 | LLM API、权限控制组件、合规审计组件、企业系统集成组件、分布式状态管理组件 |
| 自定义GroupChatManager | 调度代理的协作,控制对话流程 | 继承GroupChatManager基类,重写关键方法 | 自定义协作策略组件、分布式状态管理组件、自定义业务代理组 |
| 自定义协作策略组件 | 基于业务规则选择下一个发言的代理 | Python类+结构化规则库(YAML/JSON) | 分布式状态管理组件 |
| 分布式状态管理组件 | 存储和共享代理的业务状态、报告和图表 | Redis+MongoDB | 无(基础设施层提供) |
| 权限控制组件 | 控制代理的工具和数据访问权限 | Python类+RBAC+ABAC+权限数据库(PostgreSQL) | 分布式状态管理组件(获取代理属性和资源属性) |
| 合规审计组件 | 记录代理的每一步操作,提供审计日志查询接口 | Python类+Elasticsearch+Kibana | 自定义业务代理组、自定义GroupChatManager |
| 企业系统集成组件 | 封装企业内部系统的API调用逻辑,提供统一的工具注册接口 | Python类+httpx+aiohttp+tenacity+pybreaker | LLM API、数据库(企业内部系统) |
| 基础设施层 | 提供底层的LLM API、数据库、容器化部署平台 | Azure OpenAI Service/AWS Bedrock/阿里云PAI等 | 无 |
7.2 概念联系的ER实体关系图
下面是AutoGen自定义代理的企业级架构中核心要素的ER实体关系图的Mermaid架构图:
7.3 交互关系图
下面是AutoGen自定义代理的企业级架构中核心要素的交互关系图(以“企业级数据可视化分析协作网络”的流程为例)的Mermaid架构图:
数学模型
8.1 协作策略选择模型
自定义协作策略的核心是根据当前业务状态和业务规则库,选择最优的下一个发言的代理。我们可以用数学模型来描述这个过程:
设:
- S S S 为当前业务状态集合, s ∈ S s \in S s∈S 为当前业务状态
- R R R 为业务规则库, r ∈ R r \in R r∈R 为一条业务规则,每条规则可以表示为 r : ( s → a ) r: (s \rightarrow a) r:(s→a),其中 a ∈ A a \in A a∈A 为下一个发言的代理, A A A 为代理集合
- F ( s , r ) F(s, r) F(s,r) 为规则匹配函数,当 s s s 满足 r r r 的条件时, F ( s , r ) = 1 F(s, r) = 1 F(s,r)=1,否则 F ( s , r ) = 0 F(s, r) = 0 F(s,r)=0
- W ( r ) W(r) W(r) 为规则权重,用于解决规则冲突的问题,权重越大,规则的优先级越高
则,最优的下一个发言的代理 a ∗ a^* a∗ 可以表示为:
a ∗ = arg max a ∈ A ( ∑ r ∈ R , r : ( s → a ) F ( s , r ) × W ( r ) ) a^* = \arg\max_{a \in A} \left( \sum_{r \in R, r: (s \rightarrow a)} F(s, r) \times W(r) \right) a∗=arga∈Amax
r∈R,r:(s→a)∑F(s,r)×W(r)
如果没有符合条件的规则,则触发异常或等待用户输入:
if ∑ r ∈ R F ( s , r ) = 0 , then a ∗ = None or User Input \text{if } \sum_{r \in R} F(s, r) = 0, \text{ then } a^* = \text{None or User Input} if r∈R∑F(s,r)=0, then a∗=None or User Input
8.2 权限控制模型
我们使用RBAC+ABAC的混合模型来实现权限控制,下面是这个模型的数学描述:
8.2.1 RBAC部分
RBAC部分的核心是将权限分配给角色,将角色分配给代理。设:
- U U U 为代理集合, u ∈ U u \in U u∈U 为一个代理
- R R R 为角色集合, r ∈ R r \in R r∈R 为一个角色
- P P P 为工具访问权限集合, p ∈ P p \in P p∈P 为一个工具访问权限
- U A ⊆ U × R UA \subseteq U \times R UA⊆U×R 为代理-角色分配关系, ( u , r ) ∈ U A (u, r) \in UA (u,r)∈UA 表示代理 u u u 被分配了角色 r r r
- R P ⊆ R × P RP \subseteq R \times P RP⊆R×P 为角色-权限分配关系, ( r , p ) ∈ R P (r, p) \in RP (r,p)∈RP 表示角色 r r r 被分配了权限 p p p
则,代理 u u u 拥有的工具访问权限集合 P u P_u Pu 可以表示为:
P u = ⋃ r ∈ R , ( u , r ) ∈ U A ( ⋃ p ∈ P , ( r , p ) ∈ R P { p } ) P_u = \bigcup_{r \in R, (u, r) \in UA} \left( \bigcup_{p \in P, (r, p) \in RP} \{p\} \right) Pu=r∈R,(u,r)∈UA⋃
p∈P,(r,p)∈RP⋃{p}
代理 u u u 是否拥有工具访问权限 p p p 可以表示为:
RBAC ( u , p ) = { 1 if p ∈ P u 0 otherwise \text{RBAC}(u, p) = \begin{cases} 1 & \text{if } p \in P_u \\ 0 & \text{otherwise} \end{cases} RBAC(u,p)={10if p∈Puotherwise
8.2.2 ABAC部分
ABAC部分的核心是根据代理的属性、资源的属性、环境的属性来决定是否允许访问。设:
- S U B SUB SUB 为代理属性集合, s u b ∈ S U B sub \in SUB sub∈SUB 为代理的一个属性(如代理的角色、权限级别、所属部门)
- O B J OBJ OBJ 为资源属性集合, o b j ∈ O B J obj \in OBJ obj∈OBJ 为资源的一个属性(如数据的时间范围、数据的区域、数据的敏感级别)
- E N V ENV ENV 为环境属性集合, e n v ∈ E N V env \in ENV env∈ENV 为环境的一个属性(如当前时间、当前网络环境、当前系统负载)
- P o l i c y Policy Policy 为ABAC策略集合, p o l i c y ∈ P o l i c y policy \in Policy policy∈Policy 为一条ABAC策略,每条策略可以表示为 p o l i c y : ( s u b ∧ o b j ∧ e n v → Allow/Deny ) policy: (sub \land obj \land env \rightarrow \text{Allow/Deny}) policy:(sub∧obj∧env→Allow/Deny)
- E v a l ( s u b , o b j , e n v , p o l i c y ) Eval(sub, obj, env, policy) Eval(sub,obj,env,policy) 为策略评估函数,当 s u b sub sub、 o b j obj obj、 e n v env env 满足 p o l i c y policy policy 的条件时,返回 p o l i c y policy policy 的结果(Allow/Deny),否则返回 NotApplicable \text{NotApplicable} NotApplicable
则,ABAC部分的访问控制结果 A B A C ( u , r e s , e n v ) ABAC(u, res, env) ABAC(u,res,env) 可以表示为:
A B A C ( u , r e s , e n v ) = { 1 if ∃ p o l i c y ∈ P o l i c y , E v a l ( s u b u , o b j r e s , e n v , p o l i c y ) = Allow and no policy returns Deny 0 otherwise ABAC(u, res, env) = \begin{cases} 1 & \text{if } \exists policy \in Policy, Eval(sub_u, obj_res, env, policy) = \text{Allow and no policy returns Deny} \\ 0 & \text{otherwise} \end{cases} ABAC(u,res,env)={10if ∃policy∈Policy,Eval(subu,objres,env,policy)=Allow and no policy returns Denyotherwise
其中, s u b u sub_u subu 为代理 u u u 的属性集合, o b j r e s obj_res objres 为资源 r e s res res 的属性集合。
8.2.3 混合模型
混合模型的访问控制结果 A c c e s s C o n t r o l ( u , p , r e s , e n v ) AccessControl(u, p, res, env) AccessControl(u,p,res,env) 是RBAC部分和ABAC部分的“与”操作:
A c c e s s C o n t r o l ( u , p , r e s , e n v ) = R B A C ( u , p ) ∧ A B A C ( u , r e s , e n v ) AccessControl(u, p, res, env) = RBAC(u, p) \land ABAC(u, res, env) AccessControl(u,p,res,env)=RBAC(u,p)∧ABAC(u,res,env)
只有当RBAC部分和ABAC部分都返回1时,代理 u u u 才被允许访问资源 r e s res res 并使用工具 p p p。
算法流程图
9.1 自定义协作策略选择算法流程图
下面是自定义协作策略选择算法的Mermaid流程图:
score_dict[a] = 0 for all a in -----------------------^ Expecting 'SQE', 'DOUBLECIRCLEEND', 'PE', '-)', 'STADIUMEND', 'SUBROUTINEEND', 'PIPE', 'CYLINDEREND', 'DIAMOND_STOP', 'TAGEND', 'TRAPEND', 'INVTRAPEND', 'UNICODE_TEXT', 'TEXT', 'TAGSTART', got 'SQS'
9.2 自定义权限控制算法流程图
下面是自定义权限控制算法的Mermaid流程图:
更多推荐


所有评论(0)