从 NL 到 SQL 的演示到沙箱式人工智能分析助手
从自然语言处理到SQL演示,再到隔离式人工智能分析助手:包括模式允许列表、静态检查、独立执行、查询结果限制以及每条查询的审计日志。
来源: From “Natural Language to SQL” to a Secure AI Analytics Assistant: An Architecture Evolution
让语言模型编写并运行用于分析的代码属于多层防御机制的问题,而非提示词技巧所能解决的。
初始问题
企业用户有各种需求——比如“各城市的平均房价”、“价格最高的十大房产”、“每平方英尺的最高价格”——但他们没有SQL技能。显而易见的解决方案是将自然语言转换为SQL:用英语提出问题,生成查询语句,然后执行它。
第一种方案:简单的自然语言转SQL
早期版本能够根据问题生成SQL语句,并在数据仓库中执行。演示效果令人印象深刻。但随后会出现一些情况:有些计算用SQL难以表达,模型会自行创建列,或者经过精心设计的提示词试图执行DROP TABLE操作。
SELECT city, AVG(house_price) AS avg_price
FROM house_pricing
GROUP BY city;
SELECT department, AVG(salary) FROM employees GROUP BY department;
result = (
df.groupby("department")["salary"]
.mean()
.reset_index()
)
import os
os.remove("file.csv")
import subprocess
subprocess.run(…)
完全摆脱SQL的思路
更灵活的方案:让模型针对受限的数据框 API 编写简短的 Python 代码,而非原始的 SQL 字符串。这样既能实现类似 pandas 的分析功能,若不加控制执行的话也会扩大风险范围。
确保提示语的可靠性
可靠的提示语应满足以下条件:
- 仅包含允许使用的表/列的架构卡片
- 安全模式的少量示例
- 当问题需要使用被禁止的字段时明确拒绝
- 结构化输出(代码块或 JSON),便于执行工具解析
最关键的问题:执行大语言模型生成的代码
执行环节是安全边界。绝不能以完整权限在应用进程中运行模型代码。应使用沙箱环境:禁止网络访问,限制 CPU/内存使用,仅允许预定义的导入操作,设置超时时间,并只能读取已批准的数据集。
多层防御措施
多层防御架构:
- 提示词防火墙 —— 拒绝越狱尝试及超出范围的请求
- 模式白名单 —— 模型仅能访问已批准的字段
- 静态检查 —— 禁止导入操作、文件读写、
eval函数及子进程调用 - 沙箱运行环境 —— 隔离执行过程
- 结果限制 —— 在返回用户界面前设置行数/字节数上限
- 审计日志 —— 记录请求者、运行的代码以及返回结果
追求弹性而非仅仅安全
针对短暂性故障进行重试,尽可能使用确定性种子,缓存模式配置信息,当模型无法安全回答时由人工介入处理。仅有安全性而没有弹性只会产生客气的错误提示。
最终形成的架构
网关 → 策略 → 规划器/提示器 → 沙箱执行器 → 格式化工具 → 审计模块。SQL仍可能作为简单过滤的内部工具出现,但“Python-in-a-box”能够处理复杂的分析需求,同时不会让任意代码进入系统仓库。
为何这个项目更有趣
NL-to-SQL只是一个翻译演示。而安全的分析助手则属于产品工程范畴:需要考虑威胁模型、沙箱机制、允许列表,以及能够解释拒绝理由的用户界面。这些才是值得持续投入的工作。
需提供一套完整的测试用例:良性查询、架构探测类查询以及恶意导入尝试。如果任何恶意案例在沙箱外执行,或者良性查询在没有明确理由的情况下被错误拒绝,则构建过程应失败。
提供一个黄金测试套件:包括良性查询、模式探测查询以及恶意导入尝试。如果任何恶意案例在沙箱外执行,或者良性案例在没有明确理由的情况下错误地拒绝处理,则构建失败。
提供一个黄金测试套件:包括良性查询、模式探测查询以及恶意导入尝试。如果任何恶意案例在沙箱外执行,或者良性案例在没有明确理由的情况下错误地拒绝处理,则构建失败。
提供一个黄金测试套件:包括良性查询、模式探测查询以及恶意导入尝试。如果任何恶意案例在沙箱外执行,或者良性案例在没有明确理由的情况下错误地拒绝处理,则构建失败。
提供一个黄金测试套件:包括良性查询、模式探测查询以及恶意导入尝试。如果任何恶意案例在沙箱外执行,或者良性案例在没有明确理由的情况下错误地拒绝处理,则构建失败。
提供一个黄金测试套件:包括良性查询、模式探测查询以及恶意导入尝试。如果任何恶意案例在沙箱外执行,或者良性案例在没有明确理由的情况下错误地拒绝处理,则构建失败。
提供一个黄金测试套件:包括良性查询、模式探测查询以及恶意导入尝试。如果任何恶意案例在沙箱外执行,或者良性案例在没有明确理由的情况下错误地拒绝处理,则构建失败。
提供一个黄金测试套件:包括良性查询、模式探测查询以及恶意导入尝试。如果任何恶意案例在沙箱外执行,或者良性案例在没有明确理由的情况下错误地拒绝处理,则构建失败。
提供一个黄金测试套件:包括良性查询、模式探测查询以及恶意导入尝试。如果任何恶意案例在沙箱外执行,或者良性案例在没有明确理由的情况下错误地拒绝处理,则构建失败。
提供一个黄金测试套件:包括良性查询、模式探测查询以及恶意导入尝试。如果任何恶意案例在沙箱外执行,或者良性案例在没有明确理由的情况下错误地拒绝处理,则构建失败。
提供一个黄金测试套件:包括良性查询、模式探测查询以及恶意导入尝试。如果任何恶意案例在沙箱外执行,或者良性案例在没有明确理由的情况下错误地拒绝处理,则构建失败。
提供一个黄金测试套件:包括良性查询、模式探测查询以及恶意导入尝试。如果任何恶意案例在沙箱外执行,或者良性案例在没有明确理由的情况下错误地拒绝处理,则构建失败。
提供一个黄金测试套件:包括良性查询、模式探测查询以及恶意导入尝试。如果任何恶意案例在沙箱外执行,或者良性案例在没有明确理由的情况下错误地拒绝处理,则构建失败。
测试用例包括:良性查询、模式探测查询以及恶意导入尝试。如果任何恶意用例在沙箱外执行,或者良性用例在没有明确理由的情况下错误拒绝,则构建失败。
测试用例包括:良性查询、模式探测查询以及恶意导入尝试。如果任何恶意用例在沙箱外执行,或者良性用例在没有明确理由的情况下错误拒绝,则构建失败。