labring / FastGPT

FastGPT is a knowledge-based platform built on the LLMs, offers a comprehensive suite of out-of-the-box capabilities such as data processing, RAG retrieval, and visual AI workflow orchestration, letting you easily develop and deploy complex question-answering systems without the need for extensive setup or configuration.
https://tryfastgpt.ai
Other
17.49k stars 4.69k forks source link

工作流重构方案(4月执行,旧版工作流问题不再回复) #1140

Closed dcsunny closed 5 months ago

dcsunny commented 6 months ago

工作流改进

工作流在使用过程中,在体验比较差,比较难理解,在体验不少产品中,豆包的工作流设计体验比较好。比较好的点

  1. 入口只是给出input参数可以去其他地方配置
  2. 每个模块没有这么多的链接线

image

c121914yu commented 6 months ago

存在几个问题

  1. 无法递归调用。
  2. 同一个参数,无法从不同的上一个流程获取(分类时候经常用),导致需要增加多个相同的模块。
  3. 无法精准控制执行时机。
c121914yu commented 6 months ago

详细看了看 n8n,感觉可以解决这几个问题。

c121914yu commented 6 months ago

提上日程,这两周重构一遍。

关于新工作流两个重点。

执行时机

每个节点增加一个sources字段,是一个数组,用于记录从哪些节点传递过来。

每个节点增加一个targets,是一个数组。用于记录输出的下一步节点。

runtime前初始化每个source的状态为waiting。

每个节点运行成功后,根据targets去更新对应nodeId的source,更改其状态为running。

除了waiting和running外,还需一个skipping的状态,表示跳过该节点以及它后面仅有一个sorce的节点

当一个节点所有的source的状态不为waiting的时候会执行。

关于输入

整体交互与coze类似,通过递归获取前面所有节点的输出值。但coze的输入选择也很难用,所以会找找有没有更合适的交互。

比较困难的是同时支持引用和输入的变量,例如: 提示词输入。 第二种比较困难的是特殊的交互。例如: 知识库选择,应用选择。

每个节点的动态input,都通过nodeId和outputId去其他的节点获取输出值。具体赋值时机则是在节点运行前。

关于第二个问题

一个变量无法获取多个来源的值。 可以通过挂载到全局变量来解决。

mxr612 commented 6 months ago

能不能手写啊QwQ写图形化编程真的血压升高。

lijiajun1997 commented 6 months ago

重构的时候能否顺便把chat with pdf的功能实现了,理论上是能在重构中解决的。 方案是在上传PDF后,在临时的知识库中导入这个文件,然后在编排中把这个文件作为被选择的知识库。
对于总结和提问两种问题进行分流,总结需要遍历每个chunk,如果超过模型上限可以分步执行,提问用向量检索就好。

bincooo commented 6 months ago

可以在工作流中创建全局变量嘛

lijiajun1997 commented 6 months ago

tool调用多个工具或者执行多步骤的时候可能会超过token,可以考虑分开执行,再汇总。

c121914yu commented 6 months ago

重构的时候能否顺便把chat with pdf的功能实现了,理论上是能在重构中解决的。 方案是在上传PDF后,在临时的知识库中导入这个文件,然后在编排中把这个文件作为被选择的知识库。 对于总结和提问两种问题进行分流,总结需要遍历每个chunk,如果超过模型上限可以分步执行,提问用向量检索就好。

直接用长上下文模型解决岂不是更好。

lijiajun1997 commented 6 months ago

是的 但是不可控上传的文档到底有多长 是一次性给文本给gpt还是走RAG

李嘉俊 @.***

 

------------------ 原始邮件 ------------------ 发件人: "labring/FastGPT" @.>; 发送时间: 2024年4月16日(星期二) 晚上11:42 @.>; @.**@.>; 主题: Re: [labring/FastGPT] 工作流重构方案(4月执行,旧版工作流问题不再回复) (Issue #1140)

重构的时候能否顺便把chat with pdf的功能实现了,理论上是能在重构中解决的。 方案是在上传PDF后,在临时的知识库中导入这个文件,然后在编排中把这个文件作为被选择的知识库。 对于总结和提问两种问题进行分流,总结需要遍历每个chunk,如果超过模型上限可以分步执行,提问用向量检索就好。

直接用长上下文模型解决岂不是更好。

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

sumingcheng commented 6 months ago

请问流重构什么时候上线,项目部署在内网给大家体验后,领导觉得连线太多比较复杂。所以想问下时间~

c121914yu commented 6 months ago

请问流重构什么时候上线,项目部署在内网给大家体验后,领导觉得连线太多比较复杂。所以想问下时间~

预计下周发布 preview,51 假期后发布正式版

HaishengLiang commented 6 months ago

需要类似coze的代码执行能力, 这个可以加吗? 还是说通过plugin 自己扩展?

c121914yu commented 6 months ago

需要类似coze的代码执行能力, 这个可以加吗? 还是说通过plugin 自己扩展?

有 js 脚本执行器。 复杂代码通过 laf 或者 http 扩展。

hellolixy commented 6 months ago

ui上面可以优化下吗?单个组件平铺在画布上,很占空间。我看dify设计的挺简洁的

lijiajun1997 commented 6 months ago

工具插件是否可以有输出模块,需要设计一个复杂的决策链,需要调用多轮递归。

c121914yu commented 6 months ago

ui上面可以优化下吗?单个组件平铺在画布上,很占空间。我看dify设计的挺简洁的

没感觉,感觉很难操作,想改个都找不到。

c121914yu commented 6 months ago

工具插件是否可以有输出模块,需要设计一个复杂的决策链,需要调用多轮递归。

有。而且可以四向连接,递归更容易连线。

hellolixy commented 6 months ago

ui上面可以优化下吗?单个组件平铺在画布上,很占空间。我看dify设计的挺简洁的

没感觉,感觉很难操作,想改个都找不到。

我是觉得现在的组件占用的空间太多了,一个屏幕放不下几个组件就满了

ifkd111 commented 6 months ago

本地部署时,时钟不生效。另外,能不能把语音输入直接整合进去

nightzjp commented 5 months ago

通过API调用的时候,可否支持语音,图片,PDF等

lijiajun1997 commented 5 months ago

本地部署时,时钟不生效。另外,能不能把语音输入直接整合进去

我本地部署时钟是有效的。语音输入也需要模型去计算的,除非找一个免费的API。

bincooo commented 5 months ago

release里新工作流页面配色感觉怪怪的,是截图的问题吗

c121914yu commented 5 months ago

release里新工作流页面配色感觉怪怪的,是截图的问题吗

嗯,这电脑不知道为啥都会偏蓝

bincooo commented 5 months ago

新版本的组件分叉容易,合叉没有旧版的方便

我上面的记录里有提到挂载到全局变量,这个要怎么做?

c121914yu commented 5 months ago

新版本的组件分叉容易,合叉没有旧版的方便

我上面的记录里有提到挂载到全局变量,这个要怎么做?

需要等变更更新这个节点做完才行

lijiajun1997 commented 5 months ago

4.8 版本没有办法对于tool回答的内容作为变量进行引用。 还是无法递归调用。 image

c121914yu commented 5 months ago

4.8 版本没有办法对于tool回答的内容作为变量进行引用。 还是无法递归调用。 image

tool没有设置回答

lijiajun1997 commented 5 months ago

4.8 版本没有办法对于tool回答的内容作为变量进行引用。 还是无法递归调用。

tool没有设置回答 如何调用tool输出的回答?

c121914yu commented 5 months ago

ool没有设置回答 如何调用tool输出的回答?

没法调用。现在节点的输出基本是用以前的,这个版本没有新增太多输出东西,只是改了交互。 迟点统一加下。

bincooo commented 5 months ago

4.8 版本没有办法对于tool回答的内容作为变量进行引用。 还是无法递归调用。

tool没有设置回答 如何调用tool输出的回答?

另一种折中方案:

Screenshot 2024-04-30 at 09 05 26

获取系统时间 > TOOL CACHE 缓存结果 > AI 对话前置 读取最后一次缓存的TOOL CACHE > AI 输出

使用redis实现每一次执行链依托一个临时uuid挂载全局变量,执行完后清理


题外话,@c121914yu 大佬啥时候能让body不限于application/json?每次更新我都要改一下js😭

c121914yu commented 5 months ago

application

后面找人再完善下~ 这期把变量更新搞完,功能就结束了。 最近都在搞工作流,知识库那边需求没跟上,,被催了~

c121914yu commented 5 months ago

后面找人再完善下~

https://github.com/labring/FastGPT/pull/1337 加了

bincooo commented 5 months ago

偶尔出现连线和鼠标错位,不知有没有其他人遇到过?我遇到好几次了

Screenshot 2024-05-01 at 20 30 20
lijiajun1997 commented 5 months ago

确实,经常联线比较困难,可以考虑增加链接点的大小,提高连上的效率

李嘉俊 @.***

 

------------------ 原始邮件 ------------------ 发件人: "labring/FastGPT" @.>; 发送时间: 2024年5月1日(星期三) 晚上8:29 @.>; @.**@.>; 主题: Re: [labring/FastGPT] 工作流重构方案(4月执行,旧版工作流问题不再回复) (Issue #1140)

偶尔出现连线和鼠标错位,不知有没有其他人遇到过?我遇到好几次了 Screenshot.2024-05-01.at.20.27.05.png (view on web)

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

Cheyenne1025 commented 5 months ago

文本加工输出无结果是我的问题吗?

image

bincooo commented 5 months ago

额,提的问题比较频繁,勿恼。

插件流程编排里,插件输出只有一个不可避免的需要并线; 在并线时一个变量无法接受多个来源,这是个难解决的问题,那是否可以不并线了,定义多个插件输出node给不同分支连接?

Screenshot 2024-05-03 at 20 20 55

不然的话,只能接受多个参数用脚本判断了。这样处理不太合适,需要一些开发成本,不够简约。

c121914yu commented 5 months ago

额,提的问题比较频繁,勿恼。

插件流程编排里,插件输出只有一个不可避免的需要并线; 在并线时一个变量无法接受多个来源,这是个难解决的问题,那是否可以不并线了,定义多个插件输出node给不同分支连接?

Screenshot 2024-05-03 at 20 20 55

不然的话,只能接受多个参数用脚本判断了。这样处理不太合适,需要一些开发成本,不够简约。

这种情况是设计通过挂载全局变量解决。 输入节点选择全局变量作为引用,其他地方直接更新全局变量。

bincooo commented 5 months ago

额,提的问题比较频繁,勿恼。 插件流程编排里,插件输出只有一个不可避免的需要并线; 在并线时一个变量无法接受多个来源,这是个难解决的问题,那是否可以不并线了,定义多个插件输出node给不同分支连接?

Screenshot 2024-05-03 at 20 20 55

不然的话,只能接受多个参数用脚本判断了。这样处理不太合适,需要一些开发成本,不够简约。

这种情况是设计通过挂载全局变量解决。 输入节点选择全局变量作为引用,其他地方直接更新全局变量。

有没有示例,不会用。。。

c121914yu commented 5 months ago

文本加工输出无结果是我的问题吗?

image

看看日志是不是有报错

Cheyenne1025 commented 5 months ago

文本加工输出无结果是我的问题吗? image

看看日志是不是有报错

没有报错,在两个环境都尝试了。

本地:

dacf6e782d46d0642ce3e90acb016d72

服务器:

e1f15531741bd865d102ca5448a40a3b
c121914yu commented 5 months ago

额,提的问题比较频繁,勿恼。 插件流程编排里,插件输出只有一个不可避免的需要并线; 在并线时一个变量无法接受多个来源,这是个难解决的问题,那是否可以不并线了,定义多个插件输出node给不同分支连接?

Screenshot 2024-05-03 at 20 20 55

不然的话,只能接受多个参数用脚本判断了。这样处理不太合适,需要一些开发成本,不够简约。

这种情况是设计通过挂载全局变量解决。 输入节点选择全局变量作为引用,其他地方直接更新全局变量。

有没有示例,不会用。。。

还没能,,就是上次和你说的,需要一个更新变量节点

c121914yu commented 5 months ago

文本加工输出无结果是我的问题吗? image

看看日志是不是有报错

没有报错,在两个环境都尝试了。

本地:

dacf6e782d46d0642ce3e90acb016d72

服务器:

e1f15531741bd865d102ca5448a40a3b

那就奇怪了,你看看获取时间插件能不能用,它就是这么实现的。

Cheyenne1025 commented 5 months ago

文本加工输出无结果是我的问题吗? image

看看日志是不是有报错

没有报错,在两个环境都尝试了。 本地:

dacf6e782d46d0642ce3e90acb016d72

服务器:

e1f15531741bd865d102ca5448a40a3b

那就奇怪了,你看看获取时间插件能不能用,它就是这么实现的。

......

2a82d301e3db1d035c9c8a3affcb5f56 f91ed475484d52415e1b02a1a7b30ab4 16b9cbbe388445f6c92845d09502b62f e82d912d00ae1cfcc42a52b514593ac8
bincooo commented 5 months ago

额,提的问题比较频繁,勿恼。 插件流程编排里,插件输出只有一个不可避免的需要并线; 在并线时一个变量无法接受多个来源,这是个难解决的问题,那是否可以不并线了,定义多个插件输出node给不同分支连接?

Screenshot 2024-05-03 at 20 20 55

不然的话,只能接受多个参数用脚本判断了。这样处理不太合适,需要一些开发成本,不够简约。

这种情况是设计通过挂载全局变量解决。 输入节点选择全局变量作为引用,其他地方直接更新全局变量。

有没有示例,不会用。。。

还没能,,就是上次和你说的,需要一个更新变量节点

哦,想起来了

Cheyenne1025 commented 5 months ago

文本加工输出无结果是我的问题吗? image

看看日志是不是有报错

没有报错,在两个环境都尝试了。 本地:

dacf6e782d46d0642ce3e90acb016d72

服务器:

e1f15531741bd865d102ca5448a40a3b

那就奇怪了,你看看获取时间插件能不能用,它就是这么实现的。

......

2a82d301e3db1d035c9c8a3affcb5f56 f91ed475484d52415e1b02a1a7b30ab4 16b9cbbe388445f6c92845d09502b62f e82d912d00ae1cfcc42a52b514593ac8

刚交叉测试了一下,插件编排逻辑在应用中直接被调用是可用的,但是一旦进入插件内部进行单步调试 输出的值永远都是空

bincooo commented 5 months ago

版本: preview4 1.当判断器接收Boolean时无论true/false只走ELSE。 2.指定回复组件无法使用全局变量(经测试,貌似没有组件能使用全局变量)。

Screenshot 2024-05-04 at 00 53 31 Screenshot 2024-05-04 at 00 52 34 Screenshot 2024-05-06 at 19 03 42 Screenshot 2024-05-06 at 19 04 32
c121914yu commented 5 months ago

文本加工输出无结果是我的问题吗? image

看看日志是不是有报错

没有报错,在两个环境都尝试了。 本地:

dacf6e782d46d0642ce3e90acb016d72

服务器:

e1f15531741bd865d102ca5448a40a3b

那就奇怪了,你看看获取时间插件能不能用,它就是这么实现的。

...... 2a82d301e3db1d035c9c8a3affcb5f56 f91ed475484d52415e1b02a1a7b30ab4 16b9cbbe388445f6c92845d09502b62f e82d912d00ae1cfcc42a52b514593ac8

刚交叉测试了一下,插件编排逻辑在应用中直接被调用是可用的,但是一旦进入插件内部进行单步调试 输出的值永远都是空

确实是,已修复

c121914yu commented 5 months ago

版本: preview4 1.当判断器接收Boolean时无论true/false只走ELSE。 2.指定回复组件无法使用全局变量(经测试,貌似没有组件能使用全局变量)。

Screenshot 2024-05-04 at 00 53 31 Screenshot 2024-05-04 at 00 52 34 Screenshot 2024-05-06 at 19 03 42 Screenshot 2024-05-06 at 19 04 32

已支持变量更新

bincooo commented 5 months ago

已支持变量更新

更新了,发现新的问题 定义的全局变量在测试侧边抽屉窗口和聊天页面,切换页面或者关闭抽屉窗口后变量丢失,无法继续对话。

Screenshot 2024-05-08 at 02 51 14
c121914yu commented 5 months ago

已支持变量更新

更新了,发现新的问题 定义的全局变量在测试侧边抽屉窗口和聊天页面,切换页面或者关闭抽屉窗口后变量丢失,无法继续对话。

Screenshot 2024-05-08 at 02 51 14

我去,我测测,测了简易模式,没注意其他的