日期:2026-10-19。正文:第九章。本轮只查询已建立的账单 QM,没有改动 TM/QM、数据或服务配置。
http://127.0.0.1:18067;Namespace:chinook;数据源:chinook-sqlite;查询模型:ChinookInvoiceQueryModel。foggy-semantic-query Skill。副本为 练习目录\lab\data\Chinook_Sqlite.sqlite,模型目录为 lab/models。engine=java、runtimeApiVersion=foggy-runtime-api/v1、schemaVersion=2026-06-06、securityMode=none-dev-test-only;查询与模型描述能力可用。连接和命名空间绑定复查成功。所有请求位于 queries/chapter-09。query-manifest.json记录每个请求对应的校验、执行响应和本轮命令日志路径。每个请求先 validate,通过后才 execute;均成功、无分页截断。
| 请求 | 目的与实际结果 |
|---|---|
01-country-values.json |
在账单 QM 中按 billingCountry 分组,返回 24 个国家值,含 USA、Canada。国家是普通属性,本次使用语义分组查询取值,没有调用仅适用于维度的 members 接口 |
02-usa-2012.json |
日期范围与 USA 按 AND 组合,21 张账单,金额合计 127.98 |
03-two-countries-in.json |
同年、美国或加拿大、单张金额大于 10;5 张账单:278、298、299、311、320,合计 74.43 |
04-two-countries-or.json |
将 in 替换为显式 $or,其余条件保持不变,5 张账单及其字段完全相同 |
05-customer-having.json |
全年所有国家客户分组求和,having totalAmount > 20,返回 5 位客户 |
06-single-invoice-over-20.json |
全年单张金额 > 20,只返回账单 299,23.86 |
07-wrong-filter-before-sum.json |
主动构造语义对照:先筛单张 > 20 再按客户累计,只返回客户 26,23.86;这是合法的另一问题,并非引擎校验失败 |
08-empty-range.json |
1990 年日期范围,执行成功、返回空列表,不误报服务失败 |
累计金额超过 20 的完整结果:26 Richard Cunningham 25.84;34 João Fernandes 24.77;13 Fernanda Ramos 24.75;51 Joakim Johansson 24.75;55 Mark Taylor 22.77。结果恰与上一章 Top 5 相同,但本轮 limit 为 100,资格取决于 having。
本轮首次执行即通过,没有配置修复或查询错误。07 是主动构造的语义对照,不能写成 LLM 自然发生的错误。本文未声称日期为 1990 的问题在独立自然语言会话中的回答行为已验收。
验证脚本只读读取 Invoice、Customer 原始行,用 Python 条件筛选、字典分组和 Decimal 求和,不以语义查询结果生成预期。
结果见baseline.json与acceptance.json。通过范围为现有教学账单模型上的筛选请求和实际数值,不包括独立干净会话、生产权限或浏览器问数。
新增两个同题物理 SQL:text-sql-two-countries.sql、text-sql-customer-having.sql,分别对照美加大额账单及客户累计金额筛选。复查能力和命名数据源连接后,通过公开 CLI sql query --file 只读执行,最多 100 行、5 秒超时,两份均成功且未截断。
结果与已有 DSL 响应逐行核对:两种查询各返回 5 行,ID、名称、日期、国家、金额及排序一致。金额按两位小数比较。报告见 text-sql-comparison.json,其中链接实际调用记录。
SQL 是当前 Codex 会话编写的同题参考样本,不是另一个 Text-to-SQL 系统独立生成的运行记录,也不构成两条路线的准确率或成本评测。按用户要求,这部分已从正文移除,且不再包含在本章常规复跑命令中;原 SQL、脚本和响应仅作为历史试跑资料保留。
服务和第八章模型就绪后,在 lab 目录执行:
python -X utf8 .\checks\collect-chapter-09.py
python -X utf8 .\checks\verify-chapter-09.py
采集脚本实时读取能力、连接、模型说明和国家值,再生成并逐一校验、执行请求。每次命令记录使用时间戳文件名,保留上一轮响应。无需重新建模、登记数据源或下载样例。
用户原意是尽量在相同条件下比较直接 Text-to-SQL 与经过语义层的生成、执行正确性,例如各运行 10 次,而非作者手写两份等价查询后比较结果。具体评测方案后续另议,目前不执行或安排此类对比。