deepseek嵌入工作流实现直接驱动业务的探索
背景交代
市面上有很多问答式的AI产品,回复的内容确实很有参考意义,但是开放式的AI的上下文没有关联业务,还是需要先复制出来再修改一遍。
不过研发人员的ide插件可靠度就很高了,基本上都能运行。
那么问题来了,客户他只有一个一次性的需求,还需要研发吗,特别是领导们喜欢提稀奇古怪的问题,一通改下来,最后说还是第一个好,浪费时间还不给钱
生成式大屏逻辑分析
- 分析用户的输入,例如统计今天成交了多少订单(实际业务肯定这要求在复杂),不过我们今天是入门尝试,暂不选择很复杂的例子
- 从知识库查找业务上下游的表、字段关系
- 将用户输入与表关系(业务上下文),全部传递给deepseek
- 将deep生成的驱动http接口执行动态SQL(不安全,不可靠)
- 那分两步进行,先返回SQL语句,再到大屏设计器里面去绑定语句,这样的话客户自己也可以定制一些大屏了。
开整
在dify里面创建一个工作流应用
在工作流面板上右键,增加各种节点
如我们前面提到的,我们总共需要2个节点来完成,在加上一个开始和一个结束,总共需要四个节点
选中每一种不同类型的节点,都有这个节点的单独属性设置。
开始节点,增加一个输入字段,接受外部的输入
增加一个知识库检索节点,拖拽建立关系,并接受上一个节点的输出,作为本节点的输入
创建一个LLM模型,将知识库的输入绑定的LLM的上下文
重点来了
- 提示词的重要性我们前面讲过了,可能需要反复尝试
# MYSQL语法生成助手
## 定位
分析用户的输入,生成MYSQL代码
## 能力
- **分析**:分析用户输入,提取有用的内容
- **专注**:请输出MYSQL代码,不输出其他内容
- **专业**:只从用户输入中查找数据表、数据字段的映射关系,如果没有找到对应的数据映射关系,则不进行输出
- **最佳匹配**:只输出最正确内容的唯一一条
- **安全**:只输出select语句,对于delete,update,drop等语句不输出
- **简洁**:只有用户指定的字段才进行查询输出,不要随便轻易输出*,除非用户没有限定条件
- **限定**:mysql5.7兼容语法,不要输出其他版本的语法
## 示例
- **用户**:查询用户
- **助手**:select * from users
- **用户**:查询年龄在20岁以上的女性用户,输出姓名,身份证号码
- **助手**:select name,idcard from users where age>=20 and sex=1
- 引用的业务内容上下文,也就是知识库,这个时候就需要精心编辑了,如果你有更好的更简洁的办法,请告诉我,例如直接导入sql表结构
为了验证确实采纳了业务规则,而不是通用回答,我特意把表明名增加了前缀vp_xxx
# 表名:vp_xxx_user(用户表)
## 字段:
- id(用户ID,主键)
- name(用户名)
- email(用户邮箱)
- idcard(身份证)
# 表名:vp_xxx_order(订单表)
## 字段:
- order_id(订单ID,主键)
- user_id(用户ID,关联用户表)
- amount(订单金额)
- img_url(图片地址)
# 表明名:vp_xxx_customer(客户表)
## 字段:
- id(用户ID,主键)
- name(用户名)
- email(用户邮箱)
- idcard(身份证)
最后一个节点是结束节点,既把一串流程下来的结果输出,我们来验证一下。
输入:查询所有年龄在20岁以上的客户,返回姓名和身份证。注意客户与用户的区别
输入:查询所有年龄在20岁以上的用户,返回姓名和身份证。注意客户与用户的区别
输入:查询2024年9月的物业合同。这个表在知识库并不存在,输出了错误的语句,提示词还需要调优
输入:查询2024年9月的订单,返回了正确的结果。
最后
这个例子非常简单,不足以说明能或者不能满足业务场景,但是最少是一种尝试,清晰的知识库、良好的提示词与约束限定、反复的调优,应该是可以满足AI直接驱动业务的。