关键要点
- 使用专门的人工智能代理网关,将管理权限设置在执行系统之外,从而防止代理直接访问敏感基础设施。
- 利用OPA技术,将策略以代码的形式进行编写,根据身份、意图和上下文来授权所有由代理发起的操作,而不是将授权逻辑嵌入到应用程序代码中。
- 借助基于OpenTelemetry的可观测性工具,通过追踪数据、指标和日志来验证、调试和审计代理的行为,而非依赖主观判断来确定其正确性。
- 将MCP、OPA以及临时执行机制结合起来,作为一种可复用的模式,用于保障由人工智能驱动的持续集成与持续交付流程、基础设施自动化系统以及内部工具的工作流程安全。
- 使用生命周期较短且相互隔离的执行机制,来限制代理操作的影响范围,并确保每次操作后都能进行可靠的清理工作。
问题所在:缺乏监管的人工智能代理
许多工程团队正在尝试超越传统脚本和流水线的自动化方案。一些组织不再让人类通过仪表板进行操作或手动批准变更,而是将这类做法称为“ClickOps”,并开始让自主或半自主的代理来执行各种操作任务。这些代理可以生成基础设施变更指令、触发部署流程,或者对运营信号做出响应,而几乎不需要人类的干预。与传统的使用静态权限和确定性输入来执行预定义流水线的CI/CD机器人不同,由代理驱动的系统能够在运行时进行动态决策并跨多个系统执行操作。
这种转变带来了一类新的风险。与通常局限于单一工具或工作流程的传统自动化方案不同,人工智能代理往往会在多个系统中运行:包括CI/CD平台、云API、基础设施即代码工具以及内部服务系统。当这些代理被赋予广泛的权限时,它们实际上就拥有了与高级别人类操作员相同的访问能力,但却缺乏相应的判断能力和责任机制。
例如,在多区域部署环境中,备用区域虽然目前没有处理流量,但它对于故障切换来说却至关重要。如果一个代理在接收到成本优化或故障修复的指令后,将备用区域未使用的资源视为闲置资源并对其进行修改或终止,那么当主区域的流量随后被切换到备用区域时,就会造成严重的后果。而且,由于缺乏明确的审批流程或负责人,这种问题就很难被及时发现和解决。
在这个领域,失败所带来的后果是极其严重的。如果代理程序误解了指令,就可能会对基础设施进行破坏性的操作,比如拆除某些环境设施或修改生产资源。一旦代理程序的身份信息被泄露,就有可能被用来窃取机密、创建未经授权的工作负载,或者大规模消耗系统资源。在实际工作中,团队往往会在问题出现很久之后才发现它们,因为传统的日志记录只能显示“发生了什么”,但却无法说明代理程序为何会采取相应的行动。
对于企业来说,这种风险会带来运营和管理方面的挑战。事故调查会变得更加困难,变更审批流程可能会被无意中绕过,安全团队也会面临审计线索不完整的问题。随着时间的推移,这种问题会逐渐削弱人们对自动化技术的信任,迫使企业要么停止使用这些代理程序,要么接受越来越高的未受管控的风险。
有一种解决办法是完全限制或阻止代理程序执行的操作,但这样做会削弱代理程序本来应该发挥的作用。一种更为可持续的做法是在代理程序与其所操作的系统之间加入一层明确的控制机制。在本文中,我们重点介绍了一种名为AI代理网关的解决方案——这种专门设计的机制能够验证代理程序的意图,以代码的形式执行安全策略,并在任何基础设施或服务API被调用之前隔离相应的执行过程。
与将代理程序视为具有特殊权限的实体不同,这种模型将它们视为不可信任的请求者,因此必须对它们的操作进行授权、限制、监控和管控。
设计原则
在详细探讨各个具体原则之前,先了解AI代理网关在结构层面上是什么样的,会更有帮助。我们在设计时参考了成熟的生产安全技术和平台架构模式,而不是专门针对人工智能技术提出的理论。
从本质上讲,AI代理网关充当了自主运行的代理程序与基础设施系统之间的控制屏障。代理程序永远不会直接与基础设施API进行交互,所有请求都会首先经过这个中央网关。该网关会验证请求的意图,执行授权检查,并将执行任务分配给隔离的、临时创建的环境。这种设计使得企业能够在不给予代理程序对关键系统永久性或无限制访问权限的情况下,依然利用人工智能技术实现自动化操作。
图1展示了这一架构的宏观结构,说明了请求是如何从AI代理程序开始,经过策略评估、受控执行,最终达到可监控状态的。与简单的API封装层或代理服务器不同,AI代理网关并不会直接转发代理程序的请求。它将意图验证、策略决策和执行功能分离到了不同的组件中,从而防止代理程序持有访问权限或直接调用基础设施API。

图1:AI代理网关的宏观架构(Debnath,2026年)
在这种架构下,该网关遵循以下设计原则:
- “策略即代码”:将授权逻辑外化为声明式策略,避免在应用程序代码中硬编码访问规则。
- 最小权限原则:阻止代理直接与基础设施API进行交互;网关会拦截所有请求,并仅允许执行那些所需的最小权限范围内的操作。
- 短暂执行机制:强制所有操作在临时、隔离的环境中运行,这些环境会在操作完成后立即被销毁。
- 默认可监控性:系统会记录所有的请求和执行过程,生成追踪数据、指标及审计日志,从而便于后续的检查和事故分析。
- 版本控制与审计功能:通过计划哈希值、幂等性键以及不可变的作业元数据来跟踪所有请求,确保操作的可重复性和可追溯性。
- 本地优先,兼容云环境:该架构既可以在本地环境中用于实验和测试,也可以轻松部署到生产环境中。
参考架构
该网关架构采用了深度防御模型,这是一种在基础设施和云系统中被广泛采用的安全设计原则。深度防御并不依赖单一的控制措施来防止误用,而是通过多种独立的防护机制来确保系统的安全性;即使其中某个环节出现故障,也不会导致整个系统遭到破坏。这种设计方式常用于零信任网络、云身份与访问管理以及生产级的持续集成/持续交付流程中。在由代理驱动的系统中,仅仅依靠单一的控制措施(如提示限制或静态工具列表)是远远不够的,因为代理会在运行时做出决策,而且它们的行为可能会涉及多个工具和系统,因此无法通过单一的防护机制来完全预测或限制这些行为。
在人工智能驱动的自动化场景中,深度防御意味着没有任何一个组件——无论是代理、网关还是执行环境——单独来看都拥有足以造成破坏的权限。每个环节都只负责执行特定的功能,而且各个环节之间的交互都会经过严格的验证。
这一设计原则体现在该架构明确区分了谁发起请求与请求在何处被执行这两个概念:AI代理被视为不可信任的请求者,它们可以发现自身的功能并提交结构化的请求,但永远不能直接与基础设施API进行交互。所有的执行操作都在一个严格的网关之后进行,该网关会负责验证请求、授权以及确保各环节之间的隔离。
系统中的数据流被设计为单向流动,这一机制确保了任何执行操作都必须事先获得授权,并且所有操作都在隔离的环境中完成:
- 发现阶段
代理程序会使用模型上下文协议(MCP)来识别可用的工具以及这些工具所需的输入参数。 - 请求阶段
代理程序会通过JSON-RPC调用来启动相应的工具(例如apply_infra)。 - 验证阶段
网关会验证请求格式,计算出对应的计划哈希值,为请求添加身份识别信息和上下文数据,然后将其发送给OPA进行授权处理。 - 决策阶段
如果OPA拒绝了该请求,网关会返回403错误响应,执行流程也会立即停止;如果请求获得批准,它就会被转换成一条作业任务并放入执行队列中。 - 执行阶段
一个临时运行的进程会从队列中取出该作业任务,在隔离的环境中执行相应的操作,完成后会删除相关环境资源。 - 可观测性阶段
在每个执行步骤中都会生成相应的指标和跟踪数据,这样就可以通过仪表板实时监控政策决策的执行情况、执行延迟以及可能出现的故障问题。
这种分离机制能够确保:即使某个代理程序因为程序错误、配置失误或被恶意攻击而出现异常行为,其造成的影响范围也会被限制在可控范围内。授权决策会在执行之前完成,所有执行操作都在隔离的环境中进行,而且每一个执行步骤都是可以被监控和审计的。
在图2中,我们可以看到AI代理网关所实现的完整请求到执行的工作流程。该图表展示了代理程序的请求是如何经过验证、授权、排队,然后在隔离环境中被执行的,同时也能清楚地看到当政策决定拒绝某个操作时,整个流程会如何停止。

图2:AI代理网关的端到端请求与执行工作流程(Debnath, 2026)
关于这个参考实现
本文介绍的是一个参考实现示例,它的目的是用来说明人工智能驱动的自动化系统中的治理边界,而不是一个经过生产环境验证的安全平台。
配套提供的代码库更注重架构的清晰性而非功能的完整性。它展示了如何通过网关模式将意图识别、授权决策和执行操作分离开来,并确保这些流程得到有效执行,同时保持实现的简洁性以及可在本地环境中运行。
因此,文中提到的一些控制机制只是以架构模式的形式呈现,并没有被强制要求必须完全实现。例如,Kubernetes的命名空间可以为临时性的执行任务提供逻辑隔离,但它们目前还没有通过服务账户的范围限制、网络策略或工作负载身份验证来确保最小权限访问原则得到遵守;同样,计划内容的完整性虽然会通过哈希值在政策层进行验证,但这些哈希值并没有与由执行进程生成的签名文件进行加密绑定;可观测性方面也是通过基于OpenTelemetry的跟踪数据和指标来描述的,但参考代码仅展示了这些监控机制应该部署的位置,并没有完整地构建出一个完整的监控系统。
项目架构设计
AI代理网关被设计为由多个功能专一的组件构成,而非一个庞大的、不可分割的服务。每个组件负责特定的任务:请求处理、授权验证或执行操作,这样一来,代理的行为就可以在不受基础设施实现细节影响的情况下被有效管理、审计和优化。这种设计安排是经过深思熟虑的,其目的在于在保证系统易于理解与测试的同时,尽可能降低各部分之间的相互影响程度。
本节将详细说明AI代理网关是如何由一系列功能专注的组件构建而成的。这样的设计旨在让系统本身就具备可理解性、可审计性和可扩展性,而不是将策略制定、执行逻辑以及协调机制全部集成到同一个服务中。
从整体结构上看,该系统被划分为三个部分,这些部分通过明确定义的接口进行交互,从而确保系统的可替换性和可测试性:
- 网关层(API接口)负责接收代理发出的请求,验证请求意图,执行授权判断,并协调各项操作的执行流程。
- 策略层利用“策略即代码”的理念,封装了所有的授权规则与安全机制。
- 执行层在隔离的、临时创建的环境中执行经过审批的操作。
这种分层设计使得每一层都可以独立发展。政策规则可以随时更改而无需重新部署整个网关;执行环境也可以进行强化处理,而不会影响到授权逻辑;此外,代理程序的更换或升级也不会影响基础设施的控制功能。
接下来的内容将逐一详细介绍这些组件,顺序是从请求处理开始,然后是策略执行机制,最后是隔离执行环境的相关设计。
组件概览
该项目的文件组织结构明确体现了这种分层设计思路。与按照语言或部署单元来分类文件不同,这个代码仓库是根据功能职责来进行划分的。这种结构的设计初衷是为了确保架构的清晰性,而非遵循某种特定的语言或框架规范:
agent-gateway/
├── mcp/ # 组件1:TypeScript网关服务
│ └── server.ts # 负责处理JSON-RPC请求及OPA授权验证
├── policies/ # 组件2:OPA策略引擎
│ └── agent_authz.rego # 定义“谁可以执行什么操作”
├── runner/ # 组件3:临时运行脚本
│ └── runner.py # 用于直接执行Terraform命令的Python脚本
├── infra/ # 示例基础设施配置文件(OpenTofu格式)
└── docker-compose.yml # 用于系统协调配置的文件
这里以Terraform/OpenTofu为例来说明具体的执行流程,但实际上,这种设计模式同样适用于其他后端技术,比如云平台命令行工具、部署工具或内部自动化脚本。
构建这个系统所必需的前提条件包括:Docker、Kind(Kubernetes v1.26及以上版本)、Node.js v20及以上版本、Python 3.11及以上版本,以及OPA命令行工具。
参考实现
本文所提到的完整、可运行的参考实现作为开源项目托管在GitHub上。它的用途在于作为所描述架构模式的参考和演示工具,并非用于生产环境。该代码库包含了MCP网关、OPA策略、临时运行组件,以及基于Docker的本地开发环境,这些资源能够帮助读者复现本文中提到的示例与实验。
网关(MCP层)
我们首先构建系统的协调层,而不是决策组件。之所以选择Model Context Protocol(MCP),是因为它能够将代理与工具定义分离开来。这一设计使得我们在不重新编写治理层代码的情况下,就可以更换LLM模型或代理框架,从而有效避免被特定供应商锁定的情况。
mcp/server.ts文件中实现了网关逻辑,用于处理两项关键任务:资源发现与规则执行。
首先,我们定义了apply_infra工具的结构,这样代理就能理解所需的输入参数(计划、路径、哈希值以及环境配置),从而确保代理的行为仅限于那些明确允许的操作,防止其执行未定义的动作。
// mcp/server.ts - 工具定义 if (method === "tools/list") { return res.json(rpcResult(id, { tools: [ { name: "apply_infra", description: "在沙箱环境中执行OpenTofu/Terraform计划", inputSchema: ApplyInfraParams.shape } ] }); }当该工具被调用时,我们会使用Zod来进行严格的架构验证。随后,会将验证结果传递给OPA系统。需要注意的是,我们在这里并不会实际执行基础设施变更操作,而只是将其加入待处理队列中。
// mcp/server.ts - 工具执行 if (method === "tools/call") { const { name, arguments: args } = params; // 1. 验证输入参数的结构 const parsed = ApplyInfraParams.safeParse(args); if (!parsed.success) return res.json(rpcError(id, -32602, "参数无效")); // 2. 通过OPA系统进行授权 const decision = await authorize({ action: name, actor: // 从JWT/mTLS中提取代理信息, plan: { path: args.planPath, hash: args.planHash, env: args.env }, time: new Date().toISOString() }); if (!decision) return res.json(rpcError(id, 403, "授权失败"); // 3. 将任务加入异步执行队列 const job = await enqueueApply({ ...args, actor: actor.id }, args.idempotencyKey); return res.json(rpcResult(id, { accepted: true, jobId: job.id })); }“政策即代码”的理念在这里得到了体现
我们将授权逻辑从TypeScript代码中提取出来,放入Open Policy Agent (OPA)系统中。这样的设计使得我们能够在不重新部署网关的情况下,轻松地执行复杂的业务规则。
对于策略引擎,我们定义了文件 `
policies/agent_authz.rego`,以强制执行四项不可协商的规则:
- RBAC:`
sre-bot` 具有完全访问权限;`deploy-bot` 仅被允许在非生产环境中使用。 - 数据完整性:计划的哈希值必须与已注册的资源相匹配。
- 安全性:以 `
-destroy.plan` 结尾的计划会被明确禁止执行。 - 变更管理:部署操作仅允许在周一至周五的 09:00–17:00 UTC 期间进行。
# policies/agent_authz.rego
package agent.authz
default allow = false
allow {
input.action == "apply_infra"
allow_actor[input.actor.id][input.plan.env] # RBAC
plan_is_registered[input_plan.hash] # 数据完整性检查
not is_destroy_plan(input.plan.path) # 安全性要求
in_change_window(time.parse_rfc3339_ns(input.time)) # 变更窗口时间判断
}
# 角色定义
allow_actor := {
"sre-bot": {"dev": true, "staging": true, "prod": true},
"deploy-bot": {"dev": true, "staging": true}
}
is_destroy_plan(path) {
return path.endswith("-destroy.plan")
}
# 周一至周五上午9点至下午5点
in_change_window(t) {
ns := time.parse_rfc3339_ns(input.time)
day := time.weekday([ns, "Local"])
is_weekday(day)
clock := time.clock([ns, "America/New_York"])
hour := clock[0]
return hour >= 9 && hour < 17
}
is_weekday(day) {
weekdays := {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday"}
return weekdays[day]
}
临时运行程序
这个运行程序是系统的“执行机构”。我们使用 Python 来管理其生命周期,确保在执行前后环境能够保持整洁。
该运行程序是用 Python 编写的(文件名为 `runner/runner.py`),它遵循严格的工作流程:
- 生成一个唯一的命名空间(格式为 `run-uuid`)。
- 使用 `
kubectl` 和 `tofu` 命令来执行相应的操作。 - 无论任务是否成功,都必须删除该命名空间。
# runner/runner.py
def main():
job = json.loads(sys.stdin.read())
namespace = f"run-{uuid.uuid4().hex[:8]}"
with tracer.start_as_current_span("apply_infra_execution") as span:
try:
# 1. 创建沙箱环境
subprocess.run(["kubectl", "create", "ns", namespace], check=True)
# 2. 执行基础设施即代码方案
subprocess.run(["tofu", "apply", "-chdir=infra", "-auto-approve"], check=True)
span.set_status(trace.StatusTRACEStatusCode.OK))
finally:
# 3. 必须执行清理操作
subprocess.run(["kubectl", "delete", "ns", namespace, "--wait"], check=False)
这种工作流程能够确保系统中不会留下任何“无人管理的”资源。
执行过程与结果
现在,我们的各个组件都已经准备就绪,我们可以开始组装整个系统了。
启动集群
初始化一个本地的Kind集群,将其作为我们的“云”环境使用。
make bootstrap # 用于执行:kind create cluster命令的封装代码
注入初始数据
将示例Terraform配置文件放入infra/目录中,计算它们的SHA-256哈希值,并将这些哈希值注册到OPA系统中。
测试正常流程
模拟一个有效的代理请求。你应该会看到网关接收到了JSON-RPC调用,在几秒钟内,你的Kind集群中会出现一个新的命名空间,然后这个命名空间又会消失。
# 预期结果:{"accepted": true, "jobId": "...".}
curl -X POST http://localhost:8080/rpc ...
测试安全防护机制
尝试修改请求内容,使用未经授权的代理或具有破坏性的配置文件(例如infra/app-destroy.plan)。此时网关应该会立即返回403 Forbidden错误,这证明OPA系统在请求到达执行引擎之前就已经拦截了它。
我们必须提前考虑这种系统可能出现的故障情况。当前的架构已经考虑到了以下特定风险:
| 风险 | 应对策略 |
| 未经授权的代理(盗用的令牌) | 使用短期有效的JWT令牌、实施mTLS加密,并能及时撤销相关权限 |
| 被篡改的配置文件 | 通过对签名后的配置文件进行哈希验证来确保其完整性 |
| 部分配置的应用或状态漂移 | 在任务执行后检查状态变化,并设置自动恢复机制 |
| 沙箱环境中的资源泄漏问题 | 通过控制命名空间的生命周期和实施配额限制来防止资源浪费 |
| 代理请求过多导致系统负担过重 | 通过限流、队列缓冲和断路器机制来保护系统稳定性 |
扩展到企业级应用
到目前为止所描述的架构设计初衷是简洁性,适用于本地测试和控制环境。然而,当团队从单一工作流程转向全组织范围的部署时,系统的某些方面就需要进行调整,同时仍要保持原有的控制机制。这些调整的目的并不是增加系统的复杂性,而是为了满足大规模应用所带来的运营、安全及合规性要求。
其中一个首要需要解决的问题就是执行隔离问题。Kubernetes的命名空间为本地测试和早期原型开发提供了良好的隔离环境,但在受监管或多租户环境中,这种隔离措施往往不够充分。随着应用的规模扩大,团队通常会将临时性的执行环境迁移到更强大的隔离环境中,比如轻量级的虚拟机(如Firecracker或Kata Containers)或专用的、生命周期短暂的Kubernetes集群。这样的调整使得组织能够更严格地实现租户之间的分离,并满足审计要求,而无需改变代理程序或策略的定义方式。
另一个与扩展性相关的问题是人们对这些机制的信任度。在早期阶段,只需在策略中验证计划哈希值,通常就足以防止出现意外偏差。但在企业级应用环境中,这种做法已不再适用。此时,计划必须具备可追溯性、可验证性以及责任归属明确的特点。许多团队通过引入经过签名的计划目录,并结合内部机制注册库或Sigstore等工具来解决这一问题。这样,策略层不仅能验证计划的完整性,还能确定该计划是由谁在何时制定的,从而将执行过程转变成一条可被验证的监管链条,而而不仅仅是一种基于最佳努力的安全保障措施。
当变更带来的影响日益增大时,完全自动化的执行方式已很少能被接受。对于那些高风险操作,比如生产环境中的变更或具有破坏性的操作,通常需要人工明确批准才能进行。因此,审批逻辑并不被嵌入到代理程序或执行引擎中,而是由网关来担任协调角色。当需要审批时,网关会返回“待审批”状态,并要求代理程序只有在通过Slack或Jira等外部系统获得经过签名的审批令牌后才能重新尝试执行。这种设计使得人工决策过程变得透明且可被审计,同时也不会削弱自动化的效果。
最后,地理位置也成为了一个需要考虑的治理因素。在多区域环境中,执行操作必须发生在所管理的基础设施附近,而控制逻辑则应保持集中式管理。代理程序不应自行决定任务在哪里执行;相反,临时性的执行引擎应该按区域进行部署,而具体的执行位置则由策略来规定。这样的设计能够防止代理程序跨越监管限制或数据存储规则,从而确保整个控制系统的一致性。
综上所述,这些变更在保留网关核心设计原则的同时,也使其能够在现实的企业环境中正常运行。系统的扩展性并非通过赋予代理程序更多权力来实现,而是通过明确执行边界并强化信任机制来实现的。
运营级服务水平目标
在代理程序的管理体系中,性能同样是一个至关重要的因素。如果授权或执行过程变得缓慢或不可预测,团队们很可能会选择绕过这个系统直接操作。
以下服务级别目标旨在同时保护开发者的信任与运营安全:
- 策略决策延迟时间(<100毫秒)
授权过程必须足够快速,才能让代理程序察觉不到其存在。如果策略检查耗时过长,就会导致重试、超时现象,或者代理程序会直接绕过网关去调用API。 - 执行引擎启动延迟时间(开发环境<2秒/测试环境<5秒)
>只有当执行引擎的启动成本保持在较低水平时,临时性的执行操作才具有可行性。如果启动时间过长,通常说明存在问题,可能是镜像文件体积过大、集群负载过重,或是隔离规则设置不当所致。 - 被拒绝的执行请求比例(≤2%)
较高的拒绝率往往表明工具设计存在缺陷或策略设置过于粗糙。这一指标有助于团队在重新训练代理程序以适应现有控制机制之前,及时发现存在的问题。 - 沙箱环境清理时间(<30秒)
清理操作的延迟时间会直接影响系统的稳定性。如果沙箱环境持续运行时间过长,不仅会增加成本,还可能导致凭证泄露,并使事故应对工作变得复杂化。 - 审计日志的可用性(<5分钟)
如果只有在事件发生后才能获取审计数据,那么治理措施就失去了实际意义。在发生问题时,审计数据必须能够被立即查询到。
这些服务水平目标是通过警报来强制执行的。当这些目标未能得到满足时,自动化流程就需要被暂停。
结论
在本地构建并测试这个系统时,我们故意引发了规则违规、执行失败以及一些边缘情况,从而早早得出了一个明确的结论:代理的安全性并非可以通过补充文档或调整模型来实现的。只有当那些安全防护机制成为系统本身不可或缺的一部分时,它们才能真正发挥作用。
最有效的控制措施是将管理机制置于执行流程之外。在自动化测试过程中,静态指南、访问审核以及最佳实践文档都很容易被绕过;而由网关强制执行的控制措施,则会在每次请求时都被严格检查,因为代理从未直接与基础设施的API进行交互。将管理机制视为系统边界而非事后补充的内容,这一做法对于确保自动化的安全性而言至关重要。
将“意图”与“执行”分开处理也显得十分关键。让代理来描述它们想要执行的操作,而由执行引擎来决定具体的实现方式,这种方式既简化了安全性的保障流程,也便于调试问题。规则违规、无效请求以及执行失败等现象都能被清晰地区分开来,而不会相互混淆。这种分离机制使得我们可以更加严格地制定政策,同时又不会影响正常的工作流程;同时也可以加强执行的安全性,而不必修改授权逻辑。
即使在本地环境中,可观测性也同样重要。那些记录了规则决策、执行步骤以及沙箱清理情况的日志,使代理的行为变得可以被清晰地检测和验证。我们不再需要盲目相信代理“一定做了正确的事情”,而是可以确切地了解发生了什么、何时发生的,以及为什么某个操作会被允许或被拒绝。
最后,临时性的执行环境从根本上改变了进行高风险实验时的心理体验。由于知道所有的操作都在一个会自动销毁的临时环境中进行,因此我们可以放心地测试那些可能造成破坏性的场景,而不会留下任何残留的影响。这种设计大大降低了失败带来的风险,并促使我们制定更加严格的规则,因为错误从一开始就被有效地限制在了可控的范围之内。
综合来看,这些经验告诉我们一个更重要的结论:人工智能驱动的自动化的安全性,并不是通过开发更智能的模型来提升的,而是通过设定明确且可强制执行的边界来实现的。通过将“意图”(代理)、“授权”(以代码形式表达的规则)以及“执行”(临时性的执行引擎)这三个部分分离开来,最小权限人工智能代理网关成功地将那些抽象的人工智能风险转化成了具体的工程约束条件。在这种模型中,对代理的信任并不是一种主观的假设,而是可以通过观察、测量和强制措施来验证的东西。