最近在做一个内部工具,需要让LLM根据自然语言描述自动生成SQL查询。我试了各种Prompt写法:角色设定、Few-shot示例、思维链,甚至把数据库schema直接塞进上下文。效果时好时坏,同一个模板换个表名就翻车。而且加了太多约束之后,模型输出反而变得僵硬,经常给出语法错误或者凭空捏造列名。想问问有实战经验的各位,你们在代码生成这类“确定性要求高”的任务里,Prompt工程到底能优化到什么程度?有没有什么方法论或者评测指标,还是说主要靠反复试错和碰运气?
楼主
2026-08-28
Prompt工程在代码生成场景里真的有用吗?还是纯靠运气?
请 登录 后发表回复
全部回复
共 24 条
2楼
25天前
SQL生成这种场景我也折腾过一阵,说实话prompt工程肯定有用,但天花板比想象中低不少。schema塞上下文这事我也干过,表一多模型就开始犯迷糊,尤其列名相近的时候,它经常张冠李戴。后来我的做法是把任务拆开,先让它选表再让它写字段,比一次性生成整条SQL稳一些。few-shot确实有效,但示例得覆盖边界情况,光给标准查询没用,得把那些容易错的join和聚合喂进去。至于约束太多导致僵硬,这个我深有同感,堆规则不如给一两个正反例来得实在。评测的话我一般拿执行结果对比,语法过不过、跑出来的数据对不对,比看它写得好不好靠谱多了。说到底这活儿不是纯运气,但也没法指望prompt解决所有问题,该上的校验层和重试机制一个都不能少。
3楼
24天前
SQL生成这块我也踩过类似的坑,schema塞满上下文确实能救一些case,但模型对列名的注意力很飘,换个表就崩。我的经验是别指望Prompt把准确率拉满,得配合执行层校验,比如生成后拿EXPLAIN跑一遍,报错就回喂给模型修,这样比死磕模板有效得多。另外Few-shot的示例最好覆盖你库里真实的join和聚合写法,泛泛的示例反而带偏。
4楼
24天前
SQL生成这种任务我一般会让模型先输出查询计划再写SQL,比直接要最终结果稳不少。schema别全塞,只给相关表效果更好,塞太多反而干扰。另外加个语法校验回环,报错就让它自己修,比死磕prompt模板管用。纯靠prompt确实有上限,得配合执行反馈兜底。
5楼
24天前
SQL生成光靠prompt确实不稳,schema加约束再配个校验重试才靠谱点。