Dify应用实战番外 - 网友提问(1)
Dify应用实战番外 - 网友提问(1)
麦金叔的AI之旅这两天有网友问,上次的课提到了数据库查询,对一般的人还是有点难度。所以希望大模型也能生成SQL,可以自己去查询数据库的数据。
麦金叔建议他使用文生SQL的模型,网友应该真的去尝试了,只不过还是有问题。那今天麦金叔就来演示一下,如何处理这一需求,并解决查询报错的问题。
**01.**动手做一做
今天的任务专题是解决让大模型生成SQL查询语句,并利用数据库工具查询得到结果。
依然用工作流作为测试。添加下图所示节点,依次为”开始”,”LLM”,”参数提取器”,”SQL EXECUTE”和”结束”。
将”开始”节点,添加一个参数”user_promt”。这样在对话时,可以将查询要求填入。
“LLM”节点选择模型为”qwen2.5-72b-instruct”,上下文选择”开始”节点新增的参数”user_promt”,将系统提示词按如下填入:
请直接提供答案,无需解释思考过程。
根据用户输入 上下文
进行SQL的生成,最终结果仅包含SQL语句。
数据库的schema如下:
1 | CREATE TABLE `doctor` ( |
其中status为医生工作状态,1表示医生正常工作,0表示医生暂停诊治。
title为医生的职称,description为医生擅长领域。
接着在”参数提取器”节点配置模型为”qwen2.5-32b-Instruct”,输入选择上一个”LLM”节点的text。
新建一个提取参数”sql_query”,指令部分填入:
忽略大模型输出的思考过程,即不要提取部分
“SQL EXECUTE”节点,保持和12节课数据库查询一致,并在”结束”节点输出查询结果。
保存后进行测试,结果如下图:
**02.**解释说明
首先,需要添加一个”参数提取器”。因为大模型文生SQL的结果会是这样的结果:
1 | { |
可以看到text的内容,是以sql开头的。那如果直接去运行,肯定不行呀。SQL查询语句还是需要严谨的,否则无法执行数据库查询。
当然,如果使用其他方法,比如”代码”或者”模版”也可以的,但都比”参数提取器”复杂。
其次,模型的选择上,”LLM”最后不要使用带有COT的模型,因为这一类模型强大是强大,还输出了思考过程,但只是给人看友好。而在工作流里面,还要进一步处理它,比较麻烦。还是直接用输出结果,而不给出思考过程的,更适合工作流。
最后,本着够用就行的原则,对问题理解并生成结果的模型需要参数大一些的模型,但是参数提取这种工作,就没必要也用参数大的,可以适当减小。毕竟实际工作中,在效果一致的前提下,能省一点是一点。
总结
今天的答疑来自网友的留言问题,实际上学习AI应用开发,一定不能照本宣科。要不断地尝试,碰到问题,并解决它,才能学以致用,为工作中能用上AI的能力打下坚实的基础。