一、完整工作流拆解,一张图看懂
最终会生成的内容:4 张图片(1 张封面页,3 张内容页),如下图:
我们要实现上图工作流,需要先搭建「2 个图像流,1 个工作流,1 个卡片,1 个 Bot」,如下所示:
二、图像流创建:封面页
通过搭建「图像流」来生成下图这张封面:
图像流拆解:
1. 图像流:创建
输入「名称、描述」,点击「确认」,名称可命名为「xhs_cover_page」,如下图:
点击「确认」后,进入图像流编辑页面,默认有 2 个节点:「开始、结束」,如下图:
2. 封面页元素拆解配置
「封面页」元素拆解, 共 8 个图文元素:
考虑到页面布局的美观性,「主标题」拆分成两行显示;
「副标题」也拆分成两行显示;
封面配图需要 3 个与主题相关的插图元素,需要文生图 3 个提示词。
「开始」节点:输入 8 个元素的「变量、描述」信息,如下图:
先来文生图,生成 3 个图像元素,通过添加「图像生成」工具来实现,具体操作步骤如下:
3. 添加「图像生成」工具:生成 3 个图像元素
要生成 3 个元素,就需要分别添加「图像生成」工具,先添加生成主元素,如下图:
① 为「主元素」添加「图像生成」工具:
链接:将「开始」节点和「图像生成」工具连接起来,每新建一个卡片记得要连接呀~
重命名:双击可重命名,改为「主体元素生成」,如下图:
输入:新增一个参数「main_img」,变量值为「引用-开始 main_img_prompt」,如下图:
提示词:「正向提示词」输入以下内容:你也可以定义自己想要的风格;「负向提示词」可不填,如果生图有问题,可以根据具体情况添加
1 个{{main_img}},简单插画,卡通风格,纯白色背景, 儿童简笔画
② 为「辅元素 1」添加「图像生成」工具:
添加:为了少填写写几个字段信息,我直接通过复制来添加,如下图:
重命名为「辅助元素生成_1」,如下图:
连接:将「开始」节点和第 2 个「图像生成」工具链接起来,如下图:
输入:参数名改为「element_img1」,变量值为「引用-开始 element_img_prompt1」,如下图:
提示词:「正向提示词」输入以下内容:你也可以定义自己想要的风格;「负向提示词」可不填。
1 个{{element_img1}},简单插画,卡通风格,纯白色背景, 儿童简笔画
③ 为「辅元素 2」添加「图像生成」工具:
添加:直接复制添加,如下图:
重命名:改为「辅助元素生成 _2」,如下图:
连接:将「开始」节点和第 3 个「图像生成」工具链接起来,如下图:
输入:参数名改为「element_img2」,变量值为「引用-开始 element_img_prompt2」,如下图:
提示词:「正向提示词」输入以下内容:你也可以定义自己想要的风格;「负向提示词」可不填。
1 个{{element_img2}},简单插画,卡通风格,纯白色背景, 儿童简笔画
4. 添加「智能抠图」工具:为 3 个元素抠图
为了让最终封面图的整体性更好一些,需要对生成的 3 个封面元素,进行抠图。通过添加 3 个「智能抠图」工具,分别为每一个图像元素进行抠图,最后会生成 3 个透明格式(.png)图像元素。
① 为「主元素」添加「智能抠图」工具
添加:「智能抠图」工具,如下图:
连接:将「主体元素生成」工具和第 1 个「智能抠图」工具连接起来,如下图:
重命名:双击改名为「主体抠图」,如下图:
输入:参数「上传图」,参数值为「引用-主体元素生成 data」,如下图:
② 为「辅元素 1」添加「智能抠图」工具:
添加:直接复制添加,如下图:
重命名:双击改名为「辅助元素抠图_1」,如下图:
连接:将「辅助元素生成_1」工具和「辅助元素抠图_1」工具连接起来,如下图:
输入:参数「上传图」,参数值为「引用-辅助元素生成_1 data」,如下图:
③ 为「辅元素 2」添加「智能抠图」工具:
添加:通过复制添加「智能抠图」工具,如下图:
重命名:命名为「辅助元素抠图_2」,如下图:
连接:将「辅助元素生成_2」和「辅助元素抠图_2」连接起来,如下图:
输入:参数「上传图」,参数值为「引用-辅助元素生成_2 data」,如下图:
小结:目前搭建的所有内容全图,如下:
5. 添加「画板」排版
添加画板,是为了告诉程序,我们要怎样展示前面生成的所有图文元素,就是排版,以便输出相对美观的页面。
添加:添加画板工具,如下图:
连接:将上面的 3 个抠图工具与「画板」进行连接,如下图:
元素设置:通过新增「元素」,将封面页要展示的 8 个元素,输入到画板,如下图:
图像-元素值-引用:封面图展示的是 _img 3 个抠图元素,所以要引用蓝色 icon「智能抠图」工具里的「data」,所以不要错选成图像生成工具啦~,如下图:
文本-元素值-引用:封面图要展示的是 5 个文本元素,不要引用「开始-xx_prompt」哦,因为那 3 个是文生图提示词,不是我们要展示的文本哦,如下图:
Tips:如果这里引用错了,可以再多思考理解下哦~
画板编辑:上面的「元素设置」,每新增引用一个,画板里就新增一个元素,如下图:这里仅是预览,不可操作
特别提醒:编辑「画板」时,不要使用快捷回退键,因为对画板无效,回退的是「图像流」的操作步骤!
画板:如要编辑,需要点击「画板编辑」右侧 icon,展开「画板」,可对所有元素进行编辑,如下图:
画板功能:
画板设置:「画板尺寸」设置为「宽: 1080 * 高: 1440」;「画板颜色」选择白色 #ffffff;其他使用默认,如下图:
上传背景图:这里我上传的是在设计软件里自己做的一张图,也可以直接找自己喜欢的背景图,上传进来,因为在画板里做图太痛苦,捂脸哭…
置底背景图:上传的图默认在最上面,点击「置底」,让这个背景图到最后一层,如下图:
文本排版:调整文本元素,排列成自己想展示的效果
title 文本设置:
① 字体颜色:「130 字号、左对齐、区块文本、字语酷黑体、色值 #3D6F5C」,如下图:
② 展示字数设置:如这里不做限定展示字数,当生成的文本过多时,会自动折行现实,所以为达到一行展示效果,需要通过拖动宽高来做限制,当生成的文本超出字数会自动截取,「title1、title2」2 个元素需要分别调整,如下图:
sub_title 文本设置:
① 字体颜色:「46 字号、左对齐、区块文本、思源黑体/常规体、色值 #3D6F5C」,如下图:
② 展示字数设置:和 title 文本操作一样,拖动限定展示字数,2 个元素需要分别调整,如下图:
③ _img 图像设置:默认 3 个元素是堆叠在一起的,如下图:
放大「main_img」图像,作为主元素展示,缩小「element_img1」拖到左上角,缩小「element_img2」拖到右下角,如下图:
name 文本设置:
① 字体颜色:「24 字号、居中对齐、区块文本、思源黑体/常规体、色值 #ffffff」,如下图:
特别提醒:拖到上面设置好,再拖动到最下面,因为拖到下面设置画板就被遮挡住了,没法用,所有的元素都是这样子的,有点点无语…
最终调整后效果如下图:
左侧「画板编辑」会一直实时预览显示在画板上的设置,如下图:
6. 结束
结束:将「画板」工具与「结束」节点连接,如下图:
输出变量:参数名「output」,参数值为「引用-画板 data」,如下图:
完成:完整「图像流」效果,如下图:
7. 试运行
点击右上角「试运行」
试运行编辑:输入各个「必填项」内容,提前预览下效果,如下图:
点击「运行」
运行成功后:如下图:
8. 图像流发布
点击右上角「发布」,以便后续工作流调用使用
图像流-列表:点击「发布」后进入图像流列表页,可以看到刚才创建的图像流,如下图:
三、图像流创建:内容页
完成上面封面页图像流的搭建,内容页图像流对我们来说就比较简单啦~
通过搭建「图像流」来生成下图这张封面:
图像流拆解:
1. 图像流:创建
操作路径「个人空间-图像流-创建」,输入必填项,名称为「xhs_content_page」,点击「确认」:
点击「确认」后,进入图像流编辑页面,默认有 2 个节点:「开始、结束」,如下图:
2. 内容页元素拆解配置
「内容页」元素拆解, 共 8 个图文元素,如下图:
「开始」节点:新增变量,输入 8 个元素的「变量、描述」信息,如下图:
3. 添加「画板」排版
添加「画板」
连接:「开始」与「画板」进行连接,如下图:
元素设置:通过新增「元素」,将内容页要展示的 8 个元素,输入到画板,如下图:
画板设置:点击右侧 icon,展开画板,如下图:
画板尺寸:默认是「16:9」,小红书配图一般是 3:4 比例,改为「宽: 1080 * 高: 1440」,输入宽高,前面自动改为「自定义」,正常逻辑应该是选项里应该有个
自定义选项,选择后再输入,不纠结这个,具体如下图:
上传背景图:自己做的一张图,上传进来,如下图:
文本排版:背景图「置底」,开始调整文本布局,3 个「sub_title、content」一定要按顺序由上到下排列哦~
全部调整完成后效果如下图:
4. 结束
连接「画板」与「结束」节点,如下图:
输出变量:参数名「output」,参数值「引用-画板 data」,如下图:
完成:完整图像流,如下图:
5. 试运行
输入所有必填项,如下图:
运行:点击右下角「运行」
运行成功
输出效果
6. 图像流发布
点击右上角「发布」,以便后续工作流调用使用
图像流-列表:点击「发布」后进入图像流列表页,可以看到刚才创建的图像流,如下图:
四、工作流创建:生成所有文案
根据用户输入的关键词,「大模型」节点一次生成所有文案,包括:
封面页:1 个主标题,1 个副标题,3 个插图提示词;
内容页:9 个小标题,9 个内容。
工作流拆解:
1. 工作流:创建
操作路径:「个人空间-工作流-创建工作流」,如下图:
创建工作流:名称「xhs_test」,输入工作描述,如下图:
点击「确认」后,进入文本生成工作流「xhs_test」,如下图:
输入:删除默认空的变量
2. 添加「大模型」
添加后,拖到开始后面,并连接
模型:选择「MiniMax 6.5s 245K」
点击右侧 icon,配置模型
具体配置如下图,调高大模型的随机度
输入:选参数名「input」,变量值「引用-开始 BOT_USER_INPUT」
提示词: {{input}},这里输入的提示词为系统提示词
人设与回复逻辑:点击右侧 icon,输入人设提示词,最终生成效果会更好
生成小红书内容
## 角色 你是一位资深的养生达人,熟悉各种养生知识,擅长通过用户输入的关键词,提供养生建议 ## 任务 根据用户输入的关键词,按照<生成规则>和<输出规则>的要求,为用户提供养生建议,一定要注意<限制要求>中的内容 ## 生成规则 1. 充分理解用户输入关键词的意图 2. 生成一条养生建议的标题,字数严格要求 9-11 个字,**标题内容要反认知**,这个非常重要 3. 围绕这个标题,生成一个副标题,用来解释标题内容,字数严格要求 15-20 个字 4. 围绕这个标题,生成 9 个小标题,以序号开头,如:“1、xxx”,每个小标题字数不超过 10 个字 5. 为每一个小标题生成一段介绍内容,字数严格要求 90-160 个字,**一定要满足字数要求**,这个很重要。 6. 围绕标题内容,生成一个联想到的名词,比如标题是“假期就多去 KTV 唱歌”,联想到的名词就是“麦克风” 7. 围绕这个生成的名词,再生成两个关联的名词,比如生成名词是“麦克风”,关联的名词就是“音符”“音箱” ## 输出规则 以 json 格式输出,仅输出如下内容,不要做任何解释。输出格式: [{ "title": "生成的主标题", "subtitle": "(生成的副标题)", "main_image": "联想到的名词", "element_img1": "关联的名词 1", "element_img2": "关联的名词 2", "sub_title1": "小标题 1", "content1": "介绍 1", "sub_title2": "小标题 2", "content2": "介绍 2", "sub_title3": "小标题 3", "content3": "介绍 3", "sub_title4": "小标题 4", "content4": "介绍 4" "sub_title5": "小标题 5", "content5": "介绍 5" "sub_title6": "小标题 6", "content6": "介绍 6" "sub_title7": "小标题 7", "content7": "介绍 7" "sub_title8": "小标题 8", "content8": "介绍 8" "sub_title9": "小标题 9", "content9": "介绍 9" }] ## 限制要求 - 严格按照<输出规则>中的格式输出,不要再输出其他任何内容,也不要使用代码块的方式输出,**不要使用```这类的符号**,这个非常重要! 输出示例:[{ "title": "建议:假期就多去 KTV 唱歌", "subtitle": "(爱唱歌的人生活得更久,而且还能帮你减肥~ 内附 80 首 KTV 必点歌单,假期一起勇闯 KTV)", "main_image": "麦克风", "element_img1": "音符", "element_img2": "音箱", "sub_title1": "1、爱唱歌的人更长寿", "content1": "美国老年学研究中心通过调查发现,歌剧歌唱家的心脏功能和普通人相比更加强活跃。 唱歌能使人长寿。研究证实,唱歌是呼吸肌在特定条件下的一种运动,好处不亚于跑步、游泳、划船等,所以说,经常唱歌,能让你活得更久哦~", "sub_title2": "2、有节奏的体内按摩", "content2": "唱歌时伴随人体横膈膜,这种内部的循环按摩,是任何一项运动都无法替代的。 随着歌曲节奏慢慢的变化,唱歌的呼吸时长时短、时快时慢,呼吸系统不断加压、减压的快速变化使得呼吸系统的肌肉得到锻炼,帮助按摩内脏,激活肺腑潜能,促进脏腑健康。", "sub_title3": "3、唱歌能帮助减肥", "content3": "唱歌是一项全身运动,可以锻炼全身肌肉,间接帮助你达到减肥的效果。 调研显示,60 公斤体重的人唱歌时热量消耗率 2.0 千卡/分钟,唱 2 小时消耗 240 千卡左右,唱一首歌相当于跑 100 米,对于想要减肥又喜欢运动的人来说,不妨试试多唱歌~", "sub_title4": "4、提升心理健康", "content4": "唱歌能够释放内心的压力和焦虑,研究表明,唱歌可以促进体内内啡肽的分泌,带来愉悦感,帮助改善情绪,提升心理健康。", "sub_title5": "5、增强社交能力", "content5": "在 KTV 等场合唱歌可以促进人与人之间的互动,增强社交能力。共同唱歌、分享歌曲能够拉近彼此的距离,增进友谊。", "sub_title6": "6、提高记忆力", "content6": "唱歌需要记忆歌词和旋律,这对大脑是一种锻炼。研究发现,常唱歌的人在记忆和学习新事物方面表现更佳,能够有效提高记忆力。", "sub_title7": "7、改善呼吸系统", "content7": "唱歌能够增强肺活量,改善呼吸系统功能。通过唱歌时的深呼吸,有助于增加氧气摄入,促进身体健康。", "sub_title8": "8、提升自信心", "content8": "在众人面前唱歌能够锻炼个人的表现能力,逐渐提升自信心。无论是独唱还是合唱,都会让你在舞台上更加自信。", "sub_title9": "9、丰富文化知识", "content9": "通过唱歌可以接触到不同的音乐风格和文化背景,丰富个人的文化知识,增加对音乐的理解和欣赏能力。" }]
输入后,如下图:
3. 添加「代码」节点:格式化数据
添加「代码」节点:由于大模型输出的内容,不能保证 100%是结构化的数据,所以这里通过添加「代码」节点处理一下,方便后边流程调用。
连接:连接「大模型」和「代码」两个节点,如下图:
输入:参数名「input」,参数值「引用-大模型 output」,如下图:
代码:点击右侧按钮「在 IDE 中编辑」
选择「Python」语言
复制输入以下代码:
import json import re async def main(args: Args) -> Output: params = args.params # 假设 params['input'] 是包含 JSON 字符串的文本 # 使用正则提取 JSON 数据 json_string_match = re.search(r'\[.*\]', params['input'], re.DOTALL) if not json_string_match: return {"error": "无法提取 JSON 数据"} json_string = json_string_match.group(0) # 解析 JSON 数据 try: json_data = json.loads(json_string) except json.JSONDecodeError as e: return {"error": f"JSON decode error: {str(e)}"} # 创建一个对象类型的数组 extracted_values = [] # 创建一个字典来存储所有提取的数据 extracted_object = { "title": json_data[0].get("title", ""), "subtitle": json_data[0].get("subtitle", ""), "name": json_data[0].get("name", "百岁老人系列"), # 确保提取 name "main_img": json_data[0].get("main_image", "1 个可爱的小狗"), # 提取 main_img "element_img1": json_data[0].get("element_img1", ""), "element_img2": json_data[0].get("element_img2", ""), } # 提取子标题和内容并添加到字典中 for i in range(1, 10): # 假设最多有 9 个子标题和内容 sub_title_key = f"sub_title{i}" content_key = f"content{i}" extracted_object[sub_title_key] = json_data[0].get(sub_title_key, "") extracted_object[content_key] = json_data[0].get(content_key, "") # 将提取的对象添加到数组中 extracted_values.append(extracted_object) ret: Output = { "input": params['input'], "extracted_values": extracted_values } return ret
输入后效果如下:
输出:删除「key0、key1」
「key2」改为「extracted_values」,变量类型选择「Array<Object>」数组,如下图:
点击右侧 icon「新增子项」23 个:
① 封面页 5 个:1 个主标题、1 个副标题、3 个图像元素;
② 内容页 18 个:每个内容页有 3 个小标题,3 个内容(共 9 个元素),后续要生成 3 张内容页,共 18 个元素;
如下图:
4. 主副标题:分行设置
用代码节点,将「主标题、副标题」进行分行,后边调用封面图的图像流中使用
重命名:双击标题区改名为「主标题-副标题分行」,如下图:
输入:「title」引用「代码 – extracted_values/title」;「subtitle」引用「代码 – extracted_values/subtitle」
代码:点击右侧「在 IDE 中编辑」,进入代码编辑,语言选择「Python」,复制粘贴输入以下代码:
async def main(args: Args) -> Output: params = args.params title = params.get('title', '') subtitle = params.get('subtitle', '') # 处理 title if len(title) > 7: title1 = title[:7] title2 = title[7:] else: title1 = title title2 = '' # 处理 subtitle if len(subtitle) > 20: subtitle1 = subtitle[:20] subtitle2 = subtitle[20:] else: subtitle1 = subtitle subtitle2 = '' ret: Output = { 'title1': title1, 'title2': title2, 'subtitle1': subtitle1, 'subtitle2': subtitle2, } return ret
输出:配置以下内容
5. 图像流调用:生成封面页、内容页
添加图像流:添加上面已经创建好的 2 个图像流「xhs_cover_page、xhs_content_page」,如下图:
① 封面页-图像流
连接:连接「主标题-副标题分行」代码节点、「xhs_cover_page」图像流节点,如下图:
输入:主副标题分行的 4 个参数,引用「代码-主标题-副标题分行」里的对应内容,如下图:
输入:img 图片 3 个参数,引用-代码「main_image、element_img1、element_img2」,如下图:
最终输入效果,最后「name」选择「输入-@小红书名称」
② 内容页-图像流
复制创建:每个图像流可生成 1 个内容页,我们要生成 3 个内容页,在「xhs_content_page」基础上,再复制 2 个图像流,共 3 个内容页图像流,分别命名如下图:
连接:将「代码」节点与 3 个「内容页图像流」节点进行连接,如下图:
输入:每个内容页展示 1 个标题,3 个小标题,3 个内容,1 个小红书名称,所以按顺序依次「引用」对应信息,第一页,参数值引用代码「1-3」,如下图:
第二页,参数值引用代码「4-6」,如下图:
第三页,参数值引用代码「7-9」,如下图:
目前工作流完整效果,如下图:
6. 图像流输出:4 页图
通过添加「代码」节点,将 4 个图像流中的图片汇总,为之后卡片调用做准备
代码命名为「代码_1」
输入:引用对应图像流,如下图:
代码:点击按钮,进入代码编辑页
语言选择「Python」,输入以下代码:
async def main(args: Args) -> Output: params = args.params cover_page = params.get("cover_page", "") content_page1 = params.get("content_page1", "") content_page2 = params.get("content_page2", "") content_page3 = params.get("content_page3", "") # 创建 pages 对象 pages = [ {"image": cover_page}, {"image": content_page1}, {"image": content_page2}, {"image": content_page3} ] ret: Output = { "pages": pages } return ret
输出:删除多余变量,主变量名改为「pages」,变量类型选「Array<Object>」,子变量名改为「image」,变量类型选「String」,如下图:
7. 结束
连接「代码_1」和「结束」节点。
输出变量:参数名引用对内容
这里一定要新增「pages」参数,并引用「代码_1」,如未添加引用,卡片将无法调用。
回答内容:输入以下内容
8. 试运行
点击右上角「试运行」,输入关键词,点击「运行」
成功运行效果
9. 工作流发布
运行成功没有问题后,点击「发布」,便于后续调用
发布成功后,会出现在工作流列表里,如下图:
五、卡片创建
我们最后想生成下图的效果,「左右横滑」的样式,还有「标题、简介」,需要通过添加绑定卡片来实现。
卡片拆解:
1. 卡片创建
操作路径如下「个人空间-卡片-创建卡片」
点击创建卡片,进入下图
2. 卡片编辑
① 组件搭建
布局组件:点击「横滑布局」,中间区域对应添加展示,如下图:
基础组件:点击「标题」添加
基础组件:点击「文本」添加
视图模式:点击切换为「手机端」,如下图:
基础组件:点击「图片」,中间默认色块展示为图片默认效果,如下图:
基础组件:图片-基础配置
数据:资源选择「image」;
样式:模式选择「宽度铺面」,裁剪开关打开,裁剪比例选择「3:4」,裁剪模式选择「填充缩放」;
操作:点击事件开关打开,选择「查看原图」。
② 结构编辑
Title3:基础配置
数据-内容:输入成功后的提示信息,如下图:
Text2:基础配置
数据-内容:输入该工作流的简介,其他配置使用默认即可,也可以根据自己需要配置修改
数据-操作:为方便查看者联系我们,可设置「点击事件」开关打开,选择「打开 URL」,输入自己小红书 URL
ScrollLayout3:基础配置
数据:切换为「动态格数」
绑定数组类型变量:如未创建变量,下拉框无数据,需要新建
新建变量:左上角选择「变量」,点击「新建变量」
编辑变量:进入新建变量页面,输入必填项,点击确定,如下图:
变量默认值:复制输入以下内容
[ { "image" : "https://www.baidu.com" }, { "image" : "https://www.baidu.com" } ]
数据:路径「卡片-结构-基础配置-数据-动态格数」,绑定数组类型变量,选择刚才新建的变量「图片列表」
③ 卡片命名
输入名称,点击「确认」
3. 卡片发布
右上角点击「发布」
发布:编辑,输入「版本号」,卡片选择「豆包」,如下图:
点击「确定」后,回到卡片列表可看到,如下图:
六、Bot 创建配置
Bot 拆解:
1. Bot 创建
操作路径:「个人空间-Bots-创建 Bot」
创建 Bot:输入必填项
点击「确认」后,进入 Bot 工作界面,如下图:
2. 工作流添加
编排:模式切换为「单 Agent(LLM 模式)」,如下图:
切换模式后,出现下图,待添加工作流界面
「点击添加工作流」进入选择工作流对话框,选择我们创建的工作流「xhs_text」,如下图:
添加完成效果,如下图:
3. 开场白编辑
添加「开场白」会在右侧界面默认展示,如下图:
开场白:输入自己想展示的信息
4. 背景图片添加
我们想要背景美观些,可以添加一张背景图片,像下图这样:
背景图片:添加流程
上次图片
上传成功后,下图右侧展示效果
5. 卡片绑定
输入内容,输出的内容是纵向的,纵向的无法显示完整的信息
我们想要的是下图这样,通过绑定上面创建的卡片实现
工作流配置:点击「绑定卡片数据」,如下图:
点击「绑定卡片」,进入「Bot 回复卡片配置」对话框,卡片样式选择「我的卡片」,选中我们创建的卡片,如下图:
为卡片绑定数据源:配置内容如下:
绑定完成后,再输入信息,展示的就是横向的图片,如下图:
6. Bot 完成
发布后,别人也可以查看使用我们创建的 Bot,如不发布,仅自己可查看使用~
发布成功后,会在 Bot 列表里出现