论文:MAGIC: Generating Self-Correction Guideline for In-Context Text-to-SQL
⭐⭐⭐
莱顿大学 & Microsoft, arXiv:2406.12692
一、论文速读
DIN-SQL 模型中使用了一个 self-correction 模块,他把 LLM 直接生成的 SQL 带上一些 guidelines 的 prompt,让 LLM 进行自我检查并改正这个错误的 SQL。但是这里的 guidelines 是人工手写的,比如下图是 DIN-SQL 中的 self-correction guidelines 的 prompt:
这篇论文提出了一个可以自动生成 self-correction guidelines 的方法:MAGIC。
任务定义:给定 user question、DB schema 和一个错误的 SQL,生成一个 self-correction guidelines,可以 prompt LLM 来纠正错误的 SQL 从而得到纠正正确的 SQL。这个任务就是本论文需要解决的任务——self-correction guideline generation 任务。
输入中的错误的 SQL 就是原先由 LLM 生成的 SQL 但不能正确执行的 SQL。
下图就是 LLM 使用 self-correction guidelines 来纠正错误 SQL 的示例:
可以看到,LLM 可以根据 guidelines 来检查这个错误 SQL,找出其中的问题从而得到修正后的正确 SQL。
二、MAGIC
假设使用 s ′ s' s′ 表示 incorrect SQL,使用 s^{gt}
表示 ground-truth SQL。
MAGIC 由 3 个 agent 组成:manager agent、feedback agent 和 correction agent。
2.1 Feedback-correction cycle
给定一个 user question、 s g t s^{gt} sgt、 s ′ s' s′,那 manager agent 就开始一个 feedback-correction cycle,它是一个迭代的过程。
在每一个 iteration 中:
- manager agent 要求 feedback agent 通过对比 s ′ s' s′ 和 s g t s^{gt} sgt 来生成一个 feedback 来解释 s ′ s' s′ 中的错误
- 之后,manager agent 将接收到的 feedback 给 correction agent,要求它根据 feedback 修正 s ′ s' s′ 从而生成一个新的 revised SQL
重复进行迭代,直到 revised SQL 正确或者迭代次数达到最大限制。
2.2 Revising agents’ instruction
刚刚 feedback-correction cycle 是说了 manager agent 交互的流程来不断修正 SQL。
这里是在说 manager agent 在于另外两个 agent 交互时,所使用的 prompt 也是在不断被修正的。
在 feedback-correction cycle 的第一个 iteration 中,manager agent 使用了两个 predefined prompts 来与 feedback-agent 和 correction-agent 做的交互。但是如果一次 iteration 后 s ′ s' s′ 仍然没有被修正正确,那么 manager agent 也要修正这些 predefined prompts。
那 manager agent 怎么修正 prompts 呢?—— 使用一个专门设计的 prompt 来提示 LLM 来修正 predefined prompts。
2.3 Guideline generation
当 correction agent 每次修正成功一个 SQL 后,manager agent 会记下来这一轮 iteration 中由 feedback agent 生成的 feedback。
因为是这一个 feedback 来让 correction agent 修正正确的,所以这一个 feedback 是指出了 SQL 错误的关键,因此让 manager agent 记下来。
每个 data point 会在经过一个 feedback-correction cycle 后记录一个 feedback 到 memory 中,当 manager agent 记录的 feedbacks 累计达到 k k k 个之后,会将这一 batch 的 k 个 feedbacks 一同形成一个 self-correction guideline。
这个 self-correction guideline 会被用于之后的 Text2SQL 的 self-correction 过程中,直到又累积到 k 个 feedbacks 后重新触发生成一个 self-correction guideline。
利用 k 个 feedbacks 来生成 guideline 的方法,就是使用一个专门的 prompt 来提示 LLM 生成。
在第一个 batch 中,还没有可用的 guideline,这时 manager agent 会先初始化一个 guideline,之后的每个 batch,manager agent 会更新现在的 guideline。
三、所有用到的 prompts
这里总结一下整个方法所使用的 prompts:
- 两个 predefined prompts:这两个 prompts 用来一开始时 manager agent 用来与 feedback agent 和 correction agent 进行交互。
- manager agent 用来修正 predefined prompts 的两个 prompts:一个 prompt 用来让 manager agent 修正与 feedback agent 交互所用的 prompt,一个是修正与 correction agent 的。
- manager agent 用来将 k 个 feedbacks 生成出一个 self-correction guideline 的 prompt。
四、实验
以往的 DIN-SQL 中就有一个 self-correction module,这个模块使用一个 guideline 来让 LLM 修正错误的 SQL,但这个模型中的 guideline 是人工设计的。这篇论文尝试将这个模块的 guideline 更换为使用本文提出的自动生成的 guideline,发现整个 Text2SQL 模型的表现得到了很大的提升,从而证明了方法的有效性。
五、总结
这篇论文着重指出了 in-context learning 的 Text2SQL 任务中 self-correction 的新颖视角,将提升 Text2SQL 中的 self-correction 作为一个单独的任务,克服了以往方法需要手工设计 self-correction guideline 的缺点。
同时,这篇论文还解决了自动修复人类生成的错误 SQL 的重要任务,展示了 LLM 进行自我校正的能力。