首页 / 文章

从 NL 到 SQL 的演示到沙箱式人工智能分析助手

从自然语言处理到SQL演示,再到隔离式人工智能分析助手:包括模式允许列表、静态检查、独立执行、查询结果限制以及每条查询的审计日志。

发布者:REACTAPP.TOP阅读约 4 分钟1006 词

来源: 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/内存使用,仅允许预定义的导入操作,设置超时时间,并只能读取已批准的数据集。

多层防御措施

多层防御架构:

  1. 提示词防火墙 —— 拒绝越狱尝试及超出范围的请求
  2. 模式白名单 —— 模型仅能访问已批准的字段
  3. 静态检查 —— 禁止导入操作、文件读写、eval函数及子进程调用
  4. 沙箱运行环境 —— 隔离执行过程
  5. 结果限制 —— 在返回用户界面前设置行数/字节数上限
  6. 审计日志 —— 记录请求者、运行的代码以及返回结果

追求弹性而非仅仅安全

针对短暂性故障进行重试,尽可能使用确定性种子,缓存模式配置信息,当模型无法安全回答时由人工介入处理。仅有安全性而没有弹性只会产生客气的错误提示。

最终形成的架构

网关 → 策略 → 规划器/提示器 → 沙箱执行器 → 格式化工具 → 审计模块。SQL仍可能作为简单过滤的内部工具出现,但“Python-in-a-box”能够处理复杂的分析需求,同时不会让任意代码进入系统仓库。

为何这个项目更有趣

NL-to-SQL只是一个翻译演示。而安全的分析助手则属于产品工程范畴:需要考虑威胁模型、沙箱机制、允许列表,以及能够解释拒绝理由的用户界面。这些才是值得持续投入的工作。

需提供一套完整的测试用例:良性查询、架构探测类查询以及恶意导入尝试。如果任何恶意案例在沙箱外执行,或者良性查询在没有明确理由的情况下被错误拒绝,则构建过程应失败。

提供一个黄金测试套件:包括良性查询、模式探测查询以及恶意导入尝试。如果任何恶意案例在沙箱外执行,或者良性案例在没有明确理由的情况下错误地拒绝处理,则构建失败。

提供一个黄金测试套件:包括良性查询、模式探测查询以及恶意导入尝试。如果任何恶意案例在沙箱外执行,或者良性案例在没有明确理由的情况下错误地拒绝处理,则构建失败。

提供一个黄金测试套件:包括良性查询、模式探测查询以及恶意导入尝试。如果任何恶意案例在沙箱外执行,或者良性案例在没有明确理由的情况下错误地拒绝处理,则构建失败。

提供一个黄金测试套件:包括良性查询、模式探测查询以及恶意导入尝试。如果任何恶意案例在沙箱外执行,或者良性案例在没有明确理由的情况下错误地拒绝处理,则构建失败。

提供一个黄金测试套件:包括良性查询、模式探测查询以及恶意导入尝试。如果任何恶意案例在沙箱外执行,或者良性案例在没有明确理由的情况下错误地拒绝处理,则构建失败。

提供一个黄金测试套件:包括良性查询、模式探测查询以及恶意导入尝试。如果任何恶意案例在沙箱外执行,或者良性案例在没有明确理由的情况下错误地拒绝处理,则构建失败。

提供一个黄金测试套件:包括良性查询、模式探测查询以及恶意导入尝试。如果任何恶意案例在沙箱外执行,或者良性案例在没有明确理由的情况下错误地拒绝处理,则构建失败。

提供一个黄金测试套件:包括良性查询、模式探测查询以及恶意导入尝试。如果任何恶意案例在沙箱外执行,或者良性案例在没有明确理由的情况下错误地拒绝处理,则构建失败。

提供一个黄金测试套件:包括良性查询、模式探测查询以及恶意导入尝试。如果任何恶意案例在沙箱外执行,或者良性案例在没有明确理由的情况下错误地拒绝处理,则构建失败。

提供一个黄金测试套件:包括良性查询、模式探测查询以及恶意导入尝试。如果任何恶意案例在沙箱外执行,或者良性案例在没有明确理由的情况下错误地拒绝处理,则构建失败。

提供一个黄金测试套件:包括良性查询、模式探测查询以及恶意导入尝试。如果任何恶意案例在沙箱外执行,或者良性案例在没有明确理由的情况下错误地拒绝处理,则构建失败。

提供一个黄金测试套件:包括良性查询、模式探测查询以及恶意导入尝试。如果任何恶意案例在沙箱外执行,或者良性案例在没有明确理由的情况下错误地拒绝处理,则构建失败。

测试用例包括:良性查询、模式探测查询以及恶意导入尝试。如果任何恶意用例在沙箱外执行,或者良性用例在没有明确理由的情况下错误拒绝,则构建失败。

测试用例包括:良性查询、模式探测查询以及恶意导入尝试。如果任何恶意用例在沙箱外执行,或者良性用例在没有明确理由的情况下错误拒绝,则构建失败。