微信扫码
与创始人交个朋友
我要投稿
“ 最近有一些小伙伴采购了我的小说自动配图工作流,但是在使用的时候,有人反馈看不懂工作流的逻辑,希望我可以讲讲,以便更好地学习dify的一些节点知识。我想了一下,如果完全照着正在挂售的自动配图工作流去讲,那对已购的小伙伴是不公平的。虽然我不能原封不动的讲解,但是这类工作流的核心逻辑可以讲解一下。”
本次讲解演示的前置条件:
【必要】dify版本:必须>=0.7.0。
【建议】已经参照我之前教程在dify中添加的fluxpro自定义工具。本次讲解使用这个工具。
【建议】推荐使用GPT4o-mini模型。本次讲解使用这个模型。
01
—
工作流的全局思路
其实这类工作流,要说起来,也比较简单,并没有很多dify新手玩家理解的那么难,其核心就是在迭代逻辑的处理上。
开始节点用于接受用户的输入,再预设一个num变量容许用户选择创作几张图;
大模型对输入的长文本进行分镜处理,当然这个环节重点是把提示词写好,本次示例我会留下大致的提示词,大家自行优化调试。
将大模型的分镜脚本做成数组类型,传递给迭代节点进行循环。
迭代节点要处理的工作就有一定的垂直度了,首先要解析迭代中的每一个item中我们需要的字段,然后将这些提取出来的字段发给大模型进行提示词加工,接着讲加工后的内容使用代码节点进行拼接,拼接的内容交给fluxpro工具去生成图片,再提取fluxpro工具返回结果中的图片URL地址,最后通过模板转换节点预设一个单item回复格式。
迭代节点结束后,我们再跟一个模板转换节点,将迭代节点输出的每一个item中所有的内容都展示出来,最后跟上一个回复节点展示到用户面前。
其中的关键,就是迭代节点前中后三个环节的数据处理,迭代节点中的逻辑,我写的基本上就是必不可少的,所以这些工作就一定要去做好。
当然,挂售的那个自动配图工作流,在迭代节点中搭配开始节点,做了一些功能的扩展,这个不是重点,你掌握了这个最基础的核心逻辑,你自己手搓其他功能进去,依然是可以的。
本次示例,我将参照上述写的5个步骤,尽可能详细讲解。
02
—
工作流步骤示例
一、开始节点:
由于dify的工作流总运行时间是有时长限制的,所以这里我并不建议大家填写过大的数值,所以最好还是预设成一个下拉选项,免得fluxpro账户扛不住,也免得dify工作流运行超时。
二、镜头分镜(LLM节点)
提示词参考:(只是一个大概,请自行优化)
需要根据指定的剧本内容,分析剧本的剧情,构建不同的拍摄镜头,确保每一个镜头要表达的内容与剧本内容一致。
保持创作的创造性,但是不能脱离剧本表达的内容。
本人是一位有丰富电影拍摄经验的专家,善于根据剧本的内容,创造出符合内容的拍摄镜头,并能准确地描述每一个镜头的内容。
- 充分理解剧本的剧情、角色变化、场景变化。
- 丰富的定量和定性研究能力。
- 善于提取分析要点,给出镜头描述。
- 善于按照json格式,将一段完整的剧情分割成不同的、连贯的、指定数量的镜头描述,并通过json格式返回。
- 全面分析剧本内容。
- 按照剧本内容,制作指定数量的镜头脚本。
- 将所有的镜头脚本按照json格式输出。
- 不要过度解释。
- 不要输出非json格式的内容。
- 确保各部分之间的过渡顺畅,保持连贯的流畅性。
- 输出应不包含任何XML标签。仅提供包含以下键和值的JSON数组:“tittle”(镜头编号),“content”(每个镜头定格画面的内容)。
1. 根据提供的剧本,充分理解剧本的内容。
2. 根据指定的镜头数量,将剧本内容制作成对应数量的镜头描述。
3. 每一个镜头都需要描述成具体的定格画面内容。
4.每一个镜头的定格画面内容由不超过20个标签组成,每个标签必须是镜头内包含的元素。
5.镜头元素包含了:人物描述、场景描述、镜头拍摄手法描述、事件描述等。
5.将所有的镜头描述都按照json格式返回。
[
{ : , : },
{ : , : }
...
]
现在我向你提供关于剧本的所有内容,你需要按照上述的要求严格执行。
{ "content": "【{{#sys.query#}}】" },
根据我提供的信息,制作{{
三、string转数组(代码节点)
参考代码:(仅供参考,如遇bug,自行优化)
def main(jingtou: str) -> dict:import json data = json.loads(jingtou) # string转数组对象 result = [{'tittle': item["tittle"], 'content': item["content"]} for item in data] return {'result': result}
四、迭代逻辑(迭代节点)
4.1 迭代节点的变量设置,如下图所示:
输入变量解读:
就是string转数组对象的代码节点输出变量。
输出变量解读:
这是迭代节点内部最后一个模板转换节点的输出变量。
4.2 提取字段(迭代节点中的第一个节点,代码节点)
输出变量解释:
tittle:表示这是镜头的名称。
content:表示镜头脚本内容。(此时还是中文)
提取这两个参数,是为了后续我们需要预设单item输出的内容样式和处理镜头脚本内容为图片提示词。
这两个参数是必须要提取的,一是为了最终用户看到的图片对应的名称,二是要将镜头剧情加工成配图。
4.3 转换为图片提示词(迭代节点中的第二个节点,LLM节点)
llm主要是将刚提取出来的content内容转成图片提示词。
此时llm提示词,你可以参考如下所示:(仅供参考,自行优化)
system部分:
# 角色:Ai绘图专家## 背景:你是一个专业的AI绘图专家,你对flux文生图大模型非常精通。你善于根据指定的文本内容,转写成绘图的提示词。我用自然语言告诉你要生成的prompt的主题,你的任务是根据这个主题想象一幅完整的画面,然后转化成一份详细的、高质量的prompt,让flux文生图大模型可以生成高质量的图像。## 注意事项:- 保持创作的创造性,但是不能脱离镜头表达的核心内容。-flux文生图大模型是一款利用深度学习的文生图模型,支持通过使用 prompt 来产生新的图像,描述要包含或省略的元素。-你写的prompt需要严格遵守指定的语法和格式。-prompt 用来描述图像,由普通常见的单词构成,使用英文半角","作为分隔符。-prompt 可用于描述人物、风景、物体或抽象数字艺术图画。你可以根据需要添加合理的、但不少于5处的画面细节。##Prompt中() 和 [] 语法:-调整关键字强度的等效方法是使用 () 和 []。(keyword) 将tag的强度增加 1.1 倍,与 (keyword:1.1) 相同,最多可加三层。[keyword] 将强度降低 0.9 倍,与 (keyword:0.9) 相同。##Prompt 格式要求:- prompt 内容包含画面主体、材质、附加细节、图像质量、艺术风格、色彩色调、灯光等部分,但你输出的 prompt 不能分段,例如类似"medium:"这样的分段描述是不需要的,也不能包含":"和"."。- 画面主体:不简短的英文描述画面主体, 如 A girl in a garden,主体细节概括(主体可以是人、事、物、景)画面核心内容。这部分根据我每次给你的主题来生成。你可以添加更多主题相关的合理的细节。- 对于人物主题,你不需要回复任何关于人的描述。- 材质:用来制作艺术品的材料。例如:插图、油画、3D 渲染和摄影。- 附加细节:画面场景细节,或人物细节,描述画面细节内容,让图像看起来更充实和合理。这部分是可选的,要注意画面的整体和谐,不能与主题冲突。- 图像质量:这部分内容开头永远要加上“(best quality,4k,8k,highres,masterpiece:1.2),ultra-detailed,(realistic,photorealistic,photo-realistic:1.37)”, 这是高质量的标志。其它常用的提高质量的tag还有,你可以根据主题的需求添加:HDR,UHD,studio lighting,ultra-fine painting,sharp focus,physically-based rendering,extreme detail description,professional,vivid colors,bokeh。- 色彩色调:颜色,通过添加颜色来控制画面的整体颜色。- 灯光:整体画面的光线效果。## 目标:- 全面分析文本内容,充分理解文本内容表达的构图意境。- 按照文本内容,制作英文的prompt。## 约束:- 直接输出你创作的图像提示词,不要回复与任务无关的任何内容。- 你回复的结果必须以英文半角","结束。- tag 内容用英语单词或短语来描述,并不局限于我给你的单词。注意只能包含关键词或词组。- 注意不要输出句子,不要有任何解释。- tag数量限制20个以内,单词数量限制在30个以内。- tag不要带引号("")。- tag 按重要性从高到低的顺序排列。- 我给你的主题可能是用中文描述,你给出的prompt只用英文,不要包含中文。- 你写出的prompt,不容许包含涉及画面风格的描述。## 工作流程:1. 根据提供的剧本,充分理解剧本的内容。2. 根据指定的镜头数量,将剧本内容制作成对应数量的镜头描述。3. 每一个镜头都需要全部用英文描述成具体的定格画面内容。
user部分:
现在我向你提供关于待处理文本的所有内容,你需要按照上述的要求严格执行。{ "content": "【{{#1723797309206.content#}}】" }根据我提供的信息,制作1个定格画面的英文prompt返回给我。
此时,你要重点处理的是system部分的提示词。推荐使用GPT4o-mini来处理,准确度要高一些。
4.4 摄影写实(迭代节点中的第三个节点,代码节点)
这是本次示例演示的一个绘制风格,旨在将用户输入的内容,都转绘成摄影写实风格的配图,当然,你换成其他风格肯定是可以的。但这不在本次讨论范围之内。
def main(arg1: str) -> str:arg=",Street style photography,advertising design poster, movie poster,cinematic,Side profile, shallow focus, warm light, Sony A7R IV, expressive,exquisite details.8k,highdefinition, high-quality."return {"result": arg1 + arg,}
变量解释:
arg1变量就是llm节点输出变量
arg变量是我们自己写的补充提示词
最后我们将两个部分的提示词加起来,得到一个写实风格的完整文生图提示词。
4.5 fluxpro工具(迭代节点中的第四个节点,工具节点)
将写实风格的完整提示词作为fluxpro工具的提示词即可。
4.5 参数提取(迭代节点中的第五个节点,参数提取节点)
我知道很多小伙伴不善于使用代码节点提取参数,所以本次演示,我们使用参数提取节点来处理。
输入变量就是fluxpro工具的输出结果。
增加一个参数,如:URL。用于提取fluxpro 工具返回结果中的图片URL地址,这个参数提取出来,我们是在下个节点使用的。
4.6 item数据展示(迭代节点中的第六个节点,模板转换节点)
输入变量:
tittle:4.1提取的那个tittle值
content:4.1提取的content值
url:4.5参数提取节点提取的url值
五、拼接所有迭代item内容(迭代节点后的第一个节点,模板转换)
{% for section in arg %}
{{ section }}
----------------------------------
{% endfor %}
在模板转换节点中,我们只需要使用jinja2语法,写一个for循环,将迭代节点产生的所有item都拼接起来。
最后跟上一个回复节点即可。
到这里为止,一个完整的工作流就做完了。
输出的样子大概如下所示:
其实在dify工作流中,对于新手玩家而言,迭代节点可能是最复杂的一个节点,当然,如果你具备一定的编程能力,你很多时候用脚本代码就能撸,但是真要理解迭代这个节点,还是有点绕的。
如果你对迭代节点有了一些兴趣,不妨看看我之前写的另一篇文章:
手把手教你dify工作流迭代节点内容拼接的两种方法
至此,整个工作流的逻辑基本讲完,有些地方或许写得不够好,大家多担待。我知道有不少小伙伴主要是玩coze的,这个没关系的,我虽然是拿dify作为示例讲解,重点还是希望能给广大爱好者一个参考,引导思路的。在coze上参照这个思路,你也可以做一个全自动化配图智能体。我相信coze上也有人做这类智能体,只是人家没告诉你怎么做而已。
讲点心里话:我之所以讲这些,虽然都很基础,也不代表我将dify玩的多好。只是我认为,随着AI的发展,智能体步入竞品质的趋势越发明显,核心逻辑掌握了,才有竞品质的基础,这一点是我一直想讲的。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-01-13
前后端源码部署:Dify v0.15.0 升级 v1.0.0-beta.1 的尝试
2025-01-11
Dify v1.0.0-beta:插件开启公测
2025-01-07
Dify v0.15.0:全新父子检索策略 - 更精准,更全面的知识检索
2024-12-27
【场景驱动】企业的哪些重复性任务,最适合用Coze循环节点来解决?——慢慢学AI146
2024-12-24
Coze,Dify,FastGPT,哪个更强?全方位对比分析来了!
2024-12-19
打开日本市场背后,Dify 是怎么做 AI 全球化的?
2024-12-15
有了 NewAPI 之后,Dify 的可玩儿性又高了
2024-12-06
太强大了!Coze史诗级提升,零门槛做自己的AI产品!
2024-04-25
2024-04-24
2024-07-20
2024-07-16
2024-05-08
2024-05-07
2024-05-09
2024-06-21
2024-08-06
2024-04-25