毫无疑问,老规矩,直接说正事。
“ dify自带了azure_dalle3工具,并且是从源码层面接入的。如果是你dify的工作流老玩家,你可能会比较头疼,因为他这个工具很多参数没有办法从工作流的其他节点获得变量输入。毫不否认,dify自带的dalle3工具做的很便捷,但是深度应用时恐怕有点尴尬。于是,我给dify手搓接入azure_dalle3的工具示例。分享给dify的新手玩家。”
本次我们分享整个工具openapi-swagger格式源码,在工作流中可直接使用。本次测试的dify版本为:0.6.13。
01
—
azure_dalle3(手搓版)工具源码
{"openapi": "3.1.0","info": {"title": "mydalle3","description": "飞鱼手搓的azure-dalle3的dify工具组件,微信公众号:提示日记","version": "1.0.0"},"tags": [],"paths": {"/openai/deployments/{deployment-id}/images/generations": {"post": {"operationId": "mydalle3","summary": "手搓azuredalle3","deprecated": false,"description": "","tags": [],"parameters": [{"name": "endpoint","in": "path","description": "支持的 Azure OpenAI 终结点(协议和主机名,例如:aoairesource.openai.azure.com。将“aoairesource”替换为你的 Azure OpenAI 资源名称)","required": true,"example": "ruidianchenjing.openai.azure.com","schema": {"type": "string","examples": ["https://xxxxxx.openai.azure.com"]}},{"name": "deployment-id","in": "path","description": "你在azure上部署dalle3时自定义的模型名称","required": true,"example": "dalle3","schema": {"type": "string","examples": ["如:dalle3"]}},{"name": "api-version","in": "query","description": "api版本号","required": true,"example": "2024-06-01","schema": {"type": "string","const": "2024-06-01"}},{"name": "api-key","in": "header","description": "在此处提供 Azure OpenAI API 密钥","required": true,"example": "fd766874fa074553bce276b591234567","schema": {"type": "string"}}],"requestBody": {"content": {"application/json": {"schema": {"type": "object","properties": {"prompt": {"type": "string","title": "prompt","description": "提示词"},"response_format": {"type": "string","const": "url","title": "图像返回格式","description": "返回生成图像的格式,建议填写:url"},"n": {"type": "integer","title": "图像数","description": "要生成的图像数,生成1张就填写:1,生成2张就填写:2,以此类推","enum": [1,2,4,6,8,10],"default": 1},"size": {"type": "string","title": "图像尺寸","description": "生成的图像的大小,可填写项目:1024x1024,1024x1792,1792x1024","enum": ["1024x1024","1024x1792","1792x1024"],"default": "1024x1024"},"quality": {"type": "string","title": "质量","description": "将生成的图像的质量,可填写项:standard(表示:标准)、hd(表示高清)","enum": ["standard","hd"],"default": "standard"},"style": {"type": "string","enum": ["vivid","natural"],"title": "风格","description": "生成的图像的样式。可填写项:vivid(表示:vivid 创建超现实和戏剧性的图像)、natural (表示:natural 会创建更自然、不那么超现实的图像)"},"seed": {"type": "integer","title": "种子","description": "这是用于保持图像一致性的种子值。还是建议写上","examples": [12345678]}},"required": ["prompt","response_format","n"]}}}},"responses": {"200": {"description": "成功","content": {"application/json": {"schema": {"type": "object","properties": {"": {"type": "string","maxLength": 8,"minLength": 1,"examples": ["12345678"]}},"required": [""]}}}}},"security": []}}},"components": {"schemas": {},"securitySchemes": {}},"servers": [{"url": "{endpoint}"}]}
注意:
1、不需要设置鉴权,我们把鉴权参数api-key台前设置。当然你也可以尝试改一下,放到鉴权里面去。这个随你,本次示例不放到dify工具的鉴权设置中。
2、考虑到dalle3生图时,可能会有保持图像一致性的问题,我们这次依然采用seed值作为参数传给dalle3。
3、本次手搓的工具,绝大部分的参数,在工作流中都可以通过变量引入,也就是说,你完全可以在“开始”节点中预设变量,然后在手搓版dalle3工具中直接引用。我要说下,为什么要这么做?其实原因很简单,dify中使用openapi创建的工具,我们随时随地都可以修改源码,从而适应dalle模型官方版本的更新迭代,然后工作流中可直接使用,就不需要你去修改dify自带的dalle工具源码了,我估计很多新手玩家,没有多么深的编程经验,恐怕也不会改,相比较而言,新手玩家,直接修改openapi的代码,门槛还是低很多的。
在dify后台-工具页面,点击“创建自定义工具”。按照下图所示操作就行,记得点击保存。
02
—
dify自带与本次咱们手搓工具的使用区别
1、我们先看看两者默认状态的区别。
1.1先看看dify自带的azure dalle3,如下图所示:

1.2我们看看本次手搓版本,如下图所示:

结论:
咱们手搓的外观上,我们这个确实差点意思,没办法,dify中通过openapi-swagger创建的工具都长这样。
2、我们看看工具使用界面的区别。
2.1先看看dify自带的azure dalle3,如下图所示:

2.2我们看看本次手搓版本,如下图所示:

是的,你没看错,可设置的参数,多到一屏都展示不全,并且绝大部分的参数都是可以通过变量引入的方式去设置。
结论:
在实际使用的过程中,咱们这次手搓的,很明显更加友好,除了前文说的那些以外,不知道大家注意到没有,如果你的工作流中,有大量的绘图任务,你完全可以设置不同的azure账户来分流,防止出现请求阈值上限的报错。
03
—
使用注意事项
1、不管你用的是dify自带的dalle3工具,还是咱们这次手搓的,工具输出的是json内容,你都要解析出来。当你要求一次回复输出图片时,建议你提取json中URL参数值,然后请求这个url,将图片存到服务器上,才能进行输出。
2、dify自带的dalle3工具返回的json,图片url是一个相对路径。咱们手搓的这个输出的是图片绝对路径(微软的图片地址)。所以你使用咱们自带的这个工具,可以用“代码执行”节点提取url参数后,后面最好接入一个“http请求”节点,直接”get”这个微软地址,将图片存到咱们自己的服务器上。
好了,今天就说这么多吧。工作流我就不发了,大家自己玩一下就知道了。如果喜欢,就点个关注吧!


