智能体在各种应用中日益普及。然而,将智能体集成到应用程序中,远不止是赋予大型语言模型(LLM)访问所有数据和功能的权限那么简单。还需要构建有效的防护栏,以确保智能体仅能访问相关数据,并防止滥用功能。在实现这一目标的同时,还要确保模型能够有效运作,既能访问必要数据,又能尽可能多地利用各项功能,并且无需人工持续介入。
本文旨在从宏观层面阐述如何构建有效的智能体防护栏,以确保智能体仅能访问必要的数据和功能,同时维持良好的用户体验,例如,最大限度地减少人工批准智能体访问的次数。首先将探讨防护栏为何如此重要,然后深入探讨防护栏的关键组成部分:细粒度授权。接下来,文章将分别讨论针对数据和功能的防护栏构建策略。

这张信息图强调了本文的主要议题,包括细粒度授权、数据防护栏和功能防护栏,这些都是讨论AI智能体防护栏时至关重要的主题。图片来源:Google Gemini。
为何智能体需要防护栏?
首先,有必要阐述AI智能体为何需要防护栏。理论上,可以将应用程序中的所有数据库和功能权限都赋予智能体,但这真的可行吗?
防护栏的必要性体现在多方面。主要原因在于防止智能体执行任何不希望发生的操作,例如删除数据库表。此外,还需要确保智能体只能在特定范围内访问数据,例如,保证某个客户使用的智能体无法访问其他客户的数据。
有些防护栏可以自动设置,无需人工干预。数据库访问即是其中一例,通过设定智能体操作范围(例如,在某个客户内部),仅允许智能体访问该客户的数据。然而,另一些防护栏则需要人工交互。试想,如果智能体想要执行某个命令,如何确保它不会执行破坏性操作(如删除数据库表),并且用户已明确允许该命令?
在这些情况下,需要引入人工干预(human-in-the-loop)机制,即智能体在执行特定操作前请求许可。如果用户批准,智能体便可继续执行;如果未获批准,智能体则需重新评估并选择其他行动方案。
细粒度权限管理
与智能体协同工作的一个普遍要求是具备细粒度权限管理能力。这意味着可以轻松检查某个功能或部分数据是否在特定范围内可用,例如:
- 客户1是否拥有数据库表A的访问权限?
- 用户2是否能够访问功能B?
- 组织3是否可以调用功能C?
在应用程序中实现细粒度授权至关重要。市面上有许多供应商提供此类功能。
一旦细粒度授权得以实施,就需要将其集成到应用程序的所有功能中,并妥善处理访问被授予和访问被拒绝的两种情况。例如,如果访问被拒绝,可以考虑添加一条消息,提示用户需要向管理员请求特定的访问级别才能执行某项操作。
智能体数据防护栏
在实现细粒度权限后,便可开始讨论围绕数据构建防护栏。智能体访问的数据量越大,越能有效回答用户问题,这一点非常重要。然而,也需要在此基础上进行权衡,确保智能体不会访问受限数据,或获取与用户查询无关的冗余信息。
受限数据访问控制
限制智能体对数据的访问主要依赖于细粒度授权。在执行数据搜索(如数据库查找、存储桶检索等)的功能中,应首先检查用户的访问范围。
此外,还应考虑在提示词中明确告知智能体允许执行的操作。如果智能体尝试访问数据却因故被拒绝,这将带来令牌使用量和时间上的成本。
避免获取不必要的信息
如果赋予智能体访问所有数据库表和数据存储桶的权限,可能会导致智能体面临过多选择,从而难以选取正确的文档表和字段。这也是在关于构建高效智能体工具的文章中讨论过的话题。
为解决此问题,建议仅向智能体提供相关的信息源。如果智能体正在处理的任务已知仅需使用数据库A即可解决,则应考虑仅告知智能体数据库A的信息,并将所有其他数据库排除在智能体的提示词之外。当然,这前提是了解哪些数据对智能体回答查询可能相关。
智能体功能防护栏
构建智能体功能防护栏这一主题更具趣味性,原因在于在构建此类防护栏时需要考虑诸多因素:
- 如何防止破坏性操作?
- 如何最大限度地减少人工干预?
如何防止破坏性操作?
功能防护栏中最重要的一项子议题是防止破坏性操作。为解决此问题,应标记所有功能是否执行不可逆操作。例如:
- 删除数据库表是不可逆操作(当然,可以加载备份,但这需要额外工作)
- 从表中读取数据不具有破坏性影响
如果智能体执行的是可轻易撤销的操作(例如,通过点击撤销按钮即可恢复),或不具有破坏性影响的操作,则很可能可以直接允许智能体运行该功能。
然而,如果某个功能执行的是不可逆操作,则应告知智能体此情况,并可能需要提示人类用户是否允许智能体执行该操作。
如何最大限度地减少人工干预?
自然地,既要防止破坏性操作,又不希望通过频繁询问智能体是否可以执行某个操作来过度打扰用户。
减少人工交互的一个有效方法是实施功能白名单机制,例如Cursor在执行终端命令时所采用的方式:当Cursor首次需要执行某个命令时,例如:
- 进入一个文件夹
- 运行 pytest 测试
- 将文件从一个位置移动到另一个位置
Cursor会提示用户是否允许执行该命令。用户可以选择以下三个选项之一:
- 拒绝请求
- 接受请求(仅限一次)
- 将命令加入白名单(立即接受,并允许后续执行)
白名单机制之所以有效,在于它能确保用户允许智能体运行某个功能或命令,并且之后无需再就同一功能或命令打扰用户。然而,白名单也存在局限性,某些命令无法被完全加入白名单,因为用户每次智能体建议运行特定功能(例如删除数据库表)时,仍需审查其上下文。
总结
本文从宏观角度探讨了在构建智能体应用程序时应如何考虑防护栏。防护栏是必要的,因为它能确保智能体按预期行为运作,且不允许执行超出访问范围的信息获取或未经用户明确许可的破坏性操作。文章讨论了为数据和为智能体提供的功能构建防护栏的策略。防护栏是智能体应用程序构建中不可或缺的一部分,在开发智能体应用时应始终牢记其重要性。确保设置适当的防护栏将使智能体使用更安全,这一点至关重要,因为一旦用户对智能体的信任受损,将很难重新建立。
