参加了一个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优化的核心步骤有:
- 利用LLM的翻译能力将输入的中文Question转换成英文
- 解析数据库schema,格式化后加入prompt,其中不同table间的外键很关键,column的字段类型可有可无
- few shot,给出数据库关联的三个案例(和问题数据库关联的案例有明显提升效果)
- chain of thought,指导LLM如何思考,注意构造sql语句的哪些步骤
- 诱导慢思考(Let’s think step by step)
- 多LLM交叉验证和单LLM self consistency,即多问几次,投票选择出现次数多的sql语句
- 后处理校验sql语句的正确性
当然更好的办法是对LLM进行预训练,Prompt优化或者LLM agent的提升效果有限