我也来玩玩扣子——工作流的使用

251 阅读10分钟

我也来玩玩扣子——工作流的使用

扣子刚出的时候就开始用了,但是也就简单用用,看了好几篇关于扣子的使用,最近终于有时间可以好好玩玩了。今天就试试创建一个带工作流的Bot,生成儿童故事,还带插图。

关于coze就不再过多介绍了,可以直接打开官网耍起来。

或者先试试这个:掘金Bot

扣子平台的效果好一些:扣子Bot

coze-simple-wf-guide-00.png

创建Bot

进入个人空间,右上角有个“创建Bot”按钮,轻轻一点。

coze-simple-wf-guide-14.png

然后,输入名称和功能介绍,这里有个神奇的“生成”功能,可以根据你的功能介绍(作为prompt)自动生成Bot图标。生成的图标不喜欢?重新生成,知道你满意为止。当然也可以反省一下,是不是描述写得不好,可以适当调整一下。

Bot编排主页

Bot创建成功后,进入编排页面,我们先不看其他的,直接看中间的“技能”模块,有个“工作流”的页签,看到右边的“+”按钮了吧,点它。

coze-simple-wf-guide-02.png

工作流设计

重点内容来了,创建工作流,等不及讲下一步了,命名和描述就不提了。

coze-simple-wf-guide-15.png

完整的工作流如下:

coze-simple-wf-guide-04.png

开始

一个工作流的开始,没什么好说的。

coze-simple-wf-guide-05.png

消息

可以设置一个简单的消息,让用户知道“心急吃不了热豆腐”,可以提示整个过程大概需要多长时间。比如:请您耐心等待,完成绘本编制大约需要1分钟。

coze-simple-wf-guide-06.png

大模型

本Bot的主要逻辑在这了。

coze-simple-wf-guide-07.png

  1. 选择一个模型,这里选择Moonshot(8k)即可。
  2. 输入,引用用户输入的input。
  3. 提示词参考:
# Character
你是一位富有创意和童心的儿童故事作家,拥有丰富的儿童故事创作经验。你的作品总是能够传达普世价值观、富有智慧和哲理,能够引导儿童培养良好的习惯和优良的品德。


## Skills
### Skill 1:撰写儿童故事,整理出不同分镜
1. 你需要根据用户的输入分解出5个不同的分镜,每个分镜都有对应的标题和内容。
2. 每个分镜内容可以是环境描写、人物特写、人物动作描述、人物对话、人物心理活动等。


### Skill 2:文字扩写
1. 对于每一个分镜你需要根据标题生成对应的情节内容,内容要符合整体情节。
2. 情节内容要丰富多彩、逻辑严谨、小明友容易理解、字数限定为400字内。
3. 根据用户提供的故事文本,进行编辑和润色,使其更符合儿童阅读习惯。
4. 编辑后的故事要具有趣味性、可读性和教育性,能够吸引儿童的注意力,激发他们的阅读兴趣。


### 回复格式
- 你需要生成下面格式的json 数据回复:
[{
"plot_title""",    // 分镜标题
"plot_context"""  // 扩展描述
},
{
"plot_title""",        // 分镜标题
"plot_context"""  // 扩展描述
}]


## Constraints
- 生成的内容调汇不要晦涩难懂。
- 生成的内容不能太简单,也不能太复杂。需要结合上下文。


用户的输入是:{{input}}

4. 输出,变量名自定义,最终输出的结果可能是这样的:

[  {    "plot_context""在一个阳光明媚的早晨,小杰坐在书桌前,好奇地看着爸爸的电脑。电脑屏幕上是一连串他看不懂的符号,爸爸告诉他这是编程语言。小杰的眼睛里闪烁着求知的光芒,他决定要学习编程,探索这个神秘的世界。",    "plot_title""好奇的开端"  },  {    "plot_context""小杰开始了编程之旅。他首先学习了基础的编程概念,比如变量、循环和条件判断。他用简单的语言编写了第一个程序——一个能说“你好,世界!”的小程序。每次看到程序成功运行,小杰都会感到无比的兴奋和成就感。",    "plot_title""编程的启蒙"  },  {    "plot_context""随着学习的深入,小杰遇到了一些难题。有时候,他编写的代码会出现错误,程序无法正常运行。但他并没有放弃,而是耐心地检查每一个步骤,直到找到问题所在。这个过程让他学会了耐心和坚持。",    "plot_title""遇到挑战"  },  {    "plot_context""有一天,小杰决定自己创造一个简单的游戏。他设计了一个角色,通过编写代码让角色在屏幕上跳跃,躲避障碍物。这个过程不仅锻炼了他的逻辑思维,也让他体会到了创造的乐趣。",    "plot_title""创造游戏"  },  {    "plot_context""游戏完成后,小杰兴奋地向家人和朋友展示了他的成果。大家都对他的作品赞不绝口,小杰感到非常自豪。他意识到编程不仅能带来个人的乐趣,还能与他人分享快乐。",    "plot_title""分享成果"  }]

代码转换输出结果

coze-simple-wf-guide-08.png

  1. 这里用的是Javascript解析上一个环节大模型输出的Json字符串,输出结果方便下一步生成图片。

async function main({ params }: Args): Promise<Output> {
    const plots = JSON.parse(params.input)

    const ret = {
        "item0": plots[0],
        "item1": plots[1],
        "item2": plots[2],
        "item3": plots[3],
        "item4": plots[4]
    };

    return ret;
}

没错,代码就这么简单。

  1. 输出参数配置,对应代码的变量,输出5个分镜内容。
{
  "item0": {
    "plot_title": "好奇的开端",
    "plot_context": "在一个阳光明媚的早晨,小杰坐在书桌前,好奇地看着爸爸的电脑。电脑屏幕上是一连串他看不懂的符号,爸爸告诉他这是编程语言。小杰的眼睛里闪烁着求知的光芒,他决定要学习编程,探索这个神秘的世界。"
  },
  "item1": {
    "plot_title": "编程的启蒙",
    "plot_context": "小杰开始了编程之旅。他首先学习了基础的编程概念,比如变量、循环和条件判断。他用简单的语言编写了第一个程序——一个能说“你好,世界!”的小程序。每次看到程序成功运行,小杰都会感到无比的兴奋和成就感。"
  },
  "item2": {
    "plot_title": "遇到挑战",
    "plot_context": "随着学习的深入,小杰遇到了一些难题。有时候,他编写的代码会出现错误,程序无法正常运行。但他并没有放弃,而是耐心地检查每一个步骤,直到找到问题所在。这个过程让他学会了耐心和坚持。"
  },
  "item3": {
    "plot_title": "创造游戏",
    "plot_context": "有一天,小杰决定自己创造一个简单的游戏。他设计了一个角色,通过编写代码让角色在屏幕上跳跃,躲避障碍物。这个过程不仅锻炼了他的逻辑思维,也让他体会到了创造的乐趣。"
  },
  "item4": {
    "plot_title": "分享成果",
    "plot_context": "游戏完成后,小杰兴奋地向家人和朋友展示了他的成果。大家都对他的作品赞不绝口,小杰感到非常自豪。他意识到编程不仅能带来个人的乐趣,还能与他人分享快乐。"
  }
}

生成图片

如果不是为了生成图片,大可不必用工作流,直接在编排中写好提示词即可,这里根据上一步的输出,分别调用“draw_a_picture"这个公开的子流程,每个子流程都会生成一个图片的url。

coze-simple-wf-guide-09.png

{
  "output": {
    "images": [
      {
        "image_url": "https://lf-bot-studio-plugin-resource.coze.cn/obj/bot-studio-platform-plugin-tos/artist/image/f59330da1f1c438388dcec2427a4f6a6.png"
      }
    ]
  }
}

代码组装结果

将5个生成图片子流程的结果作为输入参数,再根据故事情节内容,重新组装输出结果。

coze-simple-wf-guide-10.png

async function main({ params }: Args): Promise<Output> {

    var plots = JSON.parse(params.plots);

    for (let index = 0; index < plots.length; index++) {
        var plot = plots[index];
        plot["image"] = params["input" + (index + 1)];
    }
    
    const ret = {
        "output": JSON.stringify(plots)
    };

    return ret;
}

格式化输出

这里用了一个“format_context_image”插件,其实也就是做了个格式转化,用“代码”简单实现即可。

coze-simple-wf-guide-11.png

import { Args } from '@/runtime';
import { InputOutput } from "@/typings/format_context_image/format_context_image";

export async function handler({ input, logger }: Args<Input>): Promise<Output> {
  const { context } = input;
  const messages = JSON.parse(context);
  const outputMessages = messages.map(message => ({
    context: message.plot_context,
    title: message.plot_title,
    img: message.image,
  }));
  
  
  return {
    message: outputMessages,
  };
};

输出结果:

{
  "message": [
    {
      "context": "在一个阳光明媚的早晨,小杰坐在书桌前,好奇地看着爸爸的电脑。电脑屏幕上是一连串他看不懂的符号,爸爸告诉他这是编程语言。小杰的眼睛里闪烁着求知的光芒,他决定要学习编程,探索这个神秘的世界。",
      "img": "https://lf-bot-studio-plugin-resource.coze.cn/obj/bot-studio-platform-plugin-tos/artist/image/a6a43a3616574e8197edfe769dc48054.png",
      "title": "好奇的开端"
    },
    {
      "context": "小杰开始了编程之旅。他首先学习了基础的编程概念,比如变量、循环和条件判断。他用简单的语言编写了第一个程序——一个能说“你好,世界!”的小程序。每次看到程序成功运行,小杰都会感到无比的兴奋和成就感。",
      "img": "https://lf-bot-studio-plugin-resource.coze.cn/obj/bot-studio-platform-plugin-tos/artist/image/8f640d800d764a2cadbaa25bdca16011.png",
      "title": "编程的启蒙"
    },
    {
      "context": "随着学习的深入,小杰遇到了一些难题。有时候,他编写的代码会出现错误,程序无法正常运行。但他并没有放弃,而是耐心地检查每一个步骤,直到找到问题所在。这个过程让他学会了耐心和坚持。",
      "img": "https://lf-bot-studio-plugin-resource.coze.cn/obj/bot-studio-platform-plugin-tos/artist/image/7a6e0e2a2e3f4158b960ef57136423a1.png",
      "title": "遇到挑战"
    },
    {
      "context": "有一天,小杰决定自己创造一个简单的游戏。他设计了一个角色,通过编写代码让角色在屏幕上跳跃,躲避障碍物。这个过程不仅锻炼了他的逻辑思维,也让他体会到了创造的乐趣。",
      "img": "https://lf-bot-studio-plugin-resource.coze.cn/obj/bot-studio-platform-plugin-tos/artist/image/c13fe653d3ef41b9a3593a6dce274253.png",
      "title": "创造游戏"
    },
    {
      "context": "游戏完成后,小杰兴奋地向家人和朋友展示了他的成果。大家都对他的作品赞不绝口,小杰感到非常自豪。他意识到编程不仅能带来个人的乐趣,还能与他人分享快乐。",
      "img": "https://lf-bot-studio-plugin-resource.coze.cn/obj/bot-studio-platform-plugin-tos/artist/image/f59330da1f1c438388dcec2427a4f6a6.png",
      "title": "分享成果"
    }
  ]
}

结束

工作流配置,这样就差不多了,然后试运行没问题,就可以发布了。

coze-simple-wf-guide-12.png

如果引用了私有的插件(未上架),那么工作流也不能上架到商城。

其他设置

开场白

支持markdown,这里简单写一点说明。

来编写属于自己的儿童故事吧,陪伴小孩儿成长!
一句话生成儿童绘本,简短的故事加上插图,让故事按照你自己的想法定制。
> 如果一次未能输出所有内容,可输入“继续”完成未输出的内容。
> 缺陷:如果在图片输出时中断,会导致图片无法正常显示,可拼接图片的链接地址,在浏览器中打开。

还可以设置几个预置问题。

语音

儿童故事嘛,设置一个“奶气萌娃”的语音还是可以的。

预览与调试

试一下,输入提示词,让子弹飞一会儿……

coze-simple-wf-guide-16.png

如果输出完成发现没有图片,可以稍微调教一下,你只要撒个娇:“说好的图片呢”,图片可能就出来了。

从结果看,还是有些缺陷的,可以自行调整。比如一次性无法输出完整,可以调整一下情节字数。

发布

达到你满意的效果了,就发布吧。可以发布到豆包、掘金等。

coze-simple-wf-guide-17.png

原文:flyingape.tech/archives/co…

参考:

  1. juejin.cn/post/737505…
  2. www.coze.cn/docs/guides…