为什么AI代理需要两层架构
摘要
本文讨论了在单一服务器上运行具有工具执行能力的AI代理的安全风险,并提出了一种两层架构,将提示评估与代码执行分离,以减轻提示注入和恶意代码攻击。
我们要解决什么问题?让我们从一个问题陈述开始:你需要部署一个面向公众的聊天机器人,该机器人应能够执行各种工具,例如 ffmpeg。最简单的解决方案就是在你的服务器上托管一个应用,该应用直接接受提示,决定调用哪些工具,在服务器本身上执行代码,并返回输出。
用户/前端 你的服务器
┃ +-----------+ +-----------------------+
┃ | | ---> | LLM选择工具 |
┃ | Prompt > | | -> 执行代码 |
┃ | | <--- | -> 工具调用 |
┃ +-----------+ +-----------------------+
未隔离(一台机器完成所有操作):这种方法固有地存在问题。举个例子,一个允许你通过文本提示运行 ffmpeg 命令的应用。用户输入“delete the lib ffmpeg”,在上述方案中,无论系统指令多么健壮,它最终都会执行所指示的命令。最终结果:所有用户都会受到影响。
那么我们如何解决呢?我们提出的设计是:在从不执行代码的系统上让 OpenAI 评估提示。然后将代码发送到另一台安装了 ffmpeg 的机器上,LLM 生成的代码在此处执行。即使代码是恶意的,也只会影响该特定用户的临时机器。
用户/前端 持久服务器 临时环境
┃ +-----------+ +---------------+ +--------------+
┃ | | ---> | 提示评估 | ---> | |
┃ | Prompt > | | | | 执行代码 |
┃ | | <--- | v | <--- | |
┃ +-----------+ | 代码 | +--------------+
┃ +---------------+
Anthropic 也提出了一个类似的模型,即托管代理,尽管他们没有明确这样称呼。
额外部分
如果有人注意到,你可能会想:如果提示注入要求“给出所有环境变量”(在持久服务器上),那么成功的提示注入是否会泄露我们的 OpenAI 密钥(用于从持久服务器生成 ffmpeg 代码的密钥)?好问题!因此,我们从不将 OpenAI 或任何此类密钥存储在持久服务器中,而是通过一个单独的密钥保管库的代理将其动态注入。
相似文章
我认为大多数AI代理的安全性远低于其开发者的预期
文章认为,AI代理安全常被过度强调,尤其是对提示注入的关注,而忽视了更广泛的风险,如未授权工具使用、数据访问和金融交易。它呼吁更多地关注代理在生产环境中实际可能被操控执行的任务。
AI代理需要与聊天机器人不同的安全模型
本文讨论了AI代理与聊天机器人相比需要不同的安全模型,强调了诸如范围权限、审计日志和提示注入意识等实际控制措施。
对于使用工具的智能体,安全边界应划在哪里?
讨论AI智能体使用工具的安全风险,重点关注提示注入这一实际威胁——不受信任的文本可能改变智能体行为,以及在授予权限前需要进行可重复测试。
AI 代理最危险的部分始于其获得执行权限之时
本文强调了 AI 代理获得基础设施执行权限所带来的关键风险,认为如果没有外部准入层来防止灾难性故障,现有的安全护栏是不够的。
AI代理需要安全层才能获得企业信任
本文介绍了一种针对AI代理的护栏平台,该平台提供控制层,用于阻止恶意提示、幻觉、危险操作和成本激增,从而在企业环境中实现安全的自主AI。