OpenAI Dalle3 接口

先来看下官方接口的参数和响应值:

Body

  {
    "model": "dall-e-3",
    "prompt": "A cute baby sea otter",
    "n": 1,
    "size": "1024x1024"
}
  

Response

  {
  "created": 1589478378,
  "data": [
    {
      "url": "https://..."
    },
    {
      "url": "https://..."
    }
  ]
}
  

编排思路

  1. 通过 AI 来优化图片绘制的提示词(这部省略了,自己找提示词即可)
  2. 通过HTTP 模块调用 Dalle3 接口,获取图片的 URL。
  3. 通过文本加工来构建Markdown的图片格式。
  4. 通过指定回复来直接输出图片链接。

1. 构建 HTTP 模块

请求参数直接复制 Dalle3 接口的即可,并求改 prompt 为变量。需要增加一个Headers.Authorization

Body:

  {
    "model": "dall-e-3",
    "prompt": "{{prompt}}",
    "n": 1,
    "size": "1024x1024"
}
  

Headers:

Authorization: Bearer sk-xxx

Response:

响应值需要根据Dalle3接口的返回值进行获取,我们只绘制了1张图片,所以只需要取第一张图片的URL即可。给 HTTP 模块增加一个keydata[0].url的输出值。

2. 文本加工 - 构建图片链接

Markdown语法中![图片描述](图片链接)表示插入图片,图片链接由HTTP模块输出。

因此可以增加一个输入来接收HTTP模块的图片链接输出,并在文本内容中通过变量来引用图片链接,从而得到一个完整的Markdown图片格式。

3. 指定回复

指定回复可以直接输出传入的内容到客户端,因此可以直接输出加工好的Markdown图片格式即可。

编排代码

  [
  {
    "moduleId": "userGuide",
    "name": "core.module.template.App system setting",
    "flowType": "userGuide",
    "position": {
      "x": 454.98510354678695,
      "y": 721.4016845336229
    },
    "inputs": [
      {
        "key": "welcomeText",
        "type": "hidden",
        "valueType": "string",
        "label": "core.app.Welcome Text",
        "showTargetInApp": false,
        "showTargetInPlugin": false,
        "connected": false
      },
      {
        "key": "variables",
        "type": "hidden",
        "valueType": "any",
        "label": "core.module.Variable",
        "value": [],
        "showTargetInApp": false,
        "showTargetInPlugin": false,
        "connected": false
      },
      {
        "key": "questionGuide",
        "valueType": "boolean",
        "type": "switch",
        "label": "",
        "showTargetInApp": false,
        "showTargetInPlugin": false,
        "connected": false
      },
      {
        "key": "tts",
        "type": "hidden",
        "valueType": "any",
        "label": "",
        "showTargetInApp": false,
        "showTargetInPlugin": false,
        "connected": false
      }
    ],
    "outputs": []
  },
  {
    "moduleId": "userChatInput",
    "name": "core.module.template.Chat entrance",
    "flowType": "questionInput",
    "position": {
      "x": 597.8136543694757,
      "y": 1709.9244174501202
    },
    "inputs": [
      {
        "key": "userChatInput",
        "type": "systemInput",
        "valueType": "string",
        "label": "core.module.input.label.user question",
        "showTargetInApp": false,
        "showTargetInPlugin": false,
        "connected": false
      }
    ],
    "outputs": [
      {
        "key": "userChatInput",
        "label": "core.module.input.label.user question",
        "type": "source",
        "valueType": "string",
        "targets": [
          {
            "moduleId": "mqgfub",
            "key": "prompt"
          }
        ]
      }
    ]
  },
  {
    "moduleId": "mqgfub",
    "name": "Dalle3绘图",
    "flowType": "httpRequest468",
    "showStatus": true,
    "position": {
      "x": 1071.8956245626034,
      "y": 1236.690825267034
    },
    "inputs": [
      {
        "key": "switch",
        "type": "target",
        "label": "core.module.input.label.switch",
        "description": "core.module.input.description.Trigger",
        "valueType": "any",
        "showTargetInApp": true,
        "showTargetInPlugin": true,
        "connected": false
      },
      {
        "key": "system_httpMethod",
        "type": "custom",
        "valueType": "string",
        "label": "",
        "value": "POST",
        "required": true,
        "showTargetInApp": false,
        "showTargetInPlugin": false,
        "connected": false
      },
      {
        "key": "system_httpReqUrl",
        "type": "hidden",
        "valueType": "string",
        "label": "",
        "description": "core.module.input.description.Http Request Url",
        "placeholder": "https://api.ai.com/getInventory",
        "required": false,
        "showTargetInApp": false,
        "showTargetInPlugin": false,
        "value": "https://api.openai.com/v1/images/generations",
        "connected": false
      },
      {
        "key": "system_httpHeader",
        "type": "custom",
        "valueType": "any",
        "value": [
          {
            "key": "Authorization",
            "type": "string",
            "value": "sk-xxx"
          }
        ],
        "label": "",
        "description": "core.module.input.description.Http Request Header",
        "placeholder": "core.module.input.description.Http Request Header",
        "required": false,
        "showTargetInApp": false,
        "showTargetInPlugin": false,
        "connected": false
      },
      {
        "key": "system_httpParams",
        "type": "hidden",
        "valueType": "any",
        "value": [],
        "label": "",
        "required": false,
        "showTargetInApp": false,
        "showTargetInPlugin": false,
        "connected": false
      },
      {
        "key": "system_httpJsonBody",
        "type": "hidden",
        "valueType": "any",
        "value": "{\r\n    \"model\": \"dall-e-3\",\r\n    \"prompt\": \"{{prompt}}\",\r\n    \"n\": 1,\r\n    \"size\": \"1024x1024\"\r\n  }",
        "label": "",
        "required": false,
        "showTargetInApp": false,
        "showTargetInPlugin": false,
        "connected": false
      },
      {
        "key": "DYNAMIC_INPUT_KEY",
        "type": "target",
        "valueType": "any",
        "label": "core.module.inputType.dynamicTargetInput",
        "description": "core.module.input.description.dynamic input",
        "required": false,
        "showTargetInApp": false,
        "showTargetInPlugin": true,
        "hideInApp": true,
        "connected": false
      },
      {
        "key": "prompt",
        "valueType": "string",
        "label": "prompt",
        "type": "target",
        "required": true,
        "description": "",
        "edit": true,
        "editField": {
          "key": true,
          "name": true,
          "description": true,
          "required": true,
          "dataType": true
        },
        "connected": true
      },
      {
        "key": "system_addInputParam",
        "type": "addInputParam",
        "valueType": "any",
        "label": "",
        "required": false,
        "showTargetInApp": false,
        "showTargetInPlugin": false,
        "editField": {
          "key": true,
          "name": true,
          "description": true,
          "required": true,
          "dataType": true
        },
        "defaultEditField": {
          "label": "",
          "key": "",
          "description": "",
          "inputType": "target",
          "valueType": "string",
          "required": true
        },
        "connected": false
      }
    ],
    "outputs": [
      {
        "key": "finish",
        "label": "core.module.output.label.running done",
        "description": "core.module.output.description.running done",
        "valueType": "boolean",
        "type": "source",
        "targets": []
      },
      {
        "key": "system_addOutputParam",
        "type": "addOutputParam",
        "valueType": "any",
        "label": "",
        "targets": [],
        "editField": {
          "key": true,
          "name": true,
          "description": true,
          "dataType": true
        },
        "defaultEditField": {
          "label": "",
          "key": "",
          "description": "",
          "outputType": "source",
          "valueType": "string"
        }
      },
      {
        "type": "source",
        "valueType": "string",
        "key": "data[0].url",
        "label": "url",
        "description": "",
        "edit": true,
        "editField": {
          "key": true,
          "name": true,
          "description": true,
          "dataType": true
        },
        "targets": [
          {
            "moduleId": "nl6mr9",
            "key": "url"
          }
        ]
      }
    ]
  },
  {
    "moduleId": "xy76o2",
    "name": "core.module.template.Assigned reply",
    "flowType": "answerNode",
    "position": {
      "x": 2204.027057268489,
      "y": 1256.786345213533
    },
    "inputs": [
      {
        "key": "switch",
        "type": "target",
        "label": "core.module.input.label.switch",
        "description": "core.module.input.description.Trigger",
        "valueType": "any",
        "showTargetInApp": true,
        "showTargetInPlugin": true,
        "connected": false
      },
      {
        "key": "text",
        "type": "textarea",
        "valueType": "any",
        "label": "core.module.input.label.Response content",
        "description": "core.module.input.description.Response content",
        "placeholder": "core.module.input.description.Response content",
        "showTargetInApp": true,
        "showTargetInPlugin": true,
        "connected": true
      }
    ],
    "outputs": [
      {
        "key": "finish",
        "label": "core.module.output.label.running done",
        "description": "core.module.output.description.running done",
        "valueType": "boolean",
        "type": "source",
        "targets": []
      }
    ]
  },
  {
    "moduleId": "nl6mr9",
    "name": "core.module.template.textEditor",
    "flowType": "pluginModule",
    "showStatus": false,
    "position": {
      "x": 1690.1826860670342,
      "y": 1262.3858719789062
    },
    "inputs": [
      {
        "key": "pluginId",
        "type": "hidden",
        "label": "",
        "value": "community-textEditor",
        "valueType": "string",
        "connected": false,
        "showTargetInApp": false,
        "showTargetInPlugin": false
      },
      {
        "key": "switch",
        "type": "target",
        "label": "core.module.input.label.switch",
        "description": "core.module.input.description.Trigger",
        "valueType": "any",
        "showTargetInApp": true,
        "showTargetInPlugin": true,
        "connected": false
      },
      {
        "key": "textarea",
        "valueType": "string",
        "label": "文本内容",
        "type": "textarea",
        "required": true,
        "description": "可以通过 {{key}} 的方式引用传入的变量。变量仅支持字符串或数字。",
        "edit": false,
        "editField": {
          "key": true,
          "name": true,
          "description": true,
          "required": true,
          "dataType": true,
          "inputType": true
        },
        "connected": false,
        "placeholder": "可以通过 {{key}} 的方式引用传入的变量。变量仅支持字符串或数字。",
        "value": "![]({{url}})"
      },
      {
        "key": "url",
        "valueType": "string",
        "label": "url",
        "type": "target",
        "required": true,
        "description": "",
        "edit": true,
        "editField": {
          "key": true,
          "name": true,
          "description": true,
          "required": true,
          "dataType": true,
          "inputType": false
        },
        "connected": true
      },
      {
        "key": "DYNAMIC_INPUT_KEY",
        "valueType": "any",
        "label": "需要加工的输入",
        "type": "addInputParam",
        "required": false,
        "description": "可动态的添加字符串类型变量,在文本编辑中通过 {{key}} 使用变量。非字符串类型,会自动转成字符串类型。",
        "edit": false,
        "editField": {
          "key": true,
          "name": true,
          "description": true,
          "required": true,
          "dataType": true,
          "inputType": false
        },
        "defaultEditField": {
          "label": "",
          "key": "",
          "description": "",
          "inputType": "target",
          "valueType": "string",
          "required": true
        },
        "connected": false
      }
    ],
    "outputs": [
      {
        "key": "text",
        "valueType": "string",
        "label": "core.module.output.label.text",
        "type": "source",
        "edit": false,
        "targets": [
          {
            "moduleId": "xy76o2",
            "key": "text"
          }
        ]
      }
    ]
  }
]