哈基鹏的智能体实战(三)
Nano Banana Pro 生图工作流

本文将记录自己调用 Nano Banana Pro api 接口 而搭建的图像生成工作流,使用api 是 Grsai 大模型 API 源头中转站,超稳定,价格低廉中获取的。
该网站提供了很多模型的api接口:

接下来,将详细介绍如果在dify当中搭建调用该网站api接口的工作流:
我们设置聊天应用的 dify 工作流。

用户输入节点
用户输入这块,设置一个可文件上传的输入接口;支持后续上传参考图进行图生图。


Nano Banana Pro API
我们加入HTTP 请求节点,并根据Grsai API 提供的文档进行设置:


JSON参考如下:
1 | { |
参数说明:
| 参数名 | 含义 | 实列 |
|---|---|---|
| model(必填) | 模型名称 | 支持模型有:nano-banana-fast、nano-banana、nano-banana-pro、nano-banana-pro-vt、nano-banana-pro-vt、nano-banana-cl、nano-banana-vip、nano-banana-pro-4k-vip |
| urls(选填) | 参考图URL or Base64 | [“https://example.com/example.png"] |
| prompt(必填) | 提示词 | “一只可爱的猫咪在草地上玩耍” |
| aspectRatio(选填) | 输出图像比例 | 支持的比例有:auto(默认)、1:1、16:9、9:16、4:3、3:4、3:2、2:3、5:4、4:5、21:9 |
| imageSize(选填) | 输出图像大小 | 支持的大小:1K(默认)、2K、4K |
| webHook(选填) | 进度与结果的回调链接 | “https://your-webhook-url.com/callback“ |
| shutProgress(选填) | 关闭进度回复,直接回复最终结果,建议搭配webHook使用 | false |
webHook结果(请求后该结果会返回一个id,用于对应回调数据)
1 | { |
API 接口默认以Stream流式响应进行回复。如果填了webHook,进度与结果则以Post请求回调地址的方式进行回复。
模型结果获取接口
因此,我们使用一个额外的接口单独获取结果:

该接口请求的参数”id” 就是从Nano Banana Pro api 接口返回的id

代码执行——获取id
由于id被放在body键的字符串值当中,因此额外加入一个代码执行节点,将这个值取出来,用于后续的结果获取接口。

得到的结果返回如下:

获取结果接口的响应结果如下:
1 | { |
响应参数说明
| 参数 | 描述 | 示例 |
|---|---|---|
| code | 状态码 | 0表示成功,-22任务不存在 |
| msg | 状态信息 | success |
| data | 绘画结果 |
模型生成需要耗费1~5分钟,甚至更长的时间,因此如果直接通过获取结果接口去获取,并不一定就能获取到结果,如果生成还在进行中,获取的结果(results:null)是给空值。
因此我们需要一个循环节点,一直调用该接口去获取结果,直到results不为空为止。

由于模型获取结果接口返回的值(results)也是放在body键当中的字符串中:

代码执行2——获取results
同样,我们加入代码执行节点去得到results的值用于循环的判断:

运行结果如下:

代码执行4——异常获取
如果只通过results去判断是否结束循环,还会出现一个问题,那就是如果参数配置错误、又或许是接口出现异常而报错,results依然是null,但模型生成已经因为异常而停止生成了,因此我们需要加入额外的异常获取添加到循环的判断中,确保工作流流畅的运行:

由此,循环节点的结束判断通过如下去设置:

循环次数尽可能拉到最大,我这里设置最大循环次数是1000,初始循环节点的最大循环次数是100,可能不够由于去不断反复获取结果,可到路径**./dify/docker/.env** 当中去修改LOOP_NODE_MAX_COUNT=1000
变量赋值
最后,我们将模型获取结果得到的结果,不断复制给我们所创建的全局变量image_url当中:

异常输出

这里有两条路径,当如果是因为异常报错结束的循环,那么我们就返回报错信息:



代码执行3——获取url链接
如果正常获取到图像,那么我们从全局变量image_url 当中提取results的url链接:

模板转换
如果你想要获取到的结果能够直接展示在dify的直接回复中,那么需要把url链接转换成markdown格式再传入到直接回复中。

结果如下:





