最近在做 agent 落地时一直被一个问题困扰:让 agent 查数据很容易,让它写数据就很吓人。
提示词里写"不要乱改生产数据"没什么用。agent 拿到一个有写权限的连接,一句 WHERE 条件写宽了,几千行就被悄悄改掉了,事后连改了哪些行都说不清楚。
我们的思路是把 Git 那套工作流搬到表上,做成数据库原生的 SQL 能力( MatrixOne ,开源,兼容 MySQL 协议):
- Snapshot:agent 动手前给表打个快照。只记元数据,不复制数据,随时可以对比或回退
- Branch:给 agent 开一个可写的表分支,它的增删改都在分支上,不碰主表
- Diff:行级对比分支和主表,改了哪些行、改成什么一目了然
- Merge:审核通过后按明确的冲突策略合并回主表;不满意就直接丢掉分支
简单说就是给表提 PR:隔离 → 审查 → 批准 → 合并。
先说清楚边界,免得被喷:
- 这是底层原语,不是完整的安全方案。校验规则、审批流程、权限、审计还得你自己的系统来做,我们提供的是一条"可以被卡住"的写入路径
- 教程里的示例是演示场景,不是客户案例
想试的话,教程是可以直接跑的 SQL:
- 教程仓库: https://github.com/matrixorigin/git4data-tutorial
- 上手文章: https://www.matrixorigin.io/blog/git4data-part2-hands-on
- MatrixOne: https://github.com/matrixorigin/matrixone
- 介绍页: https://git4data.ai
利益相关:我是 MatrixOrigin 的,做这个产品。
想听听大家的看法:
- 你们现在让 agent 写数据库,是怎么兜底的?只给只读权限、人工审 SQL ,还是别的办法?
- 行级 diff 审核这种方式,在你们的场景里实际用得上吗,还是太重了?