00:00 - 00:01

书接上回

00:02 - 00:03

上一期视频

00:03 - 00:04

我们从零开始

00:04 - 00:06

为大家演示了一下如何在coze中

00:06 - 00:07

去搭建一个bot

00:07 - 00:08

并且介绍了每一个skills的用法

00:08 - 00:10

那还没有看过上期视频的小伙伴

00:10 - 00:12

也可以先看一下这个视频

00:12 - 00:13

好有一个大概的基础

00:13 - 00:14

那上期视频我也说

00:14 - 00:15

点赞到50

00:15 - 00:16

爆肝更新工作流操作方法

00:16 - 00:18

结果你们是真的不惯着我

00:18 - 00:19

发布没两天就达到了

00:19 - 00:20

那我们这期视频

00:20 - 00:22

就来啃工作流这块硬骨头

00:22 - 00:23

来看一下我们如何在coze中

00:23 - 00:24

去搭建一套工作流

00:24 - 00:26

那在搭建之前

00:26 - 00:27

我先来说一个比较常见的误区

00:27 - 00:30

就是这个工作流和多代理模式的区别

00:30 - 00:31

那因为在coze中

00:31 - 00:32

多代理模式和工作流

00:32 - 00:34

都是通过这个节点形式去构建的

00:34 - 00:36

所以新手很容易将这两个模式混淆

00:36 - 00:37

那多代理模式

00:37 - 00:38

我们上期视频也简单的演示过

00:38 - 00:40

就是在这个change mode这里

00:40 - 00:42

通过点击这个multi agent mode来进入

00:42 - 00:43

可以看到现在

00:43 - 00:44

我们就进入了这个多代理的模式

00:44 - 00:45

而工作流这里

00:45 - 00:46

我们可以通过

00:46 - 00:48

点击这个skills下的工作流选项

00:48 - 00:49

然后添加工作流

00:49 - 00:51

然后点击这个创建工作流来进行创建

00:51 - 00:53

当然我们也可以通过coze主页上方

00:53 - 00:54

这里的工作流

00:54 - 00:56

然后单击右边这个创建工作流的按钮

00:56 - 00:57

来进行这个工作流的创建

00:57 - 00:58

这是这个多代理模式

00:58 - 01:00

和工作流创建路径的不同

01:00 - 01:01

那从功能上来说

01:01 - 01:02

工作流

01:02 - 01:03

更像是bot下的一个指定的模块

01:03 - 01:06

来完成相对格式化且标准化的任务

01:06 - 01:07

而多代理模式则

01:07 - 01:09

更像一个可以完成复杂任务的团队

01:09 - 01:10

打比方来说

01:10 - 01:10

工作流(视频防盗 唯一账号 YouTube@氪学家)

01:10 - 01:12

就比是一个掌握独立技术的人

01:12 - 01:12

比如说

01:12 - 01:14

他可以根据网上获取到的信息

01:14 - 01:15

去撰写文案

01:15 - 01:15

那多代理模式

01:15 - 01:17

就更像一个由多人组成的团队

01:17 - 01:19

里面有专门的写手去写文案

01:19 - 01:20

美工去配图

01:20 - 01:21

审核来过稿等等

01:21 - 01:22

那从理论上来说

01:22 - 01:24

我们将复杂的工作安排的越细致

01:24 - 01:25

就越对这项工作可控

01:25 - 01:27

因为如果输出结果出现了问题

01:27 - 01:28

我们可以很容易的去排查

01:28 - 01:30

找到到底是哪个节点设置有误

01:30 - 01:31

从而进行优化

01:31 - 01:33

而不需要去重写整个的系统

01:33 - 01:35

那这就是在coze下使用工作流的意义

01:35 - 01:36

那接下来

01:36 - 01:37

我们就来到这个coze的主页

01:37 - 01:38

来创建一个工作流

01:38 - 01:40

我们点击左上角这个personal的按钮

01:40 - 01:41

进来之后

01:41 - 01:43

我们点击最上方这个工作流的链接

01:43 - 01:43

然后

01:43 - 01:45

我们来点击这个右边的创建按钮

01:45 - 01:46

那因为我这边是做演示

01:46 - 01:48

所以这个工作流的名称和描述

01:48 - 01:49

我就随便写一下

01:49 - 01:50

然后我们来单击确认

01:50 - 01:51

可以看到它提示

01:51 - 01:53

这个工作流已经创建成功

01:53 - 01:54

我们当前看到的

01:54 - 01:55

就是这个工作流操作页面

01:55 - 01:57

我们可以在这个页面上

01:57 - 01:58

去自由的添加节点

01:58 - 01:59

来定制化创建我们的工作流

01:59 - 02:02

那我们先来简单的熟悉一下这个页面

02:02 - 02:03

以及相关的操作

02:03 - 02:04

首先是最左侧的这一列

02:04 - 02:06

就是我们可以添加不同类型的节点

02:06 - 02:07

分别有插件(视频防盗 唯一账号 YouTube@氪学家)

02:07 - 02:08

大语言模型

02:08 - 02:10

代码 知识库 工作流 条件判断

02:10 - 02:12

变量 数据库以及信息

02:12 - 02:13

可以看到

02:13 - 02:14

有相当一部分节点

02:14 - 02:16

是和我们上一期讲的单代理模式下的

02:16 - 02:17

技能选项重合的

02:17 - 02:18

而且它们的功能也是一样的

02:18 - 02:20

所以没有看上期视频的小伙伴

02:20 - 02:22

也强烈建议先看一下上期视频

02:22 - 02:22

打一下基础

02:22 - 02:24

然后是右边操作台这里

02:24 - 02:25

他默认给到我们两个节点

02:25 - 02:26

一个是开始

02:26 - 02:27

然后一个是结束

02:27 - 02:29

那我们可以把这两个节点连接起来

02:29 - 02:31

完成一个最简单的工作流

02:31 - 02:32

也可以在这两个节点之间

02:32 - 02:33

来添加其他的

02:33 - 02:34

左边的这些节点

02:34 - 02:35

去构建更复杂的功能

02:35 - 02:37

然后我们看到下方这里

02:37 - 02:38

第一个小手一样的按钮

02:38 - 02:40

是可以拖动我们的工作台

02:40 - 02:40

当然这个操作

02:40 - 02:42

我们也可以通过按住这个空格

02:42 - 02:44

然后配合鼠标左键来实现

02:44 - 02:46

也可以通过按下鼠标滚轮来实现

02:46 - 02:47

后方这里是缩放大小

02:47 - 02:49

如果我们的工作流比较多

02:49 - 02:51

可以通过点击这个缩放的按钮

02:51 - 02:53

来更方便的观看我们整体的流程

02:53 - 02:55

再右边这个是自适应缩放

02:55 - 02:55

然后后方这个是

02:55 - 02:57

可以将我们的工作流

02:57 - 02:58

格式化成线性的形式

02:58 - 02:59

那这两个按钮

02:59 - 03:00

一会我实际操作的时候

03:00 - 03:01

也会给大家演示到

03:01 - 03:03

最后一个是这个连线的模式

03:03 - 03:05

那他默认的是这种自由的连线

03:05 - 03:06

也就是这个线段是曲线

03:06 - 03:08

我们也可以切换成这种直线的模式

03:08 - 03:09

看起来更清爽一些

03:09 - 03:11

然后最上方这里是测试工作流

03:11 - 03:13

以及这个发布工作流的按钮

03:13 - 03:14

那接下来

03:14 - 03:15

我们就来进入实操

03:15 - 03:16

我们还是先从最基本的做起

03:16 - 03:17

就将我们这个

03:17 - 03:19

开始和结束的节点连起来

03:19 - 03:19

然后(视频防盗 唯一账号 YouTube@氪学家)

03:19 - 03:21

我们来看一下这个单独节点下的参数

03:21 - 03:22

我们看到这个input下方

03:22 - 03:23

有四个选项

03:23 - 03:25

分别是name变量名

03:25 - 03:26

type变量类型

03:26 - 03:27

description变量描述

03:27 - 03:29

以及后方这个是否为必填项

03:29 - 03:29

那变量名

03:29 - 03:32

就是我们赋予这条输入项的名称

03:32 - 03:34

也就是说我们不管输入的内容是什么

03:34 - 03:35

它都需要有一个名称

03:35 - 03:37

来方便我们后方的节点去做调用

03:37 - 03:38

那这个有程序基础的小伙伴

03:38 - 03:39

都很好理解

03:39 - 03:41

而且这个变量名是必填项

03:41 - 03:42

只可以输入英文

03:42 - 03:44

那我这边就来输入一个test

03:44 - 03:45

然后type这边

03:45 - 03:47

我们就选择它这个默认的字符串不变

03:47 - 03:48

描述这里不是必填项

03:48 - 03:49

我们就先给它留空

03:49 - 03:49

当然

03:49 - 03:51

我们这里只是为了给大家做演示

03:51 - 03:53

如果创建的变量特别多的时候

03:53 - 03:54

在描述这边

03:54 - 03:55

去备注一下每个变量的意义

03:55 - 03:56

会更直观一些

03:56 - 03:57

然后

03:57 - 03:59

我们也可以通过最后方的这个按钮

03:59 - 04:00

去删除当前这条变量

04:00 - 04:02

也可以通过点击上方的加号

04:02 - 04:03

来去再添加一条变量

04:03 - 04:05

那我们现在只以一条变量来做演示

04:05 - 04:07

然后我们看到右边这个end的节点

04:07 - 04:08

这里output下这个值

04:08 - 04:09

这里(视频防盗 唯一账号 YouTube@氪学家)

04:09 - 04:10

我们就选择这个默认的reference

04:10 - 04:12

然后因为我们这两个节点

04:12 - 04:13

现在是连接的状态

04:13 - 04:14

所以我们可以在后方这里

04:14 - 04:16

找到我们刚刚设置的这个test的变量

04:16 - 04:18

我们来选择一下

04:18 - 04:18

然后

04:18 - 04:20

我们先来点击一下上方这个测试运行

04:20 - 04:20

来看一下

04:20 - 04:22

我们连接的这两个节点之后的效果

04:22 - 04:23

我们来点击一下

04:23 - 04:25

那这里他又弹出了一个窗口

04:25 - 04:27

需要我们来给这个测试变量来赋值

04:27 - 04:28

那我这边来输入氪学家来试一下

04:28 - 04:30

我们来点击这个右下角的运行按钮

04:30 - 04:32

可以看到这个节点就运行完成了

04:32 - 04:34

同时在这个输出项的右边

04:34 - 04:35

我们看到它这个输出的结果

04:35 - 04:37

就是我们刚刚这个输入项的氪学家

04:37 - 04:38

那到这里

04:38 - 04:39

我们就通过这两个节点

04:39 - 04:41

完成了一个最简单的参数传递

04:41 - 04:43

接下来我们就稍微上一点难度

04:43 - 04:45

比如说我们来做一个获取新闻的工作流

04:45 - 04:47

可以根据我们输入的相关关键词

04:47 - 04:48

来获取到新闻

04:48 - 04:49

那我们就来试一下

04:49 - 04:51

那我们来添加一个插件节点

04:51 - 04:53

我们点击左上角这个插件的加号

04:53 - 04:53

然后(视频防盗 唯一账号 YouTube@氪学家)

04:53 - 04:55

我们在下方找到这个新闻的节点

04:55 - 04:57

我们来点击这个添加按钮来添加一下

04:57 - 04:59

我们把这个页面来关掉

04:59 - 04:59

那我们看到

04:59 - 05:01

在我们刚刚这套工作流中

05:01 - 05:02

去添加了一个get news节点

05:02 - 05:04

我们可以通过这个节点来获取新闻

05:04 - 05:06

然后我们看到这个get news节点

05:06 - 05:07

有一个输入项

05:07 - 05:08

有一个输出项

05:08 - 05:10

那我们来分别连接一下

05:10 - 05:11

我们将这个开始节点的输出项

05:11 - 05:13

连接到这个get news的输入项这里

05:13 - 05:14

这样就连接成功

05:14 - 05:16

然后我们将这个get news输出项

05:16 - 05:18

连接到我们这个结束节点这里

05:18 - 05:19

大概这样就可以

05:19 - 05:19

然后

05:19 - 05:21

我们需要将这个刚刚的开始节点

05:21 - 05:22

和结束节点之间的连接

05:22 - 05:23

来断开

05:23 - 05:24

那这样

05:24 - 05:25

我们就将这个get news节点

05:25 - 05:27

接入到了我们刚刚这套工作流中

05:27 - 05:28

然后我们来看一下

05:28 - 05:30

这个get news下都有哪些参数

05:30 - 05:31

首先第一个参数是语言

05:31 - 05:32

那这个参数不是必填项

05:32 - 05:34

我们将鼠标移动到它这个

05:34 - 05:35

右上角的信息按钮

05:35 - 05:37

可以看到它这个选项的相关介绍

05:37 - 05:38

我们可以在后方输入参数

05:38 - 05:40

来设置我们获取新闻的语言

05:40 - 05:41

那我们这里还是设置中文

05:41 - 05:43

我们找到后方的值这里

05:43 - 05:44

那这次我们不用这个reference

05:44 - 05:45

也就是说

05:45 - 05:47

我们不需要参考它上方这个变量

05:47 - 05:48

我们直接点击这个input

05:48 - 05:50

然后我们来输入一个值

05:50 - 05:52

中文的话我们就输入zh就可以

05:52 - 05:53

当然英文的话

05:53 - 05:54

我们也可以输入这个en来试一下

05:54 - 05:56

然后下方这个q是必填项

05:56 - 05:57

我们可以在这一项

05:57 - 05:59

输入我们获取新闻的关键词

05:59 - 05:59

那这里

05:59 - 06:01

我们选择这个reference调用的模式

06:01 - 06:02

那在后方这里

06:02 - 06:03

我们就选择

06:03 - 06:05

让它来调用我们刚刚这个测试的变量

06:05 - 06:05

也就是说

06:05 - 06:07

一会我们可以通过赋值这个test的变量

06:07 - 06:08

来指定关键词

06:08 - 06:09

去获取对应的新闻

06:09 - 06:11

然后下方output这里

06:11 - 06:12

我们看到这个get news节点

06:12 - 06:13

有很多的输出项

06:13 - 06:14

那我们可以将这些输出项

06:14 - 06:16

在这个end节点这边

06:16 - 06:17

做一个整体的输出

06:17 - 06:19

也可以去单独的输出这个新闻的标题

06:19 - 06:20

链接地址

06:20 - 06:20

描数等等

06:20 - 06:22

那我们这边就来输出他的标题

06:22 - 06:22

来试一下

06:22 - 06:24

我们在这个output的值这边

06:24 - 06:25

再点击加号

06:25 - 06:26

添加一个变量

06:26 - 06:28

然后我们把这个变量名命名成title

06:28 - 06:29

也就是这个新闻的标题

06:29 - 06:30

后方的选项这里

06:30 - 06:32

我们来找到这个get news的节点

06:32 - 06:32

然后

06:32 - 06:33

在这个文章下方

06:33 - 06:34

找到这个标题的值

06:34 - 06:36

我们来选择一下

06:36 - 06:37

这样这个output的节点

06:37 - 06:38

就会从这个新闻节点里

06:38 - 06:40

去提取这个标题的值来做一个输出

06:40 - 06:42

然后连接没有问题之后

06:42 - 06:44

我们再来点击这个测试来运行一下

06:44 - 06:45

那这边需要我们输入一下

06:45 - 06:46

我们获取新闻的关键词

06:46 - 06:48

比如说我输入一个AI来试一下

06:48 - 06:49

我们点击下方的运行按钮

06:49 - 06:50

我们看到很快

06:50 - 06:52

这个节点就完成了运行

06:52 - 06:54

我们来看一下右方这个输出的结果

06:54 - 06:55

那output的这边

06:55 - 06:57

因为我们输出的是这个test的变量值

06:57 - 06:59

也就是我们刚刚输入的这个关键词AI

06:59 - 07:01

然后第二项title这边

07:01 - 07:01

就输出的是

07:01 - 07:03

根据我们这个AI的关键词get news节点

07:03 - 07:04

搜索到新闻

07:04 - 07:06

然后将这个title标题

07:06 - 07:07

做了一个单独的输出

07:07 - 07:09

那如果我们想输出这个get news节点

07:09 - 07:10

搜索到全部信息

07:10 - 07:11

其实也很简单

07:11 - 07:13

我们只需要再添加一个输出变量的值

07:13 - 07:15

比如说我们把这条来命名成all

07:15 - 07:16

然后在值这里

07:16 - 07:18

我们选择这个get news下articles的选项

07:18 - 07:19

我们看到

07:19 - 07:20

这个选项是包含下方所有值的

07:20 - 07:22

也就是我们可以输出get news节点

07:22 - 07:23

获取到的所有的内容

07:23 - 07:26

那我们再来点击这个测试来运行一下

07:26 - 07:27

我们还是获取这个AI相关的新闻

07:27 - 07:29

我们来点击右下角的运行

07:29 - 07:30

那我们看到输出结果这边

07:30 - 07:31

就多出了一个

07:31 - 07:33

我们刚刚添加的这个all的结果

07:33 - 07:34

然后他一次是为我们获取到了5条

07:34 - 07:36

我们来随便点击一条看一下

07:36 - 07:38

我们可以看到他获取新闻的主内容

07:38 - 07:39

然后描述

07:39 - 07:40

发布日期

07:40 - 07:40

新闻标题

07:40 - 07:42

以及他这个链接地址

07:42 - 07:43

都是可以获取成功的

07:43 - 07:45

然后我们接着上难度

07:45 - 07:45

比如说

07:45 - 07:47

我们现在想在这个获取到新闻之后

07:47 - 07:49

来总结一下内容再发布

07:49 - 07:50

说白了就是做一个洗稿的操作

07:50 - 07:53

毕竟鲁迅曾经说过洗洗更健康

07:53 - 07:54

我们是一个正经的频道

07:54 - 07:56

那我们来添加一个大语言模型的节点

07:56 - 07:57

来试一下

07:57 - 07:59

我们点击这个大语言模型节点的按钮

07:59 - 08:00

然后我这边来快速的移动一下

08:00 - 08:01

节点的位置

08:01 - 08:02

来方便我们查看

08:02 - 08:03

大概这样就可以

08:03 - 08:05

那在添加了这个节点之后

08:05 - 08:07

我们大概来过一下我们期望的流程

08:07 - 08:08

这样可以很明确的知道

08:08 - 08:09

我们当前这个大语言节点

08:09 - 08:11

应该接入到现有工作流的哪个部分

08:11 - 08:13

那我们首先通过这个开始的节点

08:13 - 08:15

去获取到这个变量的值

08:15 - 08:15

那这个变量值

08:15 - 08:16

就是

08:16 - 08:18

我们想让机器人去搜索新闻的关键词

08:18 - 08:18

然后

08:18 - 08:20

我们就来到下方这个get news节点这里

08:20 - 08:21

那在这个节点中

08:21 - 08:23

会根据我们刚刚提交的关键词

08:23 - 08:25

去获取到相关的新闻信息

08:25 - 08:26

包含标题描述

08:26 - 08:27

内容链接等等

08:27 - 08:27

然后

08:27 - 08:29

我们希望通过这个大语言模型的节点

08:29 - 08:31

来将我们已经获取的内容

08:31 - 08:32

去做一个重新的复述

08:32 - 08:34

以保证内容相对我们复制粘贴

08:34 - 08:34

更加的独立(视频防盗 唯一账号 YouTube@氪学家)

08:34 - 08:35

最后

08:35 - 08:36

我们需要将这个复述之后的内容

08:36 - 08:37

来去做一个输出

08:37 - 08:38

那这样处理下来

08:38 - 08:39

不难看出

08:39 - 08:41

我们需要将这个大语言模型的节点

08:41 - 08:43

连接在这个get news和end节点之间

08:43 - 08:44

那我们就来连接一下

08:44 - 08:46

然后我们把原来这个get news

08:46 - 08:47

和end节点之间的连接

08:47 - 08:47

来断开(视频防盗 唯一账号 YouTube@氪学家)

08:47 - 08:49

再将这个大语言模型节点接入到

08:49 - 08:50

这套工作流之后

08:50 - 08:52

我们来看一下这个节点的设置

08:52 - 08:53

那模型这边为了更好的效果

08:53 - 08:55

我们选择这个GPT4的模型

08:55 - 08:56

然后input输入这边

08:56 - 08:58

比如说我们想根据这个get news下

08:58 - 09:00

获取到这个description描述去做重写

09:00 - 09:02

那我们就来选择这个description

09:02 - 09:03

来试一下

09:03 - 09:04

我们找到这个get news的节点

09:04 - 09:05

然后在这个文章下

09:05 - 09:07

选择这个description选项

09:07 - 09:08

然后在下方的提示词这里

09:08 - 09:10

我们需要告诉这个大语言模型节点

09:10 - 09:12

它需要根据我们输入的这个信息做什么

09:12 - 09:13

那这个提示词的写法

09:13 - 09:14

非常的关键

09:14 - 09:16

我这里来给大家演示一下

09:16 - 09:18

我这里输入总结{{input}}内容

09:18 - 09:18

我们看到这里

09:18 - 09:20

我用了一个两个大括号的通配符

09:20 - 09:22

那这个通配符的意思就是

09:22 - 09:22

在prompt中(视频防盗 唯一账号 YouTube@氪学家)

09:22 - 09:25

去调取我们上方这个input的信息

09:25 - 09:26

也就是去调取我们这个get news下

09:26 - 09:28

获取到的description

09:28 - 09:29

然后来做一个总结

09:29 - 09:30

然后下方output这里

09:30 - 09:31

为了方便区分

09:31 - 09:32

我们给它命名成总结

09:32 - 09:34

那当然这里还是不支持中文

09:34 - 09:35

我们就以这个拼音来代替

09:36 - 09:38

然后我们来到上面这个输出这边

09:38 - 09:40

我们先删除掉之前的这些输出项

09:40 - 09:42

那这里我们想要输出两条内容

09:42 - 09:43

一条是我们这个get news节点

09:43 - 09:46

获取到这个原新闻的description描述

09:46 - 09:46

另一条

09:46 - 09:48

就是我们这个大语言模型节点GPT4

09:48 - 09:50

根据这个描述重写之后的内容

09:50 - 09:51

这样也方便我们去做对比

09:51 - 09:53

那我们来添加一下第一条

09:53 - 09:55

我们来点击这个加号的按钮

09:55 - 09:56

我们这个名称这边

09:56 - 09:57

我们就给它命名成输出1(output1)

09:57 - 09:58

在值的这边

09:58 - 09:59

我们下拉(视频防盗 唯一账号 YouTube@氪学家)

09:59 - 10:01

然后找到这个get news节点

10:01 - 10:02

文章下的这个description的选项

10:02 - 10:04

我们来选择一下

10:04 - 10:05

然后我们再来添加一条

10:05 - 10:06

然后第二条的名称

10:06 - 10:07

我们就给它命名成输出2(output2)

10:07 - 10:08

那在这一条

10:08 - 10:10

我们来获取这个大语言模型

10:10 - 10:11

重写之后的信息

10:11 - 10:13

我们来在值这里找到这个大语言模型

10:13 - 10:14

然后我们找到我们刚刚命名的

10:14 - 10:15

这个总结的选项

10:15 - 10:16

我们来选择一下

10:16 - 10:18

那在一切没有问题之后

10:18 - 10:20

我们来点击上方这个测试运行按钮

10:20 - 10:21

再来跑一下

10:21 - 10:21

然后这里

10:21 - 10:23

我们还是输入这个新闻的关键词

10:23 - 10:25

我们还是暂时保持这个AI不变

10:25 - 10:27

然后我们点击下运行

10:27 - 10:28

那这里运行出问题了

10:28 - 10:30

他一直停在这个大语言模型节点不动

10:30 - 10:32

我们先来把这个运行来取消一下

10:32 - 10:33

然后我们先不做任何的修改

10:33 - 10:35

因为我们这个连接本来是没有问题的

10:35 - 10:37

那我们来再点击一次这个测试运行

10:37 - 10:37

来跑一下

10:37 - 10:39

还是点击这个运行按钮

10:39 - 10:40

这一次就没有问题了

10:40 - 10:42

我们看到这个最终显示的结果

10:42 - 10:43

这个output1

10:43 - 10:44

就代表我们这个get news节点

10:44 - 10:45

获取到新闻的描述

10:45 - 10:47

然后下方output2

10:47 - 10:49

就是这个GPT4根据描述重写的文案

10:49 - 10:50

我们单击这个大语言模型

10:50 - 10:51

右边的这个显示结果的按钮

10:51 - 10:52

也可以看到

10:52 - 10:53

通过这个节点处理的输入

10:53 - 10:54

和输出的信息

10:54 - 10:55

那这条输入的信息

10:55 - 10:56

是和我们get news下

10:56 - 10:57

这条信息是一样的

10:57 - 10:59

然后最终输出的信息

10:59 - 11:00

和我们这个output下输出的信息

11:00 - 11:01

是一样的

11:01 - 11:02

那到这里

11:02 - 11:02

我们就通过

11:02 - 11:04

添加这个大语言模型的节点

11:04 - 11:05

在原工作流的基础上

11:05 - 11:07

完成了对描述的重写和输出

11:07 - 11:09

我们继续来上难度

11:09 - 11:10

如果我们现在想做一个判断

11:10 - 11:12

比如说我们获取到这个描述中

11:12 - 11:13

有我们指定的关键词

11:13 - 11:15

我们就执行这个大语言模型的重写操作

11:15 - 11:16

那如果没有

11:16 - 11:17

则不用重写

11:17 - 11:18

直接输出这个原来的描述

11:18 - 11:19

那我们就需要用到

11:19 - 11:21

这个condition条件节点

11:21 - 11:23

我们来点击这个加号来添加一下

11:23 - 11:24

然后我还是来简单的移动一下

11:24 - 11:25

这些节点的位置

11:25 - 11:26

方便我们查看

11:26 - 11:27

大概这样就可以

11:27 - 11:29

那这个条件节点的作用

11:29 - 11:30

这个和我们在写程序中

11:30 - 11:31

用if功能是一样的

11:31 - 11:33

那我们再来看一下我们的要求

11:33 - 11:34

就是如果这个get news

11:34 - 11:35

获取到新闻的描述

11:35 - 11:36

有指定的关键词

11:36 - 11:37

就去重写这段描述

11:37 - 11:38

那如果没有的话

11:38 - 11:39

就直接输出这段描述

11:39 - 11:40

那很明显

11:40 - 11:41

这个判断的节点

11:41 - 11:43

是需要连接在这个get news的后方

11:43 - 11:44

去进行一个判断处理

11:44 - 11:46

那我们来把它们连接一下

11:46 - 11:46

我这里

11:46 - 11:48

把这个大语言模型节点和这个判断节点

11:48 - 11:49

来换一下位置

11:49 - 11:51

这样更方便我们查看

11:51 - 11:53

然后我们在这个if下来做一下设置

11:53 - 11:54

我们在值这里

11:54 - 11:56

找到这个get news下description的选项

11:56 - 11:57

我们来选择一下

11:57 - 11:58

然后条件这里

11:58 - 12:00

因为我们是需要检索相应的关键词

12:00 - 12:02

我们就选择这个contain包含的选项

12:02 - 12:04

当然这里也提供了一些其他条件判断

12:04 - 12:06

大家也可以根据自己的实际情况去试一下

12:06 - 12:08

然后在最右边值这里

12:08 - 12:10

因为我们是要判断我们指定的关键词

12:10 - 12:12

所以我们还是切换成这个input选项

12:12 - 12:13

然后我们就来判断一下

12:13 - 12:14

我们这个描述中

12:14 - 12:15

是否有AI这个关键词

12:15 - 12:16

我们来输入一下AI

12:16 - 12:18

在我们写完这个if之后

12:18 - 12:19

我们来看一下它的输出项

12:19 - 12:20

我们刚刚说了

12:20 - 12:23

如果这个if判断中有这个AI的话

12:23 - 12:25

就让他执行这个大语言模型重写的操作

12:25 - 12:27

那我们就需要把这个if的输出端

12:27 - 12:28

来和我们这个大语言模型的节点

12:28 - 12:29

做一个相连

12:29 - 12:29

当然(视频防盗 唯一账号 YouTube@氪学家)

12:29 - 12:31

我们不要忘记断开之前这个get news

12:31 - 12:33

和大语言模型之间的连接

12:33 - 12:34

然后下方else这里

12:34 - 12:35

我们就直接和这个end节点

12:35 - 12:36

来做一个相连

12:36 - 12:38

也就是说如果我们这个描述中

12:38 - 12:39

没有AI这个关键词

12:39 - 12:41

就直接输出他原来的描述

12:41 - 12:42

那我们看一下这个end的输出这里

12:42 - 12:44

还是保持这两个不变

12:44 - 12:44

然后

12:44 - 12:46

我们来点击这个测试按钮来运行一下

12:46 - 12:48

我们这里还是检索有关AI的文章

12:48 - 12:49

我们来点击一下运行

12:49 - 12:51

OK运行结果已经出来了

12:51 - 12:52

我们来看一下这个结果

12:52 - 12:54

那我们看到上方这个output1

12:54 - 12:55

就是我们刚刚这个get news

12:55 - 12:56

获取到的description

12:56 - 12:58

然后下方这个output2

12:58 - 12:59

就是我们通过这个大语言模型

12:59 - 13:00

重写的描述

13:00 - 13:00

我们看到

13:00 - 13:01

因为我们这个get news

13:01 - 13:02

获取到的描述中

13:02 - 13:04

有这个AI的关键词

13:04 - 13:06

这符合我们上方这个if的条件判断

13:06 - 13:07

所以它下方这个output2

13:07 - 13:10

也输出了这个大语言模型重写之后的结果

13:10 - 13:12

那我们再修改一下这个判断来试一下

13:12 - 13:13

比如说我们把这个判断的关键词

13:13 - 13:14

修改成氪学家

13:14 - 13:16

那很明显上方这个描述中

13:16 - 13:17

是没有氪学家这个关键词的

13:17 - 13:19

也就是说我们在执行这个程序之后

13:19 - 13:21

如果他通过我们这个条件判断的话

13:21 - 13:22

他获取到这个新闻

13:22 - 13:24

是不会经过这个大语言模型模块的重写

13:24 - 13:26

所以这个output2的结果应该为空

13:26 - 13:27

那我们来运行看一下

13:27 - 13:29

我们还是用这个AI的搜索词

13:29 - 13:30

我们来点击一下运行

13:30 - 13:31

可以看到这个结果

13:31 - 13:32

和我们刚才说的相符

13:32 - 13:34

因为我们这个描述中

13:34 - 13:35

没有这个氪学家的关键词

13:35 - 13:35

所以(视频防盗 唯一账号 YouTube@氪学家)

13:35 - 13:37

他也就不会进行这个重写的操作

13:37 - 13:39

output2的输出结果也就为空

13:39 - 13:40

到这里

13:40 - 13:42

我们就通过添加这个condition节点

13:42 - 13:43

实现对我们获取的数据

13:43 - 13:44

进行一个判断和输出

13:44 - 13:46

这样处理数据也会更加有针对性

13:46 - 13:47

最后

13:47 - 13:48

如果我们觉得这套节点系统比较多

13:48 - 13:49

也比较乱

13:49 - 13:51

我们可以点击下方这个格式化的按钮

13:51 - 13:52

把它整理成这个线性的模式

13:52 - 13:54

这样也更方便我们去查看

13:54 - 13:55

然后我们来看一下

13:55 - 13:56

如何在我们的bot中

13:56 - 13:58

去调用我们刚刚做好的这套工作流

13:58 - 14:00

那在我们调用工作流之前

14:00 - 14:02

必须要把这个工作流设置成publish状态

14:02 - 14:04

那我们来点击这个右上角的按钮

14:04 - 14:05

来公开一下(视频防盗 唯一账号 YouTube@氪学家)

14:05 - 14:07

可以看到它现在就已经公开完成

14:07 - 14:08

我们看到它现在右边的状态

14:08 - 14:09

是已公开

14:09 - 14:11

那我们来单击创建一个机器人

14:11 - 14:12

然后这边因为是测试

14:12 - 14:13

那我这个机器人名称就随便写

14:13 - 14:15

然后我们单击这个下方的确认按钮

14:15 - 14:17

在来到我们的机器人之后

14:17 - 14:19

我们直接看到这个工作流这里

14:19 - 14:20

我们单击右边的加号

14:20 - 14:21

然后就可以看到

14:21 - 14:22

我们刚刚publish的这个工作流

14:22 - 14:24

我们来单击右边的添加按钮

14:24 - 14:25

它这边显示这个工作流

14:25 - 14:26

已经添加到我们的bot

14:26 - 14:27

我们关掉这个页面

14:27 - 14:28

那我们这里来写一下

14:28 - 14:29

这个提示词

14:29 - 14:31

你是一个新闻搜索和改写的机器人

14:31 - 14:33

当用户输入关键词之后

14:33 - 14:34

去根据这个氪学的工作流

14:34 - 14:35

执行相关的操作

14:35 - 14:36

并返回最终的结果

14:36 - 14:38

然后因为我们刚刚这个工作流这里

14:38 - 14:40

已经做了这个插件的设置

14:40 - 14:42

那我们插件这里就保持空就可以

14:42 - 14:44

我们来到这个最右边来测试一下

14:44 - 14:45

我们来输入一条指令

14:45 - 14:46

搜索有关AI的新闻

14:46 - 14:47

我们来回车提交一下

14:47 - 14:48

可以看到

14:48 - 14:50

他现在就在调用我们的工作流

14:50 - 14:52

我们来等待一下这个结果的输出完成

14:52 - 14:53

这边结果已经生成了

14:53 - 14:55

可以看到他根据我们这个要求

14:55 - 14:57

还是搜索了这条语聚AI的新闻

14:57 - 14:58

并给到了相关的描述

14:58 - 15:00

我们来看一下他这个运行的过程

15:00 - 15:00

我们看到这里(视频防盗 唯一账号 YouTube@氪学家)

15:00 - 15:02

它只输出了这个output1

15:02 - 15:03

也就是get news

15:03 - 15:04

获取到这个description

15:04 - 15:06

那因为我们刚刚设置的这个判断

15:06 - 15:06

是氪学家

15:06 - 15:08

所以他这边output2输出是空

15:08 - 15:09

也是正确的

15:09 - 15:10

那我们再把这个判断的提示词

15:10 - 15:12

修改成AI来试一下

15:12 - 15:13

那因为我在判断这边

15:13 - 15:14

用的是这个input的写死操作

15:14 - 15:16

所以我们现在比较麻烦

15:16 - 15:18

还得每次回来修改这个if的变量

15:18 - 15:19

当然我们在实际操作中

15:19 - 15:21

也可以改成这个变量的形式

15:21 - 15:22

这样更方便一些

15:22 - 15:23

那我这里只是为大家做演示

15:23 - 15:25

那在我们修改了这个节点之后

15:25 - 15:27

我们还需要再publish一下这个工作流

15:27 - 15:29

来完成这个工作流的更新

15:29 - 15:30

我们来点击这个测试运行

15:30 - 15:32

然后我们再来运行一次

15:32 - 15:33

在运行成功

15:33 - 15:34

我们再次点击这个publicish的按钮

15:34 - 15:36

将这个工作流来更新一下

15:36 - 15:36

然后

15:36 - 15:38

我们再返回这个机器人的前台

15:38 - 15:39

我们再来试一下

15:39 - 15:40

这个更新之后的工作流

15:40 - 15:42

我们将之前的聊天记录来清空一下

15:42 - 15:44

然后还是让他搜索一下有关AI的新闻

15:44 - 15:45

我们来回车提交一下

15:45 - 15:46

可以看到他这边

15:46 - 15:48

还是通过这个工作流来获取信息

15:48 - 15:50

那我们来等待一下它这个运行完成

15:50 - 15:51

结果已经出来了

15:51 - 15:53

那我们来看一下它这个输出的结果

15:53 - 15:53

那这一次

15:53 - 15:55

因为我们修改了这个条件

15:55 - 15:56

所以这个output1和output2

15:56 - 15:57

都输出了结果

15:57 - 15:58

然后我们看到这个bot

15:58 - 16:00

对这两个结果进行了一个合并和输出

16:00 - 16:01

那当然(视频防盗 唯一账号 YouTube@氪学家)

16:01 - 16:03

我们可以继续去修改我们的工作流

16:03 - 16:05

或者去修改我们左边的提示词

16:05 - 16:06

以得到一个更符合我们要求的结果

16:06 - 16:08

那我这里只是演示一下

16:08 - 16:09

如何在这个bot中

16:09 - 16:11

去调我们刚刚创建的这个工作流

16:11 - 16:11

时间关系

16:11 - 16:12

就不做继续的修改了

16:12 - 16:13

那这一期

16:13 - 16:14

我们从0开始

16:14 - 16:16

一步一步搭建并完善了一个

16:16 - 16:18

可以根据我们关键词获取文章

16:18 - 16:19

并且根据条件

16:19 - 16:21

判断是否改写文章输出的工作流

16:21 - 16:23

那如果是有一定程序基础的小伙伴

16:23 - 16:25

相信可以更容易的理解变量

16:25 - 16:26

条件判断的操作方法

16:26 - 16:27

也就更容易上手

16:27 - 16:29

其实说白了这套节点系统

16:29 - 16:30

就是将我们平时的编程可视化

16:30 - 16:32

看起来更直观一些

16:32 - 16:33

其背后的原理还是一样的

16:33 - 16:34

当然我们也看到

16:34 - 16:35

在左边

16:35 - 16:37

我还有很多的节点没有讲到

16:37 - 16:38

但是大部分的这些节点的相关功能

16:38 - 16:40

我都在上期视频中给大家做了演示

16:40 - 16:42

那我这里也只是抛砖引玉

16:42 - 16:43

希望各位大佬

16:43 - 16:44

可以根据自己的实际情况

16:44 - 16:45

配合这些节点

16:45 - 16:47

搭建出符合自己需求的工作流

16:47 - 16:48

那这就是我们这一期的全部内容

16:48 - 16:49

如果大家觉得这期视频

16:49 - 16:50

对你有一点点小小的帮助

16:50 - 16:51

也请为我点一个小小赞

16:51 - 16:52

并且关注我的频道

16:52 - 16:54

我会在以后带来更多coze相关的视频

16:54 - 16:56

最后也非常非常感谢大家观看

16:56 - 16:57

我们下期再见

# Building Workflows in Coze: A Step-by-Step Guide

In the previous video, we introduced how to build a bot from scratch in Coze and explained the usage of each skill. With your overwhelming support to reach 50 likes, we are now diving into the intricate world of workflows. This guide will clarify the distinction between workflows and multi-agent modes in Coze, as well as provide a comprehensive step-by-step tutorial on creating a workflow effectively.

## Understanding Workflows vs. Multi-Agent Modes

It's easy to confuse workflows with multi-agent modes when you're just starting out with Coze. Though both are constructed using nodes, they serve diverse functions:

- **Workflows**: These are structured modules within a bot that perform standardized tasks. Think of a workflow as an independent technician who can analyze information to draft content.
  
- **Multi-Agent Modes**: This functions like a team composed of various specialists, where tasks can range from writing to graphic design and editing.

Fine-tuning your tasks makes them more manageable, allowing easier troubleshooting and optimization without needing a complete system overhaul.

## Creating a Workflow in Coze

Let's get started by creating a workflow. First, log into Coze and navigate to the "Personal" section, followed by selecting "Workflows" and hitting the "Create" button.

Upon successful creation, you will arrive at the workflow operation page where you can freely add nodes. Here's how to structure this interface:

- The left column displays node types you can add: plugins, language models, code, knowledge bases, workflows, conditional checks, variables, databases, and information. Notably, this overlaps with skills from the single-agent mode.

- The central workspace is where you connect the nodes, starting with "Start" and "End" nodes.

- Use the hand icon to drag the workspace and manage the node arrangement. Zoom options are also available for better visibility.

### Basic Node Configuration

To illustrate, let’s connect the "Start" and "End" nodes for a simple parameter transfer. Click on the "Start" node to reveal the input section and define your variable as "test" with the type set to "string." In the "End" node, connect it to the output, preparing the stage for our workflow tests.

Click "Test Run" to observe how your nodes interact and confirm that the variable transfers correctly.

## Enhancing Functionality: News Retrieval Workflow

Now, let’s increase the complexity by creating a workflow that retrieves news based on given keywords. Here’s how to incorporate a news plugin:

1. **Add a Plugin Node** - Click to include the "Get News" node.
2. **Connect the Nodes** - Link the "Start" node output to the "Get News" input, then connect "Get News" output to the "End" node.

Next, configure the language for news retrieval and set relevant parameters to define how the data flows, allowing the system to retrieve and output the titles of the news articles successfully.

### Summarizing with a Language Model

Following the news retrieval, introduce a language model node to summarize retrieved articles. Define the connection from "Get News" to the language model node, and then to the "End" node. Here, establish the model type as GPT-4 and specify instructions on how content should be summarized.

This method ensures you have both the original description and the rephrased content available for outputs.

## Implementing Conditional Logic

Let's add a layer of decision-making with a condition node. We can scan the news description for specified keywords and decide if rewriting is necessary.

1. **Insert a Conditional Node** - Place this after the "Get News" node, ensuring proper connections based on keyword presence.
2. **Define Keyword Checking Logic** - Input parameters define how this node will operate based on what it finds in descriptions.

### Final Touches: Publishing the Workflow

Before using the workflow in a bot, it needs to be published. Click the publish button to finalize your setup. Afterward, create a bot that integrates this workflow, enabling it to function as a news search and rewriting agent for user queries.

## Conclusion and Next Steps

In this video, we guided you through the process of crafting a complete workflow that retrieves articles based on keywords and intelligently summarizes them. The visual nature of this node system mirrors programming but provides a more intuitive experience for users. 

As you embark on your journey to develop workflows, remember that Coze offers extensive nodes to explore. We're excited to see what you create! Don’t forget to like and subscribe for more Coze-related content.

See you in the next video!