如何阻止编码代理接触生产数据?
摘要
讨论防止AI编码代理意外修改生产数据库的策略,主张使用只读访问、沙盒环境和审批关口,而不是仅仅依赖提示。
我有一个使用SQLite的小型交易脚本。没什么特别的,但数据库是真实的,我绝对不希望AI编码代理在帮我调试时意外修改它。我希望代理做的常规操作都是无害的:
* 检查模式
* 读取最近的行
* 解释奇怪的交易
* 总结日志
* 帮助我理解某个策略为何表现异常
我绝对不希望它对 `prod.sqlite` 做的事情:
* `UPDATE`
* `DELETE`
* `DROP TABLE`
* `ALTER TABLE`
* 编写并运行随机迁移代码
* “清理”数据(因为它认为这样有帮助)
所以我目前的思路是:不要依赖提示。“请不要修改生产数据”不是安全边界。
我正在考虑的设置大致如下:
* 生产数据库对代理是只读的
* 任何写入/调试实验都在复制的开发数据库上进行
* 代理通过一个小型包装器/工具访问数据库,而不是原始shell访问
* 每个数据库操作在执行前都会经过检查
* 破坏性操作被完全阻止
* 模糊的操作需要人工批准
我想要的规则基本上是:
* 生产数据库:只读
* 开发数据库:读写
* 破坏性操作:从不允许
* 模式检查:允许
* 交易/日志分析:允许
* 任何模糊的操作:先问我
显然,这不能替代操作系统权限、备份、容器或常识。如果代理拥有对真实数据库文件的未限制shell访问权限,那么包装器或审批流程也无法神奇地拯救我。但如果代理只能通过受控接口访问,那似乎是一个合理的额外防护层。
好奇其他人实际中是如何处理的。你们会让编码代理接触真实数据吗?你们在使用:
* 只读副本?
* 文件权限?
* Docker/沙盒?
* 自定义数据库包装器?
* 策略检查?
* 破坏性操作的审批关口?
* 单独的数据库开发副本?
我特别感兴趣的是人们目前实际使用的设置,而不仅仅“告诉模型不要这样做”。
相似文章
如何在不让代理拥有写入权限的情况下授权数据库访问?
一位开发者分享了一种解决方案,通过MCP服务器为AI代理提供只读数据库访问,该服务器强制实施READ ONLY事务和突变防护,防止写入操作并降低影响范围。
在生产环境中让智能体采取真实操作,你最担心的是什么?
一位开发者分享了在部署能够执行真实操作(如API调用和数据操作)的AI智能体时的担忧,并向社区询问他们的恐惧以及诸如护栏和人工审批等缓解策略。
你们在生产环境中如何处理代理的不可逆操作?我放弃了提示词,构建了一个外部风险门控。
作者描述了一个为生产环境AI代理构建的外部动作前风险门控,用于防止发送错误消息或删除数据等不可逆操作,并分享了一个真实案例,其中该门控阻止了一次不合规的短信活动。
你是如何让非工程师团队成员在生产环境中编辑提示词的?
作者讨论了在受监管领域中允许领域专家对AI代理的生产提示进行编辑所面临的挑战,并分享了一种使用带有GitHub后端的提示编辑器进行版本控制的解决方案。
人类总会打破规则,AI亦然:论“硬性门禁”的必要性
本文分析了 PocketOS 一起由 AI 代理误删生产数据库的事件,主张采用验证器独立性和可逆性检查等“硬性门禁”,而非单纯依赖提示词工程。