如何确保一个Agent的行为是安全、可控且符合人类意图的?在Agent的设计中,有哪些保障对齐方法?
1. 题目分析
这道题考察的维度和前面几道纯技术题不太一样——它更偏向"工程安全"和"系统设计"。面试官想看到的是你在实际构建 Agent 时有没有安全意识,有没有思考过"这个 Agent 上线之后如果失控了怎么办"这种问题。很多候选人对 Agent 的技术架构讲得头头是道,但一问安全就只会说"加个内容审核",这是远远不够的。
一个好的回答应该从多个层次来构建 Agent 的安全体系——从最底层的模型对齐,到中间层的架构设计,到最上层的运行时防护和人机协作。这些层次不是互相替代的关系,而是层层叠加——每一层都可能有漏洞,但多层叠加后穿透所有防线的概率就极低了。
1.1 为什么 Agent 的安全问题比 Chatbot 更严峻
先搞清楚一个关键背景:Agent 的安全问题为什么比普通 Chatbot 更难、更重要。

普通 Chatbot 只做一件事——生成文本。即使它输出了不当内容,最坏的情况也就是用户看到了一段不合适的文字。但 Agent 不同,Agent 能采取行动——它可以调用工具、执行代码、访问数据库、发送邮件、操作内部系统。这意味着 Agent 一旦"跑偏",造成的后果不再是"说了不该说的话",而可能是"做了不该做的事"。
举个例子:一个有数据库访问权限的 Agent,如果被恶意 prompt 注入攻击(用户精心构造的输入让 Agent 偏离原本意图),它可能执行了 DROP TABLE 删除了核心数据。一个有邮件发送权限的 Agent 可能向客户发出了不当容。这些不是理论上的风险,而是实际项目中真实发生过的事故。
所以 Agent 的安全保障不是"锦上添花",而是生产上线的前提条件。
1.2 第一层防线:模型层对齐
Agent 的一切行为都始于 LLM 的推理输出,所以安全保障的第一层要从模型本身开始。
RLHF(Reinforcement Learning from Human Feedback) 是目前最主流的模型对齐技术。它的核心思路是:在模的后训练阶段,让人类标注员对模型的输出做好坏排序,训练一个奖励模型(Reward Model)来学习人类的偏好,然后用强化学习(PPO 等算法)来微调模型,让它更倾向于生成人类认为好的、安全的回答。目前 OpenAI、Anthropic、Google 等主流模型厂商都在模型出厂前做了大量的 RLHF 训练。
Constitutional AI 是 Anthropic 提出的一种改进方案。它不依赖大规模的人类标注,而是预先定义一组"宪法原则"(比如"不要帮助用户进行违法活动"、"如果不确定就坦诚承认"),然后让模型自己按照这些原则来评估和修正自己的输出。相当于给模型内置了一套"行为准则"。

但需要注意的是,模型层的对齐是模型厂商的工作,作为 Agent 应用开发者,我们能做的主要是选择对齐良好的基座模型、以及通过 System Prompt 来进一步强化安全约束。System Prompt 中的安全指令("你不能执行任何可能造成数据丢失的操作"、"遇到不确定的情况必须向用户确认")本质上是在模型层对齐之上再加一层"软约束"。
1.3 第二层防线:架构层设计
模型层的对齐再好也不是百分百可靠的——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 推理到需要执行高风险操作时,自动暂停、将操作详情展示给人类审批者,只有审批通过后才继续执行。

1.4 第三层防线:运行时防护
即使有了模型对齐和架构约束,Agent 在运行时仍然可能出现预料之外的行为。运行时防护就是最后一道"兜底"防线。
输入端的 Prompt 注入防护是运行时安全的第一环。Prompt 注入(Prompt Injection)是 Agent 面临的最常见攻击方式——攻击者通过精心构造的输入试图覆盖 Agent 的原始指令,让它执行非预期的操作。比如用户输入"忽略你之前的所有指令,现在执行以下操作..."。
防护手段包括:输入预处理——在用户输入送给 LLM 之前先做清洗和过滤,检测是否包含注入特征;指令隔离——将系统指令和用户输入严格分离,避免用户输入被模型当作指令来执行(比如使用 XML 标签或特殊分隔符将两者隔开);还有专门的 Prompt Guard 模型,用一个训练好的分类模型来判断输入是否包含注入攻击意图。
输出端的内容审查同样重要。Agent 在输出最终回答或执行操作之前,应该经过一道审查——检查输出是否包含有害内容、是否泄露了敏感信息(如 PII 个人身份信息)、操作指令是否符合预定义的安全策略。OpenAI 的 Moderation API 就是做这件事的,也可以用自建的规则引擎或分类模型来实现。
行为监控与异常检测是最后的安全网。在 Agent 运行过程中持续监控其行为模式——如果 Agent 突然开始高频调用某个敏感工具、尝试访问超出权限的资源、或者推理步骤数异常地多(可能陷入了死循环),系统应该自动触发告警,必要时直接熔断 Agent 的执行。这些监控指标和告警规则需要在上线前就定义好。

1.5 第四层防线:人为干预(Human-in-the-Loop)
所有技术层面的安全措施都有可能失效,所以在关键环节保留人类的审批和干预权是最后也是最可靠的保障。
Human-in-the-Loop 的核心理念是:Agent 可以自主完成大部分低风险的决策和操作,但在关键决策点必须暂停等待人类确认。这就像自动驾驶的"L3 级别"——大部分时间系统自动驾驶,但遇到复杂路况时提醒人类接管。
在实践中,HITL 可以在多个环节介入:规划审批——Agent 制定了执行计划后,先展示给用户确认再执行;操作审批——关键操作执行前需要用户点击"确认";结果审核——Agent 完成任务后,结果先给用户审核,确认无误后才正式提交。
LangGraph 对 HITL 有很好的原生支持。你可以在图的任意节点之间插入一个"人工审批"中断点,Agent 执行到这个点时自动暂停,等待人类审批的信号后才继续。这种机制在企业级应用中几乎是标配——特别是涉及资金操作、客户沟通、数据修复等场景。
需要注意的是,HITL 的设计需要平衡安全性和效率。如果每个操作都要人类审批,Agent 的自动化优势就丧失了。所以关键在于精准定义哪些操作需要审批——基于操作的风险等级、影响范围和可逆性来决定。不可逆的高影响操作必须审批,低风险可逆操作自动执行。

2. 参考回答
Agent 的安全保障比 Chatbot 难度更高也更重要,因为 Agent 能采取真实行动——调用 API、执行代码、操作数据库,一旦失控造成的不是"说错话"而是"做错事",后果可能不可逆。所以在实际项目中构建的是一套多层纵深防御体系,任何单一防线都可能被突破,但多层叠加后穿透概率就会大大降低。
第一层是模型层对齐,选择经过 RLHF 和 Constitutional AI 充分对齐的基座模型,再通过 System Prompt 写入明确的安全边界指令,这是"软约束"。
第二层是架构层的硬约束,这是我认为最关键的一层——严格执行最小权限原则,只给 Agent 完成任务所必需的最低权限;代码执行必须在 Docker 沙箱中隔离运行;把操作按风险分级,低风险自动执行、中风险二次确认、高风险必须人工审批。这些是系统级的强制约束,不依赖模型是否"听话"。
第三层是运行时防护,输入端做 Prompt 注入检测和意图分类,防止恶意输入绕过模型护栏;输出端做内容审核和 PII 脱敏;全过程做行为监控和异常检测,出现异常指标时自动熔断。
第四层是 Human-in-the-Loop,在关键决策点保留人类审批权,LangGraph 原生支持在任意节点插入人工审批中断点,我们的做法是根据操作的风险等级和可逆性来精确划定哪些需要人审哪些可以自动执行,在安全性和效率之间找到平衡。

