news 2026/10/26 11:31:11

200 行 Text2SQL 原型离可上线,还差哪些证据

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
200 行 Text2SQL 原型离可上线,还差哪些证据

把DDL放进提示词、调用模型、再执行SQL,确实能做出一个可运行原型。麻烦在于“运行过”只回答了最窄的问题:某次输入没有报错。它没有回答访问范围、资源占用、答案口径,以及该拒绝时是否拒绝。

10月15日的PremiseSQL预印本研究了错误前提下的Text2SQL:一个问题可能假设了不存在的实体、缺少必要信息,模型仍会生成可执行SQL。论文的基准结论不能直接变成企业准确率,但这个问题值得放进原型验收。

概念示意图,非控制台截图、跑分或真实事件记录。

把模型出口当作不可信输入

下面只演示SQLite执行边界,不调用模型。它创建临时合成数据库,重新以只读方式打开,仅允许读取orders表的id、amount两列。授权回调默认拒绝其余动作,进度回调限制虚拟机执行工作量,结果最多取三行。

import sqlite3 from pathlib import Path from tempfile import TemporaryDirectory with TemporaryDirectory() as folder: path = Path(folder) / "demo.db" con = sqlite3.connect(path) con.execute("CREATE TABLE orders(id INTEGER, amount INTEGER)") con.executemany("INSERT INTO orders VALUES(?,?)", [(1,120),(2,80)]) con.commit() con.close() db = sqlite3.connect(path.as_uri() + "?mode=ro", uri=True) def authorize(action, table, column, database, trigger): if action == sqlite3.SQLITE_SELECT: return sqlite3.SQLITE_OK if action == sqlite3.SQLITE_READ and table == "orders": if column in {"id", "amount"}: return sqlite3.SQLITE_OK return sqlite3.SQLITE_DENY db.set_authorizer(authorize) ticks = [0] def progress(): ticks[0] += 1 return ticks[0] > 100 db.set_progress_handler(progress, 1000) assert db.execute("SELECT id,amount FROM orders ORDER BY id").fetchmany(3) == [(1,120),(2,80)] denied = 0 for sql in ("DELETE FROM orders", "ATTACH DATABASE ':memory:' AS other"): try: db.execute(sql) except sqlite3.DatabaseError: denied += 1 assert denied == 2 assert db.execute("SELECT id FROM orders").fetchall() == [(1,),(2,)] db.close() print("PASS read allowed; DELETE/ATTACH denied; rows preserved")

SQLite官方文档说明,authorizer在语句准备过程中按操作被调用。图里的“准备、授权、执行”是逻辑职责区分,回调实际上嵌在prepare阶段,不是等整条SQL编译完后另做一次安全扫描。

这个例子刻意没有承诺什么

它没有实现通用SQL服务。CTE、聚合函数和其他表都未在许可集合里;这会拒绝一部分本来可以安全执行的查询。默认拒绝的代价要写出来,不能偷偷放宽后仍称“绝对安全”。

进度回调按SQLite虚拟机工作量触发,不是严格墙钟超时。fetchmany只限制本次取出的行数,不等价于优化器只处理这么多行。生产服务还需要在独立进程、连接和系统资源层设置预算,处理客户端取消后的清理。

SQLGlot可以检查语法和遍历AST,但它是解析、转译工具,不是数据库授权系统。一个SELECT仍可能读取越权列、调用有副作用的扩展函数,或者做高成本计算。

长上下文要怎样验收

把相同题目分别交给全量Schema与裁剪Schema,记录漏表、错误关联、重试与拒答。裁剪可能省输入,也可能剪掉必要关联;更长窗口可能保留元数据,也可能淹没关键注释。两种方案都该有失败例,而不是先选一个口号。

本地已运行上面的完整合成示例;SQLite授权与只读打开通过检查。未调用任何模型,也未验证MySQL/ClickHouse策略,不给准确率或并发能力结论。原型真正有价值的产物,是一份能说明“允许什么、拒绝什么、还有什么不知道”的接口契约。

本文的本地检查仅覆盖明确列出的合成示例;外部研究与产品文档不作为本人性能实测。

复现命令:将Python块保存为 readonly_demo.py,运行 python3 readonly_demo.py。核验环境:Python 3.9.6、SQLite 3.54.0、macOS arm64。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/26 10:48:09

GUI Agent定位优化:从12.9秒到0.3秒的缓存索引实战

如果你维护过 GUI Agent,一定对“定位慢”这三个字有阴影。所谓 GUI Agent,就是能看着屏幕、理解界面、自己点击操作的智能体。它最难啃的骨头之一,就是元素定位速度。我之前那版 Agent 单次定位平均要 12.9 秒,用户点一个按钮&am…

作者头像 李华
网站建设 2026/10/26 11:33:51

计算成像入门:前向模型、逆问题与AI先验的数学框架

1. 计算成像到底在算什么:从“拍照片”到“解方程”很多人第一次听到“计算成像”这四个字,脑子里浮现的画面大概是:拿个相机,按一下快门,然后电脑自动把照片修得更好看。这个理解不能说全错,但只摸到了皮毛…

作者头像 李华
网站建设 2026/10/25 9:39:16

黄金价格工业级分析系统:Qt+PyArrow+Statsmodels实战

1. 这不是“画个图就完事”的黄金价格项目,而是一套能真正盯盘、预判、回溯的工业级价格分析系统你在网上搜“黄金价格可视化”,大概率会看到一堆用 matplotlib 画几条折线、再套个 echarts 模板就号称“大数据”的Demo。但真正做交易、做风控、做宏观研…

作者头像 李华
网站建设 2026/10/25 9:08:48

零基础入门大模型:核心考点精讲与实战指南

1. 大模型技术入门:从零基础到考点精讲的全景认知1.1 为什么零基础也能啃下大模型这块硬骨头很多人一听到“大模型”三个字,第一反应就是“这玩意儿得数学系博士才能碰吧”。我带过不少转行的朋友,有做前端的、做运维的、甚至做行政的&#x…

作者头像 李华
网站建设 2026/10/25 9:08:44

大模型技术演进与实操落地:从Transformer到私有化部署全解析

1. 大模型技术演进的全景脉络1.1 从统计语言模型到神经语言模型的范式转换要聊大模型的发展史,得先把时间轴拉回到统计学习占主导的年代。早期做自然语言处理,主流思路是N-gram语言模型:给定前N-1个词,预测第N个词的概率。这个思路…

作者头像 李华