参加了一个LLM的应用比赛,赛题目标是编码优化prompt提高text2sql推理的正确率 给定的资源如下:

  • 所有数据库schema
  • 一个100条记录的训练集(其实是基于spider数据集做了修改)
  • 三个LLM的接口(Baichuan13B/LLama2/Code-LLama)

text2sql正确率提高到了60%左右,在此记录一些心得

prompt的组成包四个元素:

  • Instruction(指令,必须)
  • Context(上下文信息,可选)
  • Input Data(输入,需要处理的数据,可选)
  • Output Indicator(输出指引,规定输出的类型或格式,可选) 一个面向复杂任务的prompt的一般都包含Instruction,Context,Input Data,Output Indicator。

所以面向大语言模型的开发应用过程就是如下公式:

LMM(Instruction + Context + Input Data + Output Indicator) = Output

题目要求根据自然语言的Question,给出对应数据库的SQL Query语句

做Prompt优化的核心步骤有:

  1. 利用LLM的翻译能力将输入的中文Question转换成英文
  2. 解析数据库schema,格式化后加入prompt,其中不同table间的外键很关键,column的字段类型可有可无
  3. few shot,给出数据库关联的三个案例(和问题数据库关联的案例有明显提升效果)
  4. chain of thought,指导LLM如何思考,注意构造sql语句的哪些步骤
  5. 诱导慢思考(Let’s think step by step)
  6. 多LLM交叉验证和单LLM self consistency,即多问几次,投票选择出现次数多的sql语句
  7. 后处理校验sql语句的正确性

当然更好的办法是对LLM进行预训练,Prompt优化或者LLM agent的提升效果有限