目录
- 背景
- 什么是梗图
- 梗图概念
- 梗图结构
- 低代码开发
- 最小运行单元
- 大模型链
- 提示词模板
- 文心模板
- 输出效果
- 测试工具链
- HTTP请求工具
- 梗图工具链
- 全流程
- 梗图优化
- Prompt提示词
- 优化后梗图结构
- 提示词前后对比
- 优化前效果
- 优化后效果
- API接口
- BOS图片水印
- 梗图插件
- 格式说明
- 构思插件清单文件
- 定义插件服务描述文件
- 编写示例描述文件
- 已被占用
- 预览效果
- 零代码
- 目标与角色
- 思考路径
- 个性化
- 预览效果
- 经验分享
- 文章分析
- BOS水印
- 低代码
- 插件prompt
- 零代码
- 体验
背景
最近Glif梗图非常火,同时文心智能体平台超级创造营开启新一期活动,
加上七夕节快到了,属于我们国内的情人节,博主选择了高级赛道的梗图七夕版方向。
在Glif梗图基础上,博主通过低代码的可视化工作流编排方式去实现。
同时也尝试通过零代码结合插件的方式实现梗图七夕版。
什么是梗图
梗图概念
在开发梗图七夕版智能体前,我们需要先了解下什么是Glif梗图?
博主直接在百度搜索关键词:什么是Glif梗图,基本概念如下:
Glif梗图是一种通过AI技术生成的图像,它基于用户输入的文本、图像或点击按钮,利用强大的AI模型生成输出,包括文本、图像、视频或这些元素的组合。
Glif不仅是一个图像生成器,还是一个视频生成器、漫画制作工具和故事叙述平台。
它的功能涵盖了从基本的自拍生成到复杂的图像、视频创作,使得用户能够通过简单的操作就能创作出有趣的作品。
这些梗图在社交媒体平台上受到了广泛的欢迎和分享。尽管有的用户表示,当输入与自己相关的关键词时,生成的梗图内容可能与预期不符,但这并不妨碍Glif成为一个创意和娱乐的源泉,让许多人感到乐趣无穷。
梗图结构
博主这里实现的梗图属于图文类,主要分为四部分:角色人物名称(或称谓)、多组吐槽梗词(真假话)、角色相关性头像、高频词
组成 | 解释 | 参考值 | 备注 |
名称 | 人物名称、角色名称、称谓等 | 海王、渣男、直男等 | – |
吐槽词 | 特定人物说的假话(谎话)和真话 | 口头说喜欢你(转头就和三个妹子热聊) | – |
头像 | 具有一定相关性的黑色线条头像 | 固定的头像 | 为了提高性能这里并没有使用动态化绘图 |
高频词 | 文案中出现频率较高的词 | 七夕 | 这个暂时未实现 |
低代码开发
通过上面分析,梗图的实现主要分为三部分:名称、文案句子、头像三部分。
左边是侧边栏套件,右边是画布放置的套件块节点,通过链接线把各个套件连接在一起形成一条通路,实现梗图七夕版本文案生成的功能。
套件主要有两种类型,一种是主流程的链套件,一种是普通套件。
链:用于编排主流程,智能体将遵循链的顺序执行后输出结果; 平台提供大模型链、分支链等多种类型,用于表达智能体的业务逻辑。
普通套件:除链外所有套件均为普通套件,可以与对应的链连接,连接后将生效为链的基础属性。
默认变量:{_input|_},代表用户输入,此变量可以生效于画布内所有套件
具体可查看工作流快速创建智能体相关官方文档
1)快速入门地址: https://agents.baidu.com/docs/intelligent-agent/visual-development/quickstart/ 2)开发套件: https://agents.baidu.com/docs/intelligent-agent/visual-development/Kit/
最小运行单元
最小运行单元必须包含最少一个 chain 节点,chain就是链的意思,至少包含一个链节点。
大模型链套件块,存在星号模型属性必须添加配置,否则无法运行成功。
对于大模型链,只需要添加文心模型属性即可运行,因为没有任何大模型角色限定,所以默认就是和文心一言输出的效果一样。
工具链的最小运行单元。工具链输出结果是以数组对象的字符串格式。
大模型链
梗图七夕版本使用了大模型链、提示词、模板三个套件。
提示词虽然不是大模型链的必要套件属性,但是对于梗图业务来说就是必要属性,因为需要设定大模型一个角色目标。
提示词模板
提示词模板分为模板和输出格式两部分,模板是必填值,输出格式非必填(可以限定大模型输出json格式值)
通过上面分析,梗图的实现可以分为名称、文案句子、头像三部分。
编写prompt提示词,模板如下
输出格式,如下
文心模板
文心模型有三个属性模型名称、多样性、采样范围,模型名称目前有三个可选择Ernie-Bot、Ernie-Bot-turbo、Ernie-Bot-4。
博主这里选择的模型名称是Ernie-Bot-4,多样性和采样范围保持默认值,具体如何调整这个未深入了解,暂时对业务影响不大。
具体模型说明,可查看官方文档: https://agents.baidu.com/docs/model/ERNIE_bot_introduce/
输出效果
通过前面设定的prompt提示词和模型,能够准确输出我们想要的数据文案。
有了这些数据文案,下一步就是如何将这些数据传递到API接口。
测试工具链
目前有HTTP请求工具和百度搜索工具
HTTP请求工具
有五个属性,两个必要属性,三个非必要属性
属性 | 解释 |
请求连接 | 填写目标api接口地址 |
请求方法 | Get或Post请求 |
Headers | 设置请求头,token等校验参数值 |
Query | 地址请求参数 |
Body | 请求体参数 |
下面是调用一个测试接口来演示工具链的使用。
表头设置了一个token和Content-Type
输出效果
梗图工具链
梗图设置了20个请求参数,此处为了验证工具链接收参数和输出结果,这里固定参数值。
输出效果
全流程
根据上面大模型链和工具链结合,形成梗图七夕版文案生成功能。
这里需要提的一点是,大模型设置的输出json格式参数,在下游工具链是可以通过点操作符的方式设置。
比如:result.name、result.juzi11
梗图优化
通过上面梗图结构分析,梗图标题其实用了人物名称或者角色名称,其实不太准确或者不完整。
比如:输入海王花心梗,标题直接显示海王,就缺少了花心这个描述,标题应该显示海王花心梗。
因此,基于这个情况,进行了梗图标题定位以及prompt优化,如下
Prompt提示词
新增多一个title字段
优化后梗图结构
组成 | 解释 | 参考值 | 备注 |
标题 | 梗图标题 | 海王-消失梗、直男-送丑花梗等 | 基本上就是用户输入的文本作为标题 |
名称 | 人物名称、角色名称、称谓等 | 海王、渣男、直男等 | – |
吐槽词 | 特定人物说的假话(谎话)和真话 | 口头说喜欢你(转头就和三个妹子热聊) | – |
头像 | 具有一定相关性的黑色线条头像 | 固定的头像 | 为了提高性能这里并没有使用动态化绘图 |
高频词 | 文案中出现频率较高的词 | 七夕 | 这个暂时未实现 |
提示词前后对比
优化前效果
优化后效果
API接口
博主使用的是C#实现的文本叠加图片方式生成梗图,最后以Markdown方式输出图片路径字符串。
当然,这里的API接口,小伙伴们可以使用自己熟悉的ava、python等后端j开发语言进行叠图逻辑实现,逻辑并不难。
博主这里就暂不展开详细解释,感兴趣的可加博主咨询。
BOS图片水印
由于水印文本需要进行base64编码,所以需要在API接口进行编码以及设置相关参数返回图片路径。
博主这里就暂不展开详细解释,感兴趣的可加博主咨询。
添加文字水印官方文档:https://cloud.baidu.com/doc/BOS/s/Cldh5wqlh
至此,低代码开发的梗图就完成了,图片实际效果在后端API实现或者BOS云图水印实现。
API或BOS云图主要是实现图文合成功能,设置文案字体大小、换行、定位。
梗图插件
官方插件文档-能力类插件开发: https://agents.baidu.com/docs/develop/ability-plugin/basic/develop_from_scratch/ 由于目前低代码智能体还无法进行分发,而零代码支持分发,并且零代码可以添加插件工具。
因此,博主也研究了下插件的实现流程,插件对接的就是API接口,零代码可提供文案,插件负责传递参数值,同样能实现梗图业务。
格式说明
OpenAPI(以前称为 Swagger)规范的 YAML 格式。
这是一个用于描述 RESTful 风格的 Web 服务 API 的应用程序接口规范。
这种规范允许开发人员定义 API 的结构和行为,以便客户端和服务器之间的交互可以通过文档来说明。
构思插件清单文件
设置插件名称、描述、插件logo等信息。
特别是这个字段-description_for_model,有点类似小型prompt提示词,让大模型触发插件的依据之一。
ai-plugin.json文件内容如下
定义插件服务描述文件
主要设置servers.url和paths值,组合起来就是完成的API接口,比如:https://www.test.com+/api/test/one。
并且可声明当前请求方式和请求参数以及响应参数,和低代码开发的HTTP请求工具套件类似,一个是文件配置化,一个是可视配置化。
openapi.yaml,文件内容如下
编写示例描述文件
设置示例,可以作为插件测试一部分,同时也可给实际使用时作为一个参考。
【content: 输入了某某梗,或者和梗相关的内容】对于预览阶段这个描述起到识别用户输入的文本来触发插件的作用。
example.yaml,文件内容如下
已被占用
model_for_name已被占用,插件英文名要确保唯一,不能重复。
预览效果
首先插件文件需要上传到自己服务器,确保API接口也能够调通。
之后就是上传插件文件校验,校验通过测试没问题就是提交审核。
下面是审核通过后进行的预览界面,同样可以查看到请求参数和响应参数,在零代码调用预览时也是可以查看到。
零代码
完成上面的插件开发并提交完成审核后,就可以零代码创建智能体并使用插件工具。
零代码的人物设定prompt和低代码的提示词模板会有些许不同,核心prompt不变。
目标与角色
在原来基础上增加触发插件的描述,确保智能体能够准确触发到插件。
思考路径
通过增加描述,目的同样是提高智能体触发插件的概率。
通过以下描述,限定仅输出图片
获取到的文案内容只需要传递给梗图七夕版插件即可,无需输出显示。
个性化
增加智能体输出内容,只输出少量描述和Markdown格式图片
预览效果
在预览结果界面同样可以查看输入和输出参数
图片显示
经验分享
文章分析
通过写文章方式分析智能体,会让自己对智能体的定位更加明确和清晰。
1)细化分析,让自己智能体定位更加清晰
可能每个人都有自己优化方式方法,博主优化prompt的方法就是通过写文章来分析《梗图七夕版》智能体,
在写的过程中会进行一定的拆分细化分析,在细化分析的过程中,总会发现一些问题,同时也会思考是否合理。
比如:博主在分析过程中就是发现单单显示人物名称是不太准确的
2)了解概念,prompt的优化方向才会正确
起初,博主只是通过体验现有的梗图,大概知道点玩法和概念并没有深入了解。
所以,在写文章过程中,就会把梗图概念过一遍,也加深自己的印象。
反过来分析自己的prompt编写的是否规范和正确,目前线上版本也是在了解了一定概念后优化了一版。
刚开始的prompt对于文案的描述是【八组正反话文案】,感觉这个描述也是不太准确,后来改为了【八组真话和假话句子】
比如:你能够根据用户输入的{input}文本提取角色名称,然后根据这个角色来推断他(她)可能会说的真话和假话。
再之后优化为:你能够根据用户输入的{input}文本提取标题,然后根据这个标题来推断他(她)可能会说的真话和假话。
BOS水印
BOS水印个数是有一定上限,最多支持16个水印文本。
因此,对于八组吐槽梗词来说,极大可能会超过16个,因为是根据每一个行来算一个水印数量,并且每一组的行数动态保持在2到5行之间,所以加上名称标题,至少水印个数需要17到41个。
所以,如果梗图这个要想使用BOS水印方案,就必须去掉三组或者五组才能满足业务需求。
当然,基于这个情况,小伙伴可以分享下你们的解决方案,目前我能想到的解决方案就是去掉三组以上吐槽梗词。
低代码
套件链之间是相互独立又是可以相互关联,特别是对于参数的传递,上游链定义的参数是可以给下游链调用。
并且是使用点操作符的方式获取和传递。
这里分享的经验点就是,可以通过拆分独立套件模块来测试。
比如:大模型链模块测试,就可以看到是否准确输出了每个json参数值。
插件prompt
在写文章的时候,突然明白插件model字段的含义,也就是说,提示词模板或人物设定实际和插件的model字段意思一样。
灵光一闪,马上把prompt换行去掉后,放到字段description_for_model里进行测试,果然是有效果的。如下
当然作为插件,这里当然不是这样子使用,梗图七夕版插件工具主要用于接收参数的作用,这里演示的目的是,可以设置一定的prompt去实现一些功能。
零代码
零代码这里的经验分享有一点可以提下,就是核心逻辑还是在prompt的优化上。可以充分发挥零代码的理解、生成、逻辑和记忆能力、
体验
欢迎体验梗图七夕版智能体。
低代码-梗图七夕版:https://mbd.baidu.com/ma/s/paAHEzRi
零代码-梗图七夕版:https://mbd.baidu.com/ma/s/j9PqL4kb
本次就分享到这,若有说的不对或者不准确的地方,望大家指正。有任何疑问都可加我咨询