AutoLink: Agentic Schema Linking for Text-to-SQL
AutoLink:让智能问询自己找字段
这篇论文把 schema linking 从“一次性把全库 schema 塞给 LLM”改造成“agent 逐步探索、检索、验证、扩展字段”的过程。对 skill + MCP 连接数据库的智能问询系统,参考价值非常直接。
AutoLink 的关键不是写 SQL,而是先把“该用哪些字段”找全。
在真实业务库里,表和列可能非常多。把所有 schema 都交给 LLM 会带来两个问题:上下文太长,以及无关字段太多。AutoLink 的做法是:先给模型少量候选字段和全表名,再让模型像数据库工程师一样,通过检索、探查、试跑 SQL 来逐步补齐必要 schema。
论文报告 AutoLink 在 Bird-Dev 上达到 97.4% SRR,同时 SQL 执行准确率为 68.71%。
Spider 2.0-Lite 更接近企业级数据库,平均列数超过 800,AutoLink 在这里的优势尤其明显。
相比部分 full-schema 方法动辄 160K+ tokens,AutoLink 通过迭代扩展显著降低上下文成本。
传统 schema linking 在大库里容易卡在三个地方。
上下文限制
数据库级方法常把完整 schema 和问题一起塞进 LLM。小库可行,大库会触发上下文窗口、费用和噪声问题。
逐字段打分太贵
element-level 方法会对每个 table/column 打分,复杂度接近 \(O(|S|)\)。schema 越大,延迟和成本越难控。
召回和噪声冲突
为了不漏字段,检索器通常返回很多候选;候选越多,SQL 生成阶段又越容易被无关字段干扰。
AutoLink 的目标不是压到最少字段,而是在 token 可控的前提下,尽量保证 \(S_{linked}\) 包含回答问题所需的所有 gold schema elements。
它把字段识别变成了一个 agent 的多轮决策问题。
AutoLink 不要求 agent 看到完整列清单。它只暴露两个外部环境:真实数据库环境 \(E_{DB}\) 和 schema vector store 环境 \(E_{VS}\)。模型每轮输出 reasoning trace 和 actions,环境执行后返回 observation,直到模型认为 schema 足够完整。
初始检索
用原始问题从向量库取 top-n 字段,形成初始 \(S_{linked}^{(0)}\)。
表名上下文
给 agent 全部表名,但不给全部字段,降低上下文噪声。
语义检索
当发现缺字段时,用更具体的自然语言查询调用 vector store。
SQL 探查
通过小 SQL 查元数据、样例值、外键或字段名模式。
验证停止
尝试 draft SQL,如果能执行且 schema 充分,就结束。
五个动作,刚好可以映射成 MCP tools。
| 动作 | 是否有环境反馈 | 论文里的作用 | 在你的项目里可以怎么落地 |
|---|---|---|---|
| @explore_schema | 有 | 执行探索型 SQL,查字段、元数据、样例值、主外键,不直接回答问题。 | MCP tool:只允许白名单 SQL,如 information_schema、PRAGMA、LIMIT sample。 |
| @retrieve_schema | 有 | 用自然语言概念从 schema vector store 检索缺失字段。 | MCP tool:输入 query、top_k、exclude_columns,返回 table/column/type/comment/sample。 |
| @verify_schema | 有 | 尝试执行一条 draft SQL,判断当前 schema 是否足够。 | MCP tool:dry-run 或 LIMIT 5 执行,返回错误、空结果、列不存在、类型问题。 |
| @add_schema | 无 | 把新发现的字段显式加入 \(S_{linked}\)。 | 内部状态更新:维护 confirmed fields、candidate fields、reason。 |
| @stop_action | 无 | schema 足够完整或达到最大轮数时终止。 | 终止条件:字段覆盖、SQL 可执行、预算上限、风险检查通过。 |
这一步很适合做成结构化状态,而不是让模型在上下文里“隐式记住”。
{
"question": "列出 2024 年销售额最高的客户及所属区域",
"linked_schema": [
{"table": "orders", "column": "order_date", "reason": "时间过滤"},
{"table": "orders", "column": "amount", "reason": "销售额指标"},
{"table": "customers", "column": "customer_name", "reason": "输出字段"},
{"table": "regions", "column": "region_name", "reason": "维度字段"}
],
"next_action": {
"tool": "verify_schema",
"args": {"draft_sql": "SELECT ... LIMIT 5"}
}
}
实验重点:大 schema 下,AutoLink 召回掉得更慢。
论文在 Bird-Dev 和 Spider 2.0-Lite 上评估。Bird-Dev 平均每库约 80 列;Spider 2.0-Lite 来自更真实的企业级场景,平均超过 800 列,包含 BigQuery、Snowflake、SQLite 多方言。
| 方法 | Bird SRR | Bird Avg Columns | Bird Avg Tokens | Spider SRR all | Spider Avg Columns | Spider Avg Tokens |
|---|---|---|---|---|---|---|
| DE-SL (BGE-Large) | 35.5 | 35.7 | - | 43.6 | 153.8 | - |
| CE-SL (BGE-reranker) | 72.4 | 35.7 | - | 57.6 | 153.8 | - |
| MCS-SQL | 85.7 | 7.5 | 29.8K | 58.9 | 45.1 | 168.9K |
| SQL-to-Schema | 92.5 | 13.5 | 19.4K | 64.0 | 49.0 | 171.9K |
| RSL-SQL | 93.3 | 13.0 | 14.8K | 52.0 | 25.8 | 29.2K |
| LinkAlign | - | - | - | 36.4 | 21.1 | 66.7K |
| AutoLink | 97.4 | 35.8 | 8.0K | 91.2 | 159.4 | 21.2K |
SQL 执行准确率
Spider 2.0-Lite 上,AutoLink + DeepSeek-R1 达到 34.92% EX,接近 ReFoRCE + GPT-o3 的 37.84%,但平均 token 约 38.0K,明显少于 ReFoRCE 的 81.1K。
消融实验
去掉 @retrieve_schema 的影响最大;去掉 @explore_schema 和 @verify_schema 也会降低 SRR。这说明它的优势来自“检索 + 探索 + 验证”的组合,而不是单个提示词技巧。
把 AutoLink 改造成 skill + MCP 系统,可以用三层状态。
Query Understanding
把用户问题拆成指标、维度、过滤、时间、排序、输出格式。这里不直接写 SQL,而是形成候选查询意图。
Schema Grounding
调用 schema 检索、数据库探查、join path 检查,把自然语言概念落到 table.column。
Execution Planning
确认字段足够后,再生成 SQL 或 MCP 查询行为,并通过 dry-run / LIMIT query 做最后验证。
recommended MCP tools: - retrieve_schema(query, top_k, exclude_columns) - explore_schema(sql_probe) - inspect_table(table_name) - sample_column(table, column, limit) - verify_query(draft_sql, mode="dry_run|limit") - commit_schema(table_columns, reasons)
这篇论文强在工程形态,但还有几个要留心的边界。
优点
问题定义贴近真实数据库:不是追求“字段越少越好”,而是追求高 strict recall 与可控 token。action space 清晰,天然适合 tool calling / MCP。
风险
它依赖 schema 向量库质量、字段描述和样例值。企业库如果字段名缩写严重、注释缺失、权限受限,retrieval 和 exploration 都会变难。
实验局限
SQL generation 不是本文核心,后处理使用了 self-consistency、syntactic correction 和 voting。你落地时要单独评估 SQL 生成器和 schema linker 的贡献。
可扩展点
可以把 \(S_{linked}\) 扩展成 typed IR:字段、指标、维度、过滤、join path、权限标签、置信度、验证记录。这样更适合智能问询产品。
