← 返回 2026-04-10

用大语言模型自动合成数据库内核函数代码 Automating Database-Native Function Code Synthesis with LLMs

Wei Zhou, Xuanhe Zhou, Qikang He, Guoliang Li, Bingsheng He, Quanqing Xu, Fan Wu 📅 2026-04-02 👍 17 2026-07-13 08:36
代码生成 大语言模型 数据库系统 智能体 软件工程

DBCooker:基于LLM的数据库原生函数自动合成系统,三大模块协同覆盖声明解析、参考单元复用与自适应编排,在三大主流数据库上平均准确率提升34.55%。

前置知识

数据库原生函数(Database-Native Function)

指数据库内核中以 C/C++ 实现的内置 SQL 函数,与 UDF(用户自定义函数)不同,它直接集成到数据库引擎的编译产物中。例如 PostgreSQL 的 date_trunc()、DuckDB 的 sqrt()、SQLite 的 abs() 等都属于这一类。这类函数需要在系统目录(system catalog,如 pg_proc)注册声明,并在特定源文件(如 timestamp.c)中实现核心逻辑,可调用大量内部宏与辅助函数。

理解它是阅读本文的前提,因为 DBCooker 解决的问题就是「自动生成这类内核级 C/C++ 代码」,其困难(多函数单元、跨文件引用、版本差异)都源自这种「紧耦合 + 内核集成」的特性。

函数声明与函数单元(Function Declaration & Function Unit)

函数声明 $f_{dec}$ 描述 SQL 层接口(函数名、参数类型、返回类型、说明),通常存放在系统目录或数据文件中。函数单元 $f_{unit}$ 则是 C/C++ 源码层面可独立编译的执行片段,包含若干代码块 $c_{block}$,每个块负责某个子任务(参数解析、计算逻辑、输出格式化等)。一个 SQL 函数往往对应多个 $f_{unit}$,按输入类型或执行路径分派。例如 PostgreSQL 的 date_trunc() 就注册了 timestamptz_trunc、interval_trunc、timestamptz_trunc_zone 等 4 个单元。

这是 DBCooker Function Characterization 模块要解析的核心结构。识别出「应该实现哪些 unit」「哪些是可复用的 reference」是该论文整个方法的基础。

代码生成中的检索增强(RAG for Code)

在调用 LLM 生成代码前,先从代码库中检索相关的函数单元、宏、类型定义等作为上下文输入,以减少幻觉与文件搜索开销。论文中用 CodeRAG 作为基线增强方案,通过静态分析定位 ground-truth 引用单元并喂给 LLM。

DBCooker 的对照实验直接依赖此概念。RAG 平均为 LLM 带来 50.56% 的准确率提升,但 DBCooker 通过更结构化的「plan + 模板 + 验证」仍比最佳 RAG 配置再高 34.55%,读者需理解 RAG 的边界才能看懂作者论证。

智能体框架与工具调用(Agent & Tool-Use)

智能体让 LLM 通过多轮「思考—工具调用—观察」循环完成复杂任务。Claude Code、TRAE、Qwen Code 等均属此类。论文指出通用智能体在数据库项目中存在「过度文件搜索、忽略验证、不复用相似函数」三大问题:例如 Claude Code 有 63.70% 的操作花在 Search Repo 与 Read File 上,只有 4.95% 在 Update File。

这是 DBCooker 改进的对象。DBCooker 的「Operation-as-Tool Abstraction」与「Memory-Augmented Stepwise Orchestration」正是为了把智能体框架的优势与数据库领域知识结合。

k-means 难度分级与剪枝(Pruning & Clustering)

DBCooker 用 k-means 按「函数单元数 + 代码 token 数 + 引用单元数」把函数自动分到 EASY/MEDIUM/HARD 三档;同时通过两两单元比对,把同类函数中可复用的代码段(公共头、注册宏)抽取为「剪枝后」模板,把差异化部分保留为占位符。剪枝停止条件为 $\frac{|f_{pruned}^{(t)}|}{|f^{(t)}|} < \frac{|f_{pruned}^{(t-1)}|}{|f^{(t-1)}|}$,即剪枝比例下降即收敛。

理解这两点能解释 DBCooker 为何在 HARD 函数上比基线高 197.10%——它靠聚类识别难度、靠剪枝压缩代码生成量。

研究动机

数据库内核的原生函数数量近年来增长极其迅猛:PostgreSQL 从 v11 的 237 个增至 v18 的 630 个(增长约 2.7 倍),DuckDB 从 v0.3.3 的 60 个增至 v1.4.0 的 666 个(增长 11 倍),SQLite 从 v3.8.0 的 52 个增至 v3.50.0 的 143 个。需求主要来自 BI 分析、几何处理等新场景,以及 Oracle→PostgreSQL 等跨数据库迁移(重构代码占迁移预算 30%–60%,每千行需 40–80 小时)。但合成一个数据库函数本身极其复杂:以 PostgreSQL date_trunc() 为例,开发者需 (1) 在 pg_proc.dat 中按 prorettype 等注册多个函数单元(如 timestamptz_trunc、interval_trunc);(2) 找到正确的源文件(如 timestamp.c);(3) 引用正确的内部辅助单元(如 PG_GETARG_TEXT_PP)。仅实现这 4 个注册单元,若不引用参考代码需 6,235 行、跨 225 个函数;而合理复用 reference 可削减 94.95% 的代码量。现有方法(LLM 直生成、CodeRAG、Claude Code/Qwen Code/TRAE 等智能体)存在三大系统性问题:(a) 不识别数据库的「一 SQL → 多 unit」特性,如 Qwen Code 合成 date_trunc() 时遗漏了 interval 输入分支;(b) 智能体平均 63.70% 时间在做文件搜索而不是写代码,4.95% 时间在 Update File;(c) 对所有函数采用相同静态流水线,无法区分 sqrt() 这种简单包装与 json_agg() 这种自定义聚合逻辑。论文统计显示 LLM 与 Claude Code 产生的错误中,81.76% 与「声明错误」相关(重复声明、参数不匹配引用等)。

本文的目标是DBCooker 旨在成为第一个能端到端自动合成数据库原生函数(覆盖声明、跨文件实现、验证全流程)的 LLM 系统。论文设定的可量化目标包括:在 SQLite、PostgreSQL、DuckDB 三个主流数据库上(覆盖 C 与 C++ 实现),在合成精度 $\text{Acc}_{EXE}$(成功编译+集成)和 $\text{Acc}_{RES}$(通过所有测试用例得到预期输出)两个指标上,平均比 SOTA(包括 Claude Code、TRAE、Qwen Code、Claude Opus 4.1、GPT-5、Claude Sonnet 4.5 等)提升 34.55%;并在最新版 SQLite(v3.50)中合成其原本不存在的 17 个新函数(覆盖聚合、日期、数值、字符串四大类)。

与已有工作不同的是,本文的独特切入角度是把数据库原生函数合成视为「结构化模板填充 + 跨单元引用复用 + 自适应编排」的系统工程,而非简单的「LLM 代码生成 + 测试」流水线。具体而言:(1) 作者用 1.2 节 Pilot Study 量化诊断了通用方法的失败模式——声明错误占 81.76%、智能体时间分配严重失衡;(2) 提出「Function Characterization」先于「Code Generation」的思路,用图模型把 SQL 函数静态拆解为 distinct unit + reference unit 的模板骨架;(3) 设计「Operation-as-Tool Abstraction + Memory-Augmented Orchestration」,用历史轨迹库(trajectory memory)来适配不同复杂度函数(EASY 包装 vs. HARD 聚合)。这些切入点在以往 LLM 代码生成工作(Copilot、Claude Code、Code Llama、StarCoder 等)和 UDF 优化工作(Froid、Tuplex)中都未涉及,后者只关注 SQL 层改写或运行时编译,不解决内核级 C/C++ 合成问题。

核心方法

DBCooker 的整体思路可以类比为「一位经验丰富的数据库内核开发者的外脑」:他不会一上来就写代码,而是先翻阅文档与系统目录、画出依赖图、找到可复用的样板代码、列出实现计划(pseudo-plan),再按计划填空写代码,最后用语法检查、内核编译、SQL 测试三层把关。如果中途发现计划错了,他会回退到从零生成模式。其技术路线由三大模块构成:(1) **Function Characterization**——用文档解析 + 系统目录查询收集声明,用图遍历 + 两两剪枝识别 distinct unit,用静态依赖 + 类型特化剪枝提取 reference unit;(2) **Function Synthesis Operations**——先基于元数据匹配同类函数生成多个 pseudo-plan 并按打分函数选最优,再用「fill-in-the-blank」方式让 LLM 填模板,最后用 ANTLR 语法检查、make install 合规检查、LLM 生成 SQL 测试做三层渐进验证;(3) **Adaptive Function Synthesis**——把所有操作(bash、静态分析、LLM 调用)封装为统一工具接口,并维护一个按函数类别组织的轨迹记忆库,LLM 在每步基于上下文与同类函数的轨迹决定下一步调用哪个工具。

DBCooker 与现有方法的本质区别是把「代码生成」重新表述为「**结构化模板填空 + 概率性回退**」,并把「**自适应工具编排**」作为顶层控制逻辑。已有的 LLM 直生成(GPT-5/Claude/Qwen3-Coder)依赖内部先验,无法定位 scattered reference;CodeRAG 只补足检索,仍把整个函数体留给 LLM 自由发挥;通用智能体(Claude Code/TRAE)则陷入「文件搜索-阅读-猜写」的循环。论文的核心创新点有三:(1) **Pseudo-based Plan Generation**——把「该实现哪些 unit、放在哪个文件、引用哪些宏」显式列成结构化骨架,并行生成多个候选,按 $R_k = \alpha \cdot N(v_k^1) + \beta \cdot N(v_k^2) + \gamma \cdot N(v_k^3)$ 打分($\alpha=\beta=0.4, \gamma=0.2$)挑出最优,从而把 LLM 的「隐式推理」外化为「显式可验证的代码骨架」;(2) **Hybrid Fill-in-the-Blank**——把同类函数剪枝出的模板作为「带占位符的代码块」喂给 LLM,并引入概率回退 $P(n) = \alpha^n$(默认 $\alpha=0.7$ 左右),失败次数越多越倾向于从零生成,避免错误模板的污染;(3) **Memory-Augmented Tool Orchestration**——把每个函数合成过程的 (declaration, trajectory, summary) 三元组存入记忆库 M,下次合成同类函数时从 M 中按「最小/中位/最大工具调用数」挑出 3 条轨迹作为 in-context 参考,让 LLM 在选下一步工具时能参考「同类函数过去是怎么走通的」。这三个机制叠加,使 DBCooker 能把 HARD 函数(多 unit、多 reference、复杂分支)从基线 18.90% 的 $\text{Acc}_{RES}$ 抬升到 57.14%。

方法步骤详情

DBCooker 的端到端流程可拆解为 7 个步骤:**(1) 函数声明收集**:从官方文档(如 PostgreSQL 文档第 9 章)解析出 $f_{dec}^{text}$(名称、描述、参数、SQL 示例),同时查询系统目录(如 pg_proc 表、pg_proc.dat 文件)得到 $f_{dec}^{code}$(oid、prorettype、proargtypes、prosrc),合并为统一 JSON。**(2) 依赖图构建**:以 SQL 函数名为关键词定位注册入口 $f_{reg}^{unit}$(如 function_list.cpp 中的 DatePartFun),用静态分析工具递归扩展参考图 $G_f = (V_f, E_f)$,当新发现的 unit 数小于阈值时停止。**(3) Distinct Unit 识别**:按声明对 unit 分组(如 Time Functions、Math Functions),在每组内随机两两配对,沿 $G_f$ 路径做代码块级精确匹配剪枝,输出 $f_{pruned}^{unit} = f_{unit}^{(a)} \cap f_{unit}^{(b)}$;多轮迭代至剪枝比例不再下降,保留 top-$k$ 出现频率最高的剪枝模板。**(4) Reference Unit 抽取**:沿 $G_f$ 收集所有引用,按类型特化剪枝(保留 ScalarFunctionSet 的声明列表,剔除 GetFunctionByArguments 等完整方法体),得到精简的 reference 集合 $\{f_{ref}^{unit}\}$,合成中可按需 adaptive expansion。**(5) Pseudo-Plan 生成**:把 (3)(4) 输出的元数据喂给 LLM,并行生成 $n$ 个候选 plan,每个 plan 列出每个 unit 的「自然语言步骤描述 + 潜在引用元素 + 文件位置」;用打分函数 $R_k$ 过滤掉低分 plan(阈值 0.5),保留最佳。**(6) Fill-in-the-Blank 合成**:按 plan 把代码骨架中占位符处用剪枝模板填充(component-aware),由 LLM 生成 distinctive 部分的代码;多候选投票合并;如果连续失败,按 $P(n)=\alpha^n$ 衰减概率,最终退化为从零生成。**(7) 三层验证 + 自适应迭代**:先 ANTLR 语法检查,再 `make install` 合规编译,最后 LLM 基于专家指令 + 已有测试集 + 拆解代码块生成 SQL 测试,语义级不通过则回到 (5) 重生成 plan。每条合成轨迹 $(f_{dec}, C, s)$ 存入记忆库 M,下次合成同类函数时按「最小/中位/最大」工具数挑 3 条作参考。整个过程由 LLM 控制器决定下一步调哪个工具,直到 $o_p^{stop}$ 终止。

技术新颖性

技术新颖性体现在三个层面的工程化整合:(1) **静态结构化先验**:把数据库的「声明-单元-引用」三层结构用图 + 剪枝算法显式编码进 LLM 上下文,区别于通用 LLM 的「黑盒先验」和 CodeRAG 的「整段检索」。具体地,pairwise pruning 把 $G_f$ 路径上的代码块用集合交集 $f_{pruned}^{unit} = f_{unit}^{(a)} \cap f_{unit}^{(b)}$ 形式化为数学操作,是 SQL/PL 优化领域常见的「公共子表达式提取」思想在 LLM 时代的新应用。(2) **Plan-then-Fill 的两阶段生成**:先用结构化 plan 锁定「该写在哪、引用什么」,再用 fill-in-the-blank 降低 LLM 单次生成压力,相当于把「长上下文生成」拆成「短指令生成 + 局部填空」,缓解幻觉。(3) **轨迹记忆 + 工具编排**:借鉴了 SWE-Agent、AutoGen 等智能体框架的 tool-use 思想,但额外用「同类函数轨迹的统计分布(min/median/max)」做 quality control,让记忆库既紧凑又有覆盖度,且通过 LLM 控制器 + 历史轨迹的混合决策(hybrid optimization)实现「LLM 自主性 + 经验复用」的平衡。相较 UDF 优化(Froid 把 UDF 改写为关系代数、Tuplex 编译 Python UDF)和临时代码生成(HyPer 用 LLVM JIT、Weld 用中间表示),DBCooker 解决的是「持久化的、跨版本演化的、版本敏感的内核 C/C++ 代码」生成问题,是 LLM for Database Engineering 这一新方向的代表性工作。

Technique Overview of DBCooker.
Figure 3: Technique Overview of DBCooker.
Example Function Unit Identification.
Figure 4: Example Function Unit Identification.
Example Pseudo-based Coding Plan.
Figure 5: Example Pseudo-based Coding Plan.
Synthesis Model Adaption Example.
Figure 6: Synthesis Model Adaption Example.

实验结果

论文在 SQLite(75 个函数)、PostgreSQL(145 个)、DuckDB(128 个)上对比了 11 种基线,包括 GPT-5、Claude Opus 4.1、Claude Sonnet 4.5、Qwen3 Coder Plus 4 个 LLM,加上其 CodeRAG 增强变体,再加上 Claude Code、Qwen Code、TRAE 3 个智能体。**主要发现 1:整体精度大幅领先**。DBCooker 在三个数据库上 $\text{Acc}_{EXE}$ 分别为 81.33%、78.62%、83.67%,$\text{Acc}_{RES}$ 分别为 69.33%、58.62%、67.35%,平均比 SOTA 高 34.55%(论文同时报告按百分比平均提升为 124.37% 的 $\text{Acc}_{EXE}$ 和 149.68% 的 $\text{Acc}_{RES}$,两个口径并列,34.55% 是按论文标题口径给出)。**主要发现 2:难度越大优势越明显**。在 EASY 函数上 DBCooker $\text{Acc}_{EXE}$ 89.51%(按 96.77+71.79+75.71 取均),MEDIUM 80.21%,HARD 80.21%(按 79.17+90.91+59.09 取均);其中 HARD 类上 DBCooker $\text{Acc}_{RES}$ 达 57.14%,比次优 Claude Code(28.57%)高 197.10%。这与「通用 LLM 在 HARD 上从 EASY 的 32.16% 跌到 18.90%」形成鲜明对比,证明自适应编排对复杂函数至关重要。**主要发现 3:类别均衡**。在 PostgreSQL 的 Math/Date/String/JSON 四类上,DBCooker $\text{Acc}_{EXE}$ 分别为 96.67%、94.12%、89.19%、95.45%,比次优方法在 Math 上高 20.0pp(83.33% → 96.67%),在 String 上高 26.03pp(63.16% → 89.19%)。**主要发现 4:检索瓶颈不是唯一失败原因**。即便给智能体 (+Hint) 完整提供文件路径 + 声明 + 引用,Qwen Code/Claude Code (+Hint) 仍比 DBCooker 平均低 22.56%,错误表现为「未定义引用」与「类型语义错误」(如把 int64 误用为 double 导致数值损坏)。**主要发现 5:消融验证各模块必要性**。去掉 Function Characterization 后 $\text{Acc}_{EXE}$ 跌至 68.0/31.25/44.90;去掉 Progressive Code Validation 后 PostgreSQL 暴跌至 6.9%;去掉 Pseudo-Plan Generation 同样在 PostgreSQL 上从 78.62% 跌至 6.9%。三模块全关时三个数据库 $\text{Acc}_{EXE}$ 分别只剩 18.67%、9.66%、26.53%。**主要发现 6:合成新函数**。在 SQLite v3.50 中不存在的 17 个新函数(covar_pop、bool_and、bool_or、century、monthname、yearweek、last_day、lcm、even、gamma、lgamma、nextafter、left、regexp_split_to_array、repeat、to_hex、translate),DBCooker 全部成功实现并通过测试,而基线对 9–13 个函数完全失败(如 Claude Code 未能实现 century,TRAE 未能实现 translate)。

Code Synthesis Accuracy (%) over Varying Function Difficulty.
Table 1: Code Synthesis Accuracy (%) over Varying Function Difficulty.
Code Synthesis Accuracy (%) over Function Category.
Table 2: Code Synthesis Accuracy (%) over Function Category.
Code Synthesis Accuracy (%) of DBCooker Variants.
Table 3: Code Synthesis Accuracy (%) of DBCooker Variants.
Extending SQLite with New Native Functions Generated by DBCooker.
Table 4: Extending SQLite with New Native Functions Generated by DBCooker.
Overall Code Synthesis Accuracy (%) of Different Synthesis Methods.
Figure 7: Overall Code Synthesis Accuracy (%) of Different Synthesis Methods.
Error Distribution of Different Synthesis Methods.
Figure 8: Error Distribution of Different Synthesis Methods.
Code Synthesis Accuracy (%) with Full Context.
Figure 9: Code Synthesis Accuracy (%) with Full Context.
查看结构化数据
任务指标本文基线提升
SQLite 函数合成(Compilable) Acc_EXE (%) 81.33 TRAE 76.0 (次优); Claude Code 57.33; Claude Opus 4.1+CodeRAG 32.26 +5.33 vs TRAE;+24.0 vs Claude Code;+49.07 vs 最佳 LLM+CodeRAG
SQLite 函数合成(Test-passing) Acc_RES (%) 69.33 TRAE 60.0; Claude Code 31.25; Claude Opus 4.1+CodeRAG 16.67 +9.33 vs TRAE;+38.08 vs Claude Code;+52.66 vs 最佳 LLM+CodeRAG
PostgreSQL 函数合成(Compilable) Acc_EXE (%) 78.62 TRAE 68.75; Claude Code 39.84; Claude Opus 4.1+CodeRAG 26.09 +9.87 vs TRAE;+38.78 vs Claude Code;+52.53 vs 最佳 LLM+CodeRAG
PostgreSQL 函数合成(Test-passing) Acc_RES (%) 58.62 TRAE 36.55; Claude Code 35.17; Claude Opus 4.1+CodeRAG 17.39 +22.07 vs TRAE;+23.45 vs Claude Code;+41.23 vs 最佳 LLM+CodeRAG
DuckDB 函数合成(Compilable) Acc_EXE (%) 83.67 TRAE 78.62; Claude Code 52.0; Claude Opus 4.1+CodeRAG 47.14 +5.05 vs TRAE;+31.67 vs Claude Code;+36.53 vs 最佳 LLM+CodeRAG
DuckDB 函数合成(Test-passing) Acc_RES (%) 67.35 TRAE 50.0; Claude Code 44.0; Claude Opus 4.1+CodeRAG 45.71 +17.35 vs TRAE;+23.35 vs Claude Code;+21.64 vs 最佳 LLM+CodeRAG
HARD 难度函数合成(跨库平均) Acc_RES (%) 57.14(PostgreSQL)/21.43–28.57(SQLite/PG 残值,加权约 35-40) Claude Code 28.57(PostgreSQL HARD);平均 18.90(LLM/RAG 类) +28.57 pp vs Claude Code;+197.10% 相对提升(按论文报告值)
SQLite 新函数合成(17 个) 成功实现数 / 17 17/17 TRAE 11/17; Claude Code 8/17; Qwen Code 7/17 +6 / +10 / +10 个

局限与改进

作者在结论与正文中坦承的局限主要有三点:(1) **依赖静态分析与目标数据库版本**——Function Characterization 阶段用静态分析工具(如 doxygen 等)构建依赖图,需要目标数据库源码结构稳定;论文虽声明「参数不需按数据库调优」,但 PostgreSQL 13–18 之间函数签名、宏定义、pg_proc.dat 字段的演化仍可能让旧版构建的特征失效。Section 9 也指出「未来 LLM 也不可能完全规避版本漂移问题」。(2) **轨迹记忆库的冷启动与可扩展性**——记忆库 M 在 SQLite/PG/DuckDB 上分别有 90/174/154 条轨迹,论文承认「filtered from 550/830/762 initial trajectories」,即每条函数平均产生 7–11 次失败尝试才入记忆库,这意味着冷启动期(如合成某全新类别的函数)成本较高。(3) **HARD 函数仍存在天花板**——即便 DBCooker 最好,PostgreSQL HARD 类 $\text{Acc}_{RES}$ 也只有 56.82%,SQLite/PG 复合 HARD 上仍比 EASY 低 25pp,说明对极复杂聚合函数(如 json_agg、json_pretty)仍有改进空间。本人独立观察到的额外局限:(a) 三层验证依赖目标数据库能完整编译(`make install`),对交叉编译或自定义 build 选项的场景不友好;(b) 论文以「合成后通过测试」为成功标准,但未评估性能(如与原生实现的执行时间对比),合成代码可能存在性能回退;(c) Pseudo-Plan 的并行生成数 $n$ 与打分阈值 0.5、衰减因子 $\alpha$ 均为启发式,缺乏对超参数敏感性的系统消融;(d) 评估中 GPT-5/Claude 等商业 LLM 版本会随时间变化,论文复现性会受 API 漂移影响。

独立分析的弱点

独立分析论文存在的弱点与改进方向:(1) **轨迹记忆库的统计偏差风险**——论文用 min/median/max 三档代表同类函数轨迹,但若某类别内函数质量分布极不均衡(如 Date 类大部分 EASY,但偶尔出现 HARD),记忆库中三条样本可能都偏向简单,导致 HARD 函数合成时 LLM 被误导去「少调工具」反而漏掉关键验证。**改进方向**:在记忆库中按「难度分桶 + 工具调用数」双重索引,检索时根据当前函数的 k-means 难度标签挑选同档轨迹。(2) **三阶段验证的级联失败传播**——若 ANTLR 语法检查或 `make install` 在某些数据库版本上不稳定,会让后续 LLM 收到「假阴性」反馈,从而错误地触发 plan 重生成。**改进方向**:为每层验证加可信度评分,只在「连续 2 次相同错误」时才回退到 plan 重生成;或引入回归测试集验证验证器本身。(3) **对新增 reference 的处理偏保守**——Section 4.3 的 Adaptive Expansion 只在合成时按需扩展 reference,但剪枝阶段(Section 4.2)会丢失远距离引用(>2 hop),导致对跨文件依赖深的函数支持不足。**改进方向**:把 reference 检索从「2-hop 剪枝」升级为「lazy 加载 + 重要性采样」,按 LLM 关注度动态扩展;可结合 GNN 学习 reference 重要性。(4) **缺乏性能维度评估**——论文只验证正确性,没有评估合成函数的运行时开销。对于数据库内核函数,错误地用了 `int64` 而非 `double`、或多余的拷贝/类型转换,都可能让用户能跑但跑得慢。**改进方向**:在 semantic validation 中加性能 oracle(如「与 ground-truth 实现输出 ≤ 1.2 倍时间」)。(5) **对 prompt 注入与安全验证不足**——数据库函数接受 SQL 字符串作为参数时,存在注入风险;论文未讨论 LLM 生成代码的 SQL injection 安全性。**改进方向**:在 semantic level 增加 fuzz testing 与 adversarial SQL 样例。

未来方向

作者在 Section 9 明确给出三个未来方向:(1) **大规模代码库碎片化 vs. 长上下文推理**——即便未来 LLM 支持百万 token,直接塞 PostgreSQL 百万行也带来高成本与噪声;DBCooker 的 Function Characterization 通过显式 unit identification 让 LLM 只需关注相关小集合。(2) **确定性正确性要求 vs. 概率性生成**——未来 LLM 仍不能保证内核级 correctness,必须依赖伪计划 + 三阶段验证这类外部约束把概率性输出「翻译」为可验证实现。(3) **动态代码库适配 vs. 静态训练偏差**——未来 LLM 训练数据会混合多版本数据库,存在已废弃约定;DBCooker 通过版本敏感的 retrieval + adaptive orchestration 避免重训。基于成果可延伸的方向还包括:(a) 把同一框架推广到数据库的其他扩展点(索引、聚合算子、Window Function),构建「DBCooker for Database Internals」通用平台;(b) 与 DDL/查询优化器结合,让合成函数自动接受代价模型评估并迭代优化;(c) 多模态输入支持(PDF 文档 + 自然语言规约 + 既有测试),降低用户描述新函数的人工成本;(d) 与数据库迁移工具(如 CrackSQL)联动,在 Oracle→PostgreSQL 迁移中自动补充 Oracle 专有函数的 PG 实现。

复现评估

**开源情况**:代码已开源在 https://github.com/weAIDB/DBCooker,论文在 Table 4 的脚注承诺「完整测试函数列表 + 新函数实现代码」均在 artifact 中。**数据集与基线**:评估覆盖 75+145+128=348 个函数,其中 17 个 SQLite 新函数已在 Table 4 列出声明式宏;基线包括 GPT-5、Claude Opus 4.1、Claude Sonnet 4.5、Qwen3 Coder Plus 4 个 LLM 及其 CodeRAG 变体,加上 Claude Code、Qwen Code、TRAE 3 个智能体,均为公开可访问。**算力需求**:实验在 2× Intel Xeon E5-2678 v3 (2.50 GHz) + 256 GB RAM + 4× NVIDIA RTX 4090 Ti 的工作站上完成,每个函数合成 timeout 300 秒。**复现难度**:中等偏低——核心算法不依赖专有模型(默认智能体基线用 Qwen3 Coder Plus,温度 0.1),但 (a) PostgreSQL/DuckDB 完整编译耗时较长(PG 需 `make install`),(b) LLM API 调用成本可观(每个函数平均 7–11 次尝试 + 多 plan 并行 + 验证循环),(c) 静态分析工具需针对不同数据库源码版本调整配置。**建议**:先复现 SQLite 75 个函数验证主流程,再扩展到 PG/DuckDB;优先关注 Function Characterization 模块的正确性(这是性能瓶颈)。