使用大模型进行信创SQL迁移的实践总结
在现代化的项目管理和运维工作中,利用大模型(如ChatGPT)处理复杂任务已经逐渐成为高效手段。最近一个项目中,我们尝试用大模型将MySQL导出的SQL语句迁移为达梦信创数据库格式。几轮操作下来,有一点体会格外深刻:提示词工程做得好不好,直接影响最终结果的质量。下面把这次实践的关键过程和总结分享出来,希望能给遇到类似需求的团队一些参考。
项目背景
项目里有一份从MySQL导出的SQL文件,需要迁移到达梦信创数据库,具体要求是把所有表名和字段名都加上双引号。人工逐条处理不仅费时,还容易漏改或改错,于是我们决定让大模型来干这活。
操作过程
第一轮操作
先把脱敏后的SQL文件上传到ChatGPT,指令很简单:“帮我把文件中的SQL语句表名和列表加上双引号”。操作如下图所示:

初步结果看起来大部分语句都处理对了,但仍有部分没按要求执行。看下图就明白了:

这时候我们意识到:提示词太模糊了,缺少明确示例,大模型很难准确理解“全部加上双引号”到底覆盖哪些情况。
第二轮操作
针对第一轮的问题,我们明确指出哪里不对,并附上一个手工处理后的正确示例。

结果确实有改善,但部分特别长的SQL语句仍然没完全处理对。如下图所示:

看来示例的覆盖面还不够,提示词也需要进一步细化。
第三轮操作
在前两轮基础上,这次增加了示例数量,并且设计了更详细的提示词——明确了需求、给出了正确的SQL示例,还描述了操作后预期得到的结果。

完整的提示词工程如下:
帮我把文件中的sql语句表名和列名加上双引号。如下为表名和列名加上双引号的正确示例,请将如上文件进行修改后,并提供下载:INSERT INTO "QRTZ_CRON_TRIGGERS" ("SCHED_NAME","TRIGGER_NAME","TRIGGER_GROUP","CRON_EXPRESSION","TIME_ZONE_ID") VALUES ('UCenterScheduler','TASK_CLASS_NAME102','DEFAULT','0 0 0 ? * 1','Asia/Hong_Kong'); INSERT INTO "SYS_DICT_DATA" ("DICT_SORT","DICT_LABEL","DICT_VALUE","DICT_TYPE","CSS_CLASS","LIST_CLASS","IS_DEFAULT","STATUS","CREATE_BY","CREATE_TIME","UPDATE_BY","UPDATE_TIME","REMARK") VALUES (2,'服务中心','2','sys_link_type','','default','N','0','EoiAdmin','2023-06-09 14:22:42','EoiAdmin','2023-06-14 16:50:46',''), (1,'运管系统','1','sys_link_type',NULL,'default','N','0','EoiAdmin','2023-06-09 14:23:10','',NULL,NULL), (3,'轮播类型','3','sys_link_type',NULL,'default','N','0','EoiAdmin','2023-06-09 14:23:38','',NULL,NULL), (4,'报表类型','4','sys_link_type',NULL,'default','N','0','EoiAdmin','2023-06-26 15:00:13','EoiAdmin','2023-06-26 15:00:22',NULL); INSERT INTO "SYS_USER" ("DEPT_ID","USER_NAME","NICK_NAME","USER_TYPE","EMAIL","PHONENUMBER","SEX","A VATAR","PASSWORD","STATUS","DEL_FLAG","LOGIN_IP","LOGIN_DATE","CREATE_BY","CREATE_TIME","UPDATE_BY","UPDATE_TIME","REMARK","SSO_ID","SOURCE_BY","OTP_SK","SECRET_BASE32","EMPLOYEEID","EN_NAME","DEPARTMENT","LAST_PASSWORD_CHANGE_DATE") VALUES (103,'EoiAdmin','开发','00','','15888888888','0','','$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2','0','0','192.168.21.225','2024-07-09 11:56:23','admin','2023-02-14 11:03:47','','2024-07-08 23:56:23','管理员',20200321,'0','otpauth://totp/EoiAdmin@?secret=ISG5WRNRFRDXJAOQAEIJ33YDOBV2EUDOON766YF2TSODJ27XNIRQ&period=30&digits=6','ISG5WRNRFRDXJAOQAEIJ33YDOBV2EUDOON766YF2TSODJ27XNIRQ',NULL,NULL,NULL,'2024-07-08 23:56:23'), (103,'admin','管理员','00','admin@eoitek.com','15888880000','0','','$2a$10$erscMiICVJEZ7NjUA7kbZOXA2URJn3iSt2WdmvusqDVd7HzASIZWq','0','0','192.168.21.225','2024-07-10 11:40:09','admin','2023-02-14 11:03:47','admin','2024-07-09 23:40:08','管理员',20200321,'0','','6XJXUMWJACPXKLO3SU44HKDGEUDTQIG7PGJYHMLJO3W42GPIDSMA',NULL,NULL,NULL,'2024-07-09 23:40:08');
这次,大模型终于成功按要求处理了所有SQL语句,达到了预期效果。
经验总结
通过这次实践,可以提炼出几个关键经验:
1. 明确需求:
2. 提供示例:
3. 反馈和调整:
4. 提示词工程:
结语
实际工作中,用大模型处理这类重复性高、规则明确的迁移任务,确实能大幅提升效率,同时保证准确性。不过,要真正释放大模型的潜力,提示词工程和示例设计才是核心。这次SQL迁移的实践就是一个鲜活的例子:模型本身能力再强,也得靠精心设计的提示词来引导。希望这份经验能给更多项目和团队带来启发,也期待未来在运维、项目管理和日常工作中挖掘出更多大模型的应用场景。
-
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名