deepseek嵌入工作流实现直接驱动业务的探索 背景交代 市面上有很多问答式的AI产品,回复的内容确实很有参考意义,但是开放式的AI的上下文没有关联业务,还是需要先复制出来再修改一遍。 不过研发人员的ide插件可靠度就很高了,基本上都能运行。 那么问题来了,客户他只有一个一次性的需求,还需要研发吗,特别是领导们喜欢提稀奇古怪的问题,一通改下来,最后说还是第一个好,浪费时间还不给钱 生成式大屏逻辑分析 分析用户的输入,例如统计今天成交了多少订单(实际业务肯定比这个要求复杂),不过我们今天是入门尝试,暂不选择很复杂的例子 从知识库查找业务上下游的表、字段关系 将用户输入与表关系(业务上下文),全部传递给deepseek 使用deepseek生成sql语句,驱动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直接驱动业务的。