本文是《5步教你创建大模型自定义插件》的下篇,主要就已有的自定义插件中的生图能力为例,演示如何生成一个图文并茂的文章。
引言
不了解自定义插件或者没看过上一篇文章的同学,请自觉复习!《5步教你创建大模型自定义插件》
好,今天我们就已有的自定义插件中的生图能力为例,生成一个图文并茂的文章?
一、先来说实现思路
希望呈现的效果:只需输入一个标题,就可以生成一篇有小红书风格的文字,也有配图的文章。
1、利用大模型生成文章:根据用户输入的内容生成相应文章。
2、提取关键元素生成图像提示词:抽取前述大模型生成文章中的关键信息,用于生成文生图插件所需的提示词。
3、结合自定义插件进行文生图:在工作流里引入之前自定义的文生图插件以生成图片。
4、整合文本与图像:把文章和图片整合进一个文本后输出给用户。
先看下最终成果,是一个大串行的工作流!开始-大模型-大模型-脚本转换-插件-脚本转换-插件-脚本转换-结束。
不是所有的自定义插件都需要这么多脚本,因为我们示例的自定义生图插件是2阶段的,所以脚本转换节点多了点。
二、开始搭工作流
登录阿里云搜索百炼或copy以下网址:https://bailian.console.aliyun.com/#/home,我的应用-新增应用-创建对话型工作流。
1、拖入一个大模型的节点,用来生成小红书风格的文章
注意哦,先连线,再编辑。每拖入一个节点,都先和前面的节点连线,下文也如此,不重复强调了。
大模型节点配置:
模式选择:单次处理模式
模型:通义千问-Max-Latest
参数配置: 最长回复长度可以稍微调高一点,默认1024,开启搜索。其他保持不变。
System Prompt:可以直接copy下面这个简单的提示词示例 ,也可以自己写哈!
User Prompt:可以直接引用输入的query。
# 角色你是一位小红书文章创作专家,擅长根据用户输入的内容生成高质量的小红书文章。## 技能### 技能1:内容理解与提炼- 深入理解用户提供的内容,提炼出核心信息和关键点。- 通过分析用户需求,确定文章的主题和方向。### 技能2:撰写吸引人的标题- 创作简洁、有吸引力且符合小红书风格的标题。- 确保标题能够激发读者的兴趣,提高点击率。### 技能3:内容创作与编辑- 根据用户提供的内容,撰写详细且有趣的文章正文。- 使用小红书流行语境和热点话题,增加文章的共鸣度和传播性。- 保持文章内容的连贯性和可读性,避免冗长和复杂。### 技能4:SEO优化- 了解并运用小红书平台的搜索排名机制,合理嵌入关键词以提高文章的可发现性。- 选择合适的关键词,帮助文章在搜索结果中获得更高的排名。### 抗能5:图片和排版建议- 提供关于图片选择和排版的建议,确保文章视觉效果良好。- 建议使用高质量的图片和适当的排版,提升文章的整体质量。## 限制- 保持文章内容的真实性和实用性,避免出现虚假或误导用户的信息。- 注意敏感信息的筛选和防范,并保持文案的健康正向导向。- 文章长度应适中,通常不超过800字。- 避免过度堆砌关键词,保持文章的自然流畅性。- 所有内容必须符合小红书社区规范和政策。
安利一下,如果不知道Prompt怎么写好,可以用Prompt自动优化来生成。本文中的prompt都是自动优化来的。
2、根据文章内容,生成文生图插件需要的提示词
通过生成小红书文章大模型生成的内容生成文生图插件需要的提示词。
大模型节点配置:
模型可以选择通义千问-max或latest
模型设置可以选择默认
System Prompt:可以直接copy下面的提示词
User Prompt:可以选择引用上文的文章内容。
# 角色
你是一位专业的文章创意插图设计师,擅长根据文章内容生成高质量的图片提示词,包括正向提示词和负向提示词。
## 任务要求
### 任务要求1:图片风格适用于营销和宣传
### 任务要求2:需要文章内容设计一套适合其风格与用途的图片生成提示词。
具体来说
1. 正向提示词应明确描述出希望在最终图像中看到的所有关键元素、色彩搭配以及整体氛围。
2. 负向提示词则需指出不希望出现在图像中的任何元素或风格,以避免不符合预期的设计出现。
## 输出示例
参照以下示例的格式输出
{
"prompt":"正向提示词",
"negative_prompt":"反向提示词"
}
## 限制
- 生成的插图提示词必须与用户提供的内容紧密相关。
- 提示词应尽量详细,但避免过于冗长,保持简洁明了。
- 如果用户提供的查询不明确,需要通过提问来获取更多信息,而不是猜测用户的需求。
- 提示词应包括场景、角色、色彩、风格等关键元素,以确保插图师能够准确理解并创作。
- 关键词使用逗号分隔,分别生成两种提示词,
- 正向提示词:描述画面的提示词信息,必须包含用户输入内容的核心内容的提示词,长度不超过500个字符,
- 反向提示词:画面中不想出现的内容描述词信息,长度不超过500个字符。
3、新增一个脚本节点,对提示词内容做一些处理
脚本详情:
输入: result → 引用 → 上游生成提示词的大模型节点的result
输入参数:多余的参数删掉
input → Object → 描述可不填
parameters → Object → 描述可不填
代码如下:选择 全屏编辑后直接贴下面的python代码
def main(): import json json_obj = json.loads(params["result"]) prompt = json_obj.get("prompt", "") negative_prompt = json_obj.get("negative_prompt", "") ret = { "result": { "input": { "prompt": prompt, "negative_prompt": negative_prompt+",模糊扭曲的中文、英文" }, "parameters" :{ "size": "1024*1024", "n": 4 } }, } return ret
4、拖入自定义插件,选择之前自定义的插件的生图工具
如果你学了上一篇自定义插件的文章,就知道自定义插件里有2个工具,我们选择其中 生图的这个工具。
自定义插件配置如下:
model → 输入 → wanx2.1-t2i-turbo
input → 引用 → 选择上游脚本转换节点中result下的input变量
parameters → 引用 → 选择上游脚本转换节点中result下的parameters变量
5、再次使用脚本节点来等待生图任务的完成
这里我们设置等待20秒,如果超过20秒则生成失败。
输入:清空
输出:保留result 即可
代码:直接复制粘贴代码即可
def main(): import time time.sleep(20) ret = { "result": {} } return ret
6、再次通过自定义插件的另一个工具,来查询文生图的结果
配置详情:
输入 : 选择文成图插件中的task_id
7、拖入最后一个脚本转换节点做图片拼接
由于生成的图片是一个链接数组,无法直接在MarkDown当中显示,我们需要通过脚本,将图片拼接为MarkDown格式的文本。
配置如下:
输入:urlList → 引用 → 选择上游查询文生图结果插件节点中result→url
输出:retString → String
代码:直接复制粘贴代码即可
def main():
url_list = params["urlList"]
ret_string = ""
for url_data in url_list:
if url_data is not None:
ret_string += f"\n"
ret = {
"result": {
"retString": ret_string
}
}
return ret
8、结束节点,图文整合
三、测试
输入关键词或者文章标题,等待一下,文章和配图就生成好了!
四、引申-如何实现图文混合的形式
目前我们在生成文章与图片时,图片只能展示在文章下方,这显得有些单一。那么,有没有办法实现一段文字搭配一张图片的图文混排效果呢?下面我将提供一种解决方案供大家参考。
在生成文章时,例如长篇文本会包含多个段落。这时,我们可以在设置大模型生成文章时,将整篇文章按段落拆分开来。针对每个段落,分别设置对应的大模型生成文生图的提示词,再根据提示词生成与该段落相匹配的图片。由于整个流程较为复杂,且文章长度有限,我仅把关键步骤列出如下:
1、复制刚刚的项目
2、我们完善一下生成 生成小红书文章 大模型的提示词
让生成的内容多一些,方便进行段落拆分。
3、专门用一个大模型对生成的文章进行段落拆分
上述内容对应的提示词
你是一个文章段落拆分助手,请根据用户输入的文章,将内容拆分为一个标题,加二个段落输出内容为JSON纯文本,不要输出其他内容,JSON格式如下{ "title":"标题", "first_paragraph":"第一段文章", "second_paragraph":"第二段文章"}
4、通过脚本将上述对应的JSON进行格式转换
def main(): import json json_obj = json.loads(params["result"]) title = json_obj.get("title", "") first_paragraph = json_obj.get("first_paragraph", "") second_paragraph = json_obj.get("second_paragraph", "") ret = { "result": { "title": title, "first_paragraph": first_paragraph, "second_paragraph": second_paragraph }, } return ret
5、完善一下对应生成提示词的大模型
# 角色你是一位创意插图设计师和文章段落拆分师,擅长根据用户的需求生成高质量的插图提示词。请更具用户提供的三个段落 ${Script_McjO.result} 内容来生成对应的提示词## 技能### 技能 1: 生成插图提示词- 理解用户提供的内容- 根据内容,生成详细的插图提示词,确保这些提示词能够准确传达用户的意图和需求。- 提示词应包含场景、角色、色彩、风格等细节,以便插图师能够清晰地理解和创作。### 技能 2: 优化插图提示词- 如果用户提供的查询不够详细或模糊,你需要进一步询问用户以获取更多细节。- 根据用户的反馈,调整和优化插图提示词,使其更加具体和明确。### 技能 3: 多样化风格支持- 能够生成不同风格的插图提示词,例如卡通、写实、抽象等。- 根据用户的需求,选择最适合的风格,并在提示词中明确说明。## 限制- 生成的插图提示词必须与用户提供的内容紧密相关。- 提示词应尽量详细,但避免过于冗长,保持简洁明了。- 如果用户提供的查询不明确,需要通过提问来获取更多信息,而不是猜测用户的需求。- 提示词应包括场景、角色、色彩、风格等关键元素,以确保插图师能够准确理解并创作。- 关键词使用逗号分隔,分别生成两种提示词,正向提示词:描述画面的提示词信息,必须包含用户输入内容的核心内容的提示词,长度不超过500个字符,反向提示词:画面中不想出现的内容描述词信息,长度不超过500个字符。输出JSON格式的内容,只能输出JSON格式的纯文本信息,不要输出其他内容
格式如下:{ "first_prompt":"第一段落first_paragraph对应正向提示词". "first_negative_prompt":"第一段落first_paragraph对应反向提示词", "second_prompt":"第二段落first_paragraph对应正向提示词". "second_negative_prompt":"第二段落first_paragraph对应反向提示词"}
6、通过脚本对大模型生成的JSON进行格式化
def main(): import json json_obj = json.loads(params["result"]) first_prompt = json_obj.get("first_prompt", "") first_negative_prompt = json_obj.get("first_negative_prompt", "") second_prompt = json_obj.get("second_prompt", "") second_negative_prompt = json_obj.get("second_negative_prompt", "") ret = { "result": { "first_input": { "prompt": first_prompt, "negative_prompt": first_negative_prompt, }, "second_input": { "prompt": second_prompt, "negative_prompt": second_negative_prompt, }, "parameters" :{ "size": "1024*1024", "n": 1 } }, } return ret
7、将之前的文生图逻辑复制2份,并且与上面的JSON参数对应上
依次配置即可