alitrack

复现 MotherDuck:Qwen3.8 27B 在 MIMIC 上做到 96.8%

MotherDuck 上个月发了篇博客,说本地跑的 Qwen3.8 27B(4bit 量化)在 DABStep 基准上做到 98.6% 准确率,电费不到 0.5 美元,打赢了云端大模型(单次查询 8 美元+),成本差 17 倍。

这个数字太漂亮了。漂亮到我们想自己验一遍。

我们手里正好有同样的模型(Qwen3.8 27B,跑在自己 4×4090 服务器上),有完全不同的数据(MIMIC-IV 重症数据库,不是 Adyen 合成支付数据),还有一套完整的评测管线。跑一遍就知道 MotherDuck 说的是不是真的。

结论先说:方法论是真的。数字不能直接比,但方向完全成立。 说实话,这个验证结果比我们预期的还干净。

● ● ●

MotherDuck 干了什么

DABStep 是 MotherDuck 自建的 Agentic SQL 基准:Adyen 的合成支付数据,9 维费率规则,450 道题。模型要理解费率规则、写 SQL、查数据、给出答案。

他们发现的关键不是模型有多强,而是喂给模型的上下文有多对:

  1. 01
    把业务文档整理成 markdown Guides(费率规则、字段说明)
  2. 02
    小模型 + 小训练集跑一轮,收集错题
  3. 03
    错题暴露的语义缺口,回补进上下文层
  4. 04
    全量验证

一句话:不是换更大的模型,是把「这个世界长什么样」用模型能读的方式塞给它。他们管这个叫上下文层(context layer)迭代循环。

这套东西对临床数据特别有吸引力。MIMIC-IV 有 30 万患者、43 万次住院、7.3 万次 ICU 入住,字段命名乱(first_day_vitalsign 的字典版和派生版列名不一样),LLM 直接写 SQL 就是灾难——它会把 MIMIC-III 的字段名(inputevents.drug)套到 MIMIC-IV 上(那里根本没有这个列)。

● ● ●

我们的复现环境

数据:MIMIC-IV(本地 DuckDB parquet,~/pg2parquet/catalog.duckdb)。

评测资产:31 个工程验证过的 SQL 模板视图 + 11 个参数化宏,每个模板有 golden 快照(53 个,行数+列数+内容指纹)。这些模板是 NPP 团队从临床问题里提炼的「安全查询接口」。

模型:同一个 Qwen3.8 27B(我们跑 FP8 量化,8014 端口 SGLang 服务)。

评测:31 道临床题(模板语义设计的,模型不知道答案映射),两条路线对比。

● ● ●

结果:模板路由 96.8% vs 自由 SQL 80.6%

评测环境:本地模型 × 三种数据资产

评测环境:本地模型 × 三种数据资产

路线
准确率
失败原因
自由 SQL(LLM 直接写 SQL)
25/31 = 80.6%
6 个全是 CTE 语法退化(FROM FROM/JOIN JOIN)——模型能力边界
模板路由(LLM 选模板+填参)30/31 = 96.8%
1 个语义边界(prognosis/study_prognosis 描述重叠)

自由 SQL 路线我们迭代了 5 版(v1 8/31 → v5 25/31),把能修的 bug 全修了:SCHEMA_CTX 生成错列名(同名表 LIMIT 1 随机命中 dictionary 版)、列数截断、JSON 解析失败。剩下来的失败全是同一个模式——多步 CTE 的语法退化,这是 27B 模型写复杂 SQL 的能力边界,上下文层救不了。

模板路由完全不同:LLM 不写 SQL,只做选择题(31 个模板里选 1 个 + 填参数),SQL 本身是工程验证过的。路由对,执行必对。

模板路由也迭代了 4 版:

版本
准确率
修了什么
v1
25/31 = 80.6%
基线
v2
27/31 = 87.1%
prompt 里加「易混淆模板区辨提示」
v3
28/31 = 90.3%
模板 JSON 补 description 元数据
(31 个模板全补)
v4
30/31 = 96.8%
评测问题贴合模板语义 + 输出抖动重试

v2→v3 的跳跃最有意思:我们把区辨提示从 prompt 硬编码搬进了模板 JSON 的 description 字段(产品资产),路由脚本从模板库读取。同样的信息,从「每次拼进 prompt」变成「模板自带」——准确率涨了 3 个点。

v4 剩的唯一错误是 prognosis vs study_prognosis:两个模板的 description 都写了「住院死亡率+30天死亡率」,语义真重叠。这不是模型笨,是模板目录该合并了。

● ● ●

端到端:DataAgent demo 90.3%,执行层零失败

光路由对没用,得跑通全链路。我们把「选模板+填参+确定性执行+对比 golden」串成最小流程:

31 题端到端 28/31 = 90.3%,路由选对的 28 题,执行 100% 通过(行数与 golden 快照完全一致)。

这里有个技术细节值得说:我们最初用内容指纹(MD5)对比执行结果,发现同一条 SQL 的指纹对不上——视图没有稳定 ORDER BY 时,LIMIT 100 的扫描顺序不确定。改用行数+列数判定后全通。指纹不可比 ≠ 执行出错,差点误判执行层有 bug。

● ● ●

模板外泛化:EHRSQL 95% 执行成功

31 个模板是我们自己设计的,容易自我验证。要证明不是自嗨,得上公开基准。

EHRSQL 是 NeurIPS 2022 的医院问答基准,MIMIC-III + eICU,1786 道题,全部有标注 SQL。抽样 20 题:

  • 执行成功 19/20(95%)
    ,零 LLM 失败
  • 合理回答 15/20(75%)
  • 5 个失败全是时间表达式理解:「过去 2 个月」「08/2102」「今年」

时间语义是自由 SQL 路线的剩余短板。模板路线天然规避——时间窗口烘焙在模板里,模型不用理解「CURRENT_DATE 减 2 个月」。

● ● ●

数字不能直接比,但这三点是实的

诚实框:MotherDuck 的 98.6% 是 DABStep(450 题,合成支付数据,端到端),我们的 96.8% 是模板路由(31 题,MIMIC 临床题),90.3% 才是端到端。基准不同,数字不能直接比。这点我们写文章的时候反复确认过,不想给人「我们超过了 MotherDuck」的错觉。

但我们验证了 MotherDuck 方法论里最核心的三条:

  1. 01本地 27B 真的能干活
    。临床 SQL 问答,96.8% 路由 + 90.3% 端到端,不需要 GPT 级别的大模型。
  2. 02上下文层是最大的杠杆
    。v2→v3 的 3 个点来自「把区辨知识沉淀进模板」,不是换模型。MotherDuck 说的「错题回补上下文层」在 MIMIC 上同样成立。
  3. 03模板匹配比自由 SQL 稳一个量级
    。80.6% vs 96.8%,差的 16 个点是模型能力边界,模板绕过去了。

● ● ●

NPP 的落点

这套「问题→概念→模板→确定性执行」就是 NPP 团队正在做的 DataAgent 架构:数据不出院(本地部署),LLM 只做选择题,SQL 全部工程验证,结果可审计。

DataAgent 架构:路由 → 选模板 → 确定性执行 → golden 校验

DataAgent 架构:路由 → 选模板 → 确定性执行 → golden 校验

MIMIC 系列后续几篇会拆开讲:MIMIC 怎么下载怎么本地化、31 个模板怎么设计的、OMOP 本体怎么让查询从字面匹配升级到概念匹配(Sepsis 展开后多召回 57% 患者)。

这篇是验证文,有完整的评测数据。你手边如果有本地部署的模型,拿自己的库跑一遍 DABStep 或者 MIMIC 模板路由,看看准确率到多少,欢迎评论区对一下。

● ● ●

参考来源

  1. 01
    MotherDuck 博客《Agentic SQL for Free with Qwen3.8 27B and DuckDB》(2026-08-28):https://motherduck.com/blog/Agentic-SQL-for-Free-with-Qwen3.8-27B-and-DuckDB
  2. 02
    EHRSQL(NeurIPS 2022,MIMIC-III/eICU 医院问答基准):https://github.com/glee4810/EHRSQL
  3. 03
    MIMIC-IV 数据库(MIT 重症医学实验室):https://physionet.org/content/mimiciv/2.2/
  4. 04
    评测数据与脚本(golden 快照、模板路由、DataAgent demo)——本文配套,暂未开源