Agent的安全设计

深入解析Agent安全设计,探讨多层纵深防御体系:模型层对齐、架构层设计、运行时防护和人为干预

🧠 为什么Agent的安全问题比Chatbot更严峻

先搞清楚一个关键背景:Agent的安全问题为什么比普通Chatbot更难、更重要。

Agent vs Chatbot安全风险对比

普通Chatbot只做一件事——生成文本。即使它输出了不当内容,最坏的情况也就是用户看到了一段不合适的文字。但Agent不同,Agent能采取行动——它可以调用工具、执行代码、访问数据库、发送邮件、操作内部系统。这意味着Agent一旦"跑偏",造成的后果不再是"说了不该说的话",而可能是"做了不该做的事"。

举个例子:一个有数据库访问权限的Agent,如果被恶意prompt注入攻击(用户精心构造的输入让Agent偏离原本意图),它可能执行了DROP TABLE删除了核心数据。一个有邮件发送权限的Agent可能向客户发出了不当内容。这些不是理论上的风险,而是实际项目中真实发生过的事故。

所以Agent的安全保障不是"锦上添花",而是生产上线的前提条件


🛡️ 第一层防线:模型层对齐

Agent的一切行为都始于LLM的推理输出,所以安全保障的第一层要从模型本身开始。

RLHF(Reinforcement Learning from Human Feedback) 是目前最主流的模型对齐技术。它的核心思路是:在模型的后训练阶段,让人类标注员对模型的输出做好坏排序,训练一个奖励模型(Reward Model)来学习人类的偏好,然后用强化学习(PPO等算法)来微调模型,让它更倾向于生成人类认为好的、安全的回答。目前OpenAI、Anthropic、Google等主流模型厂商都在模型出厂前做了大量的RLHF训练。

Constitutional AI 是Anthropic提出的一种改进方案。它不依赖大规模的人类标注,而是预先定义一组"宪法原则"(比如"不要帮助用户进行违法活动"、“如果不确定就坦诚承认”),然后让模型自己按照这些原则来评估和修正自己的输出。相当于给模型内置了一套"行为准则"。

RLHF与Constitutional AI对齐技术

但需要注意的是,模型层的对齐是模型厂商的工作,作为Agent应用开发者,我们能做的主要是选择对齐良好的基座模型、以及通过System Prompt来进一步强化安全约束。System Prompt中的安全指令(“你不能执行任何可能造成数据丢失的操作”、“遇到不确定的情况必须向用户确认”)本质上是在模型层对齐之上再加一层"软约束"。


🏗️ 第二层防线:架构层设计

模型层的对齐再好也不是百分百可靠的——prompt注入、越狱攻击等手段有时候确实能绕过模型的安全护栏。所以我们不能把安全全押在模型身上,而是要在架构设计层面构建更硬的约束。

🔐 最小权限原则

最小权限原则(Principle of Least Privilege) 是最重要的架构安全原则。给Agent配置工具和权限时,只授予它完成当前任务最低限度所需的权限。比如一个只需要查询数据的Agent,就不要给它写入和删除权限;一个只需要访问本部门数据的Agent,就不要给它全库访问权限。即使Agent被攻击或推理出错,它能造成的破坏也被限制在一个很小的范围内。

🏠 沙箱执行环境

沙箱执行环境(Sandbox) 对于需要执行代码的Agent至关重要。代码执行是Agent场景中风险最高的操作之一——如果Agent在宿主机上直接执行代码,恶意代码可能访问文件系统、网络甚至整个服务器。解决方案是在Docker容器、WebAssembly沙箱或其他隔离环境中运行Agent生成的代码,严格限制文件系统访问、网络权限和系统调用。

⚖️ 操作分级与审批流

操作分级与审批流(Tiered Actions) 是一种非常实用的架构策略。把Agent能执行的操作按风险等级分成几档:

  • 低风险操作(如信息查询)可以自动执行
  • 中风险操作(如数据修改)需要二次确认
  • 高风险操作(如批量删除、资金操作)必须经过人工审批才能执行

LangGraph中的Human-in-the-Loop机制就是为这种场景设计的——Agent推理到需要执行高风险操作时,自动暂停、将操作详情展示给人类审批者,只有审批通过后才继续执行。

架构层安全设计示意图

🔍 第三层防线:运行时防护

即使有了模型对齐和架构约束,Agent在运行时仍然可能出现预料之外的行为。运行时防护就是最后一道"兜底"防线。

🛡️ 输入端的Prompt注入防护

Prompt注入(Prompt Injection) 是Agent面临的最常见攻击方式——攻击者通过精心构造的输入试图覆盖Agent的原始指令,让它执行非预期的操作。比如用户输入"忽略你之前的所有指令,现在执行以下操作…"。

防护手段包括:

  • 输入预处理——在用户输入送给LLM之前先做清洗和过滤,检测是否包含注入特征
  • 指令隔离——将系统指令和用户输入严格分离,避免用户输入被模型当作指令来执行(比如使用XML标签或特殊分隔符将两者隔开)
  • Prompt Guard模型——用一个训练好的分类模型来判断输入是否包含注入攻击意图

📝 输出端的内容审查

Agent在输出最终回答或执行操作之前,应该经过一道审查——检查输出是否包含有害内容、是否泄露了敏感信息(如PII个人身份信息)、操作指令是否符合预定义的安全策略。OpenAI的Moderation API就是做这件事的,也可以用自建的规则引擎或分类模型来实现。

📊 行为监控与异常检测

在Agent运行过程中持续监控其行为模式——如果Agent突然开始高频调用某个敏感工具、尝试访问超出权限的资源、或者推理步骤数异常地多(可能陷入了死循环),系统应该自动触发告警,必要时直接熔断Agent的执行。这些监控指标和告警规则需要在上线前就定义好。

运行时防护体系

👤 第四层防线:人为干预(Human-in-the-Loop)

所有技术层面的安全措施都有可能失效,所以在关键环节保留人类的审批和干预权是最后也是最可靠的保障。

Human-in-the-Loop 的核心理念是:Agent可以自主完成大部分低风险的决策和操作,但在关键决策点必须暂停等待人类确认。这就像自动驾驶的"L3级别"——大部分时间系统自动驾驶,但遇到复杂路况时提醒人类接管。

在实践中,HITL可以在多个环节介入:

  • 规划审批——Agent制定了执行计划后,先展示给用户确认再执行
  • 操作审批——关键操作执行前需要用户点击"确认"
  • 结果审核——Agent完成任务后,结果先给用户审核,确认无误后才正式提交

LangGraph对HITL有很好的原生支持。你可以在图的任意节点之间插入一个"人工审批"中断点,Agent执行到这个点时自动暂停,等待人类审批的信号后才继续。这种机制在企业级应用中几乎是标配——特别是涉及资金操作、客户沟通、数据修复等场景。

Human-in-the-Loop机制示意图

需要注意的是,HITL的设计需要平衡安全性和效率。如果每个操作都要人类审批,Agent的自动化优势就丧失了。所以关键在于精准定义哪些操作需要审批——基于操作的风险等级、影响范围和可逆性来决定。不可逆的高影响操作必须审批,低风险可逆操作自动执行。


📋 总结:多层纵深防御体系

如果把Agent的安全保障放在一个统一框架里看,可以得到一个比较清晰的结论:

Agent的安全保障比Chatbot难度更高也更重要,因为Agent能采取真实行动——调用API、执行代码、操作数据库,一旦失控造成的不是"说错话"而是"做错事",后果可能不可逆。所以在实际项目中构建的是一套多层纵深防御体系,任何单一防线都可能被突破,但多层叠加后穿透概率就会大大降低。

防线层次 核心机制 约束类型
模型层对齐 RLHF、Constitutional AI、System Prompt 软约束
架构层设计 最小权限、沙箱隔离、操作分级审批 硬约束
运行时防护 Prompt注入检测、内容审核、异常监控 检测拦截
人为干预 规划审批、操作审批、结果审核 最终保障

第一层是模型层对齐,选择经过RLHF和Constitutional AI充分对齐的基座模型,再通过System Prompt写入明确的安全边界指令。

第二层是架构层的硬约束——严格执行最小权限原则,只给Agent完成任务所必需的最低权限;代码执行必须在Docker沙箱中隔离运行;把操作按风险分级,低风险自动执行、中风险二次确认、高风险必须人工审批。

第三层是运行时防护,输入端做Prompt注入检测和意图分类;输出端做内容审核和PII脱敏;全过程做行为监控和异常检测,出现异常指标时自动熔断。

第四层是Human-in-the-Loop,在关键决策点保留人类审批权,根据操作的风险等级和可逆性来精确划定哪些需要人审哪些可以自动执行,在安全性和效率之间找到平衡。

最后更新于 2026-03-25 10:19 UTC
그 경기 끝나고 좀 멍하기 있었는데 여러분 이제 살면서 여러가
使用 Hugo 构建
主题 StackJimmy 设计