【Microsoftテクノロジー コラボ】Power Automate x OpenAI（DALL-E2, ChatGPT関連） x LINEで簡単に高機能なアプリを実現する【rinna社のJapanese Stable Diffusionもあるよ】

<b>※ 追記 : 2023年3月2日　[ChatGPTのAPI公開されました🎉](https://twitter.com/OpenAI/status/1630992406542970880?s=20) ということでChatGPT APIの内容を追記しました！</b>

こんにちは、もっちゃんと申します。

この記事は[Microsoft Power Automate Advent Calendar 2022](https://qiita.com/advent-calendar/2022/powerautomate) カレンダー2の7日目です。

Microsoftのテクノロジーが今、とても熱いです！
Microsoftは巨大で優れた製品群を複数有しており、世界でも類を見ない状態となっています。
古くからある製品群はもちろんのこと、Microsoft Azureのクラウドを始め、GitHub, VS Code, OS, ハードウェアに至るまで、そして今回のキーワードでもあるOpenAIもですね。
さらにそれらをしっかり連携させてシナジーを生み出していく構想まであります。とても熱い展開が期待できそうですね^^

この記事ではそんな熱いテクノロジーのうち、Power AutomateとOpenAIが出している各種AIモデルの機能、さらにrinna社のJapanese Stable Diffusionも含めて、簡単に高機能なアプリを実現していきます。アプリ化するにあたってLINEを活用すると便利なのでこちらも組み込んでいきますね！

## Microsoft Power Platform の Power Automateとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121860/c3443129-677a-15b8-774d-a9b6406c7a66.png)

>Microsoft が提供するプロセスオートメーションサービスです。

* https://powerautomate.microsoft.com/ja-jp/digital-process-automation/

Microsoftが発信する最新のメッセージからは年々、より本質に注力できるように支援していくという内容が色濃くなっているように感じます。
そういった状況を作り出すため、革新的なツール・サービスがMicrosoftから続々と出てきている状態です。
Power Automateもその１つで、専門的な知識がない方でも開発(プロセスの自動化)を行うことができます。

## OpenAIとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121860/eefc8a84-8489-ff1f-162d-71b8abb70240.png)

>OpenAI は、AI の研究と展開を行う会社です。私たちの使命は、汎用人工知能が人類全体に利益をもたらすことを保証することです。

* https://openai.com/about/

いま世間を賑わせているChatGPT(対話型AI)やGPT-3(大規模言語モデル)、DALL-E(画像生成AI)といった優れたAIを研究・開発しており、業界のトップを走っている組織です。

OpenAIとMicrosoftはパートナーシップを結んでいます。Microsoftファミリーの一員ですね。

AI界隈は革新的な技術の出現により、加速度的に進化していっています。また、言語分野、画像分野と一見違う分野に見えてもコア技術はお互いに応用していたりと、やはり根底のところでは無関係ではない様子がうかがえ、人間の脳が行っている汎用的な能力に類似する技術が確立・発展されてきているのではないかと感じています。AGI(汎用人工知能)の活躍が実現される日も近いかもしれませんね。

## rinna社が公開した「Japanese Stable Diffusion」とは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121860/71e13ee5-bbf9-d954-0f38-7796f67b8ded.png)

公式サイト↓

* https://developers.rinna.co.jp/

画像生成AIとして大変注目を浴びている「[Stable Diffusion](https://github.com/CompVis/stable-diffusion)」ですが、[rinna社](https://rinna.co.jp/)より日本語に特化した画像生成モデル「[Japanese Stable Diffusion](https://prtimes.jp/main/html/rd/p/000000025.000070041.html)」が開発されました、[Hugging Face](https://huggingface.co/spaces/rinna/japanese-stable-diffusion)や[github](https://github.com/rinnakk/japanese-stable-diffusion)にも公開されていますね！


詳しくは下記の記事を参考に見ていただくと良いと思います！
https://qiita.com/joohounsong/items/fdbb783a9467478c6479

※ rinna社の「Japanese Stable Diffusion」も試しに使ってみましたので今回の記事に追加で盛り込んでみました！

## 作り方

### OpenAI のAPI Key取得

まずは下記からアカウントを登録します。

https://auth0.openai.com/u/signup/identifier?state=hKFo2SB0S2lRQ0VKZEltSGFLNlBNOHNOM1pGTHFPRGFIbGlmUKFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIEpCc2ZFRWV2VVlpcUV1T2g1bTFrZ3RxYWhkMFZGQ2Z4o2NpZNkgRFJpdnNubTJNdTQyVDNLT3BxZHR3QjNOWXZpSFl6d0Q

API Key取得し、メモします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/6ef9eb43-f257-a413-cdbf-81c6b71081ef.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/ab86816a-953e-5533-5f62-9f0f046ca8d7.png)


### LINE DevelopersでMessaging API チャネルを作成

下記を参考に作成します。
https://developers.line.biz/ja/docs/messaging-api/getting-started/#using-console
https://developers.line.biz/ja/docs/messaging-api/building-bot/#page-title

チャネルアクセストークンをメモします。
![スクリーンショット 2022-12-06 23.42.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/89f045d7-d1a7-4740-f654-7bddf084d68e.png)

### Power AutomateでDALL-E2のフロー作成


左にある「作成」から「インスタントクラウドフロー」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/67cafe51-89db-268c-8071-9189dadc0b1c.png)


フロー名を入力、HTTP要求の受信時を選択し、「作成」をクリックします。
![スクリーンショット 2022-12-06 13.42.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/e849f491-5269-2fcf-6472-2d5d3da52445.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/263e7eeb-a331-bb93-6323-a6dc49d71f5a.png)

下記をコピーして、「HTTP要求の受信時」のJSONスキーマに入力します。

<details><summary>JSONコード</summary>

```json
{
    "properties": {
        "events": {
            "items": {
                "properties": {
                    "source": {
                        "type": "object",
                        "properties": {
                            "userId": {
                                "type": "string"
                            }
                        }
                    },
                    "message": {
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "text": {
                                "type": "string"
                            },
                            "address": {
                                "type": "string"
                            },
                            "latitude": {
                                "type": "string"
                            },
                            "longitude": {
                                "type": "string"
                            },
                            "type": {
                                "type": "string"
                            }
                        },
                        "type": "object"
                    },
                    "postback": {
                        "properties": {
                            "data": {
                                "type": "string"
                            }
                        },
                        "type": "object"
                    },
                    "replyToken": {
                        "type": "string"
                    },
                    "type": {
                        "type": "string"
                    }
                },
                "required": [
                    "replyToken",
                    "type"
                ],
                "type": "object"
            },
            "type": "array"
        }
    },
    "type": "object"
}
```
</details>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/f5dca2f9-3844-327a-a183-8ff00f18d869.png)

「新しいステップ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/46893f19-74ea-d085-aaa1-af4259b01a62.png)

「変数を初期化する」と検索し、「変数を初期化する」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/1516396d-3c35-bdc7-ed23-e3c663b99e29.png)

下記のように設定し、「新しいステップ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/313b32e4-68a8-140f-a740-06e2a955365d.png)

同じように、「変数を初期化する」と検索し、「変数を初期化する」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/1516396d-3c35-bdc7-ed23-e3c663b99e29.png)

下記のように設定し、「新しいステップ」をクリックします。

||設定値|
|:-----------|:------------|
| 名前       | access token        |
| 種類     | 文字列      |
| 値       | {LINE側でメモしたアクセストークン}        |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/0fa9a9b1-a881-3e38-426f-02902dda93bc.png)

「コントロール」と検索し、組み込みタブ、「Apply to each」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/fb34e86f-5209-31a7-35e6-01ad57a20620.png)

以前の手順から出力を選択に「@{triggerBody()?['events']}」を入力し、「アクションの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/feb37689-d0e3-58c3-4bb1-649a9c70c765.png)

「スイッチ」と検索し、「スイッチ」をクリックします。
![スクリーンショット 2022-12-06 11.47.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/f00c3119-a01c-8627-d6b5-5350974c819d.png)

スイッチのオンに、「@{items('Apply_to_each')?['message']['type']}」を、ケースに「text」を入力し、「アクションの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/066b0c2c-a33d-ab0d-0d65-72fe4aee4094.png)

HTTPと検索し、組み込みタブ、「HTTP」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/f6d136a1-d282-828d-3762-46f895f96170.png)


下記のように設定し、アクションの追加をクリックします。

:::note
DALL-E2のAPIは下記を参考
https://openai.com/blog/dall-e-api-now-available-in-public-beta/
https://beta.openai.com/docs/api-reference/images/create#images/create-response_format
:::

|  | 設定値 |
|:-----------|:------------|
| 方法       | POST        |
| URI     | https://api.openai.com/v1/images/generations      |
| ヘッダー       | {<br>&nbsp;&nbsp;"Content-Type": "application/json",<br>&nbsp;&nbsp;"Authorization": "Bearer {メモしたOpenAIのAPI Key}"<br>}|
| 本文       | {<br>&nbsp;&nbsp;"prompt": "@{items('Apply_to_each')?['message']?['text']}",<br>&nbsp;&nbsp;"n": 1,<br>&nbsp;&nbsp;"response_format": "b64_json",<br>&nbsp;&nbsp;"size": "1024x1024"<br>}        |


:::note warn
ヘッダーは赤枠をクリックしてテキストモードに切り替えます。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/bb1e6334-9aaf-e7fa-a418-f7c3cc177e03.png)

「json」と検索し、組み込みタブ、「JSONの解析」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/0d7c0670-7c24-f4c6-2e6d-f8276c33522b.png)


下記のように設定し、アクションの追加をクリックします。

|  | 設定値 |
|:-----------|:------------|
| コンテンツ       | @{body('HTTP')}        |
| スキーマー       | 下記JSON       |

<details><summary>jsonコード</summary>

```json
{
    "type": "object",
    "properties": {
        "statusCode": {
            "type": "integer"
        },
        "headers": {
            "type": "object",
            "properties": {
                "Connection": {
                    "type": "string"
                },
                "OpenAI-Version": {
                    "type": "string"
                },
                "OpenAI-Organization": {
                    "type": "string"
                },
                "X-Request-ID": {
                    "type": "string"
                },
                "OpenAI-Processing-Ms": {
                    "type": "string"
                },
                "Access-Control-Allow-Origin": {
                    "type": "string"
                },
                "Strict-Transport-Security": {
                    "type": "string"
                },
                "Date": {
                    "type": "string"
                },
                "Content-Length": {
                    "type": "string"
                },
                "Content-Type": {
                    "type": "string"
                }
            }
        },
        "body": {
            "type": "object",
            "properties": {
                "created": {
                    "type": "integer"
                },
                "data": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "b64_json": {
                                "type": "string"
                            }
                        },
                        "required": [
                            "b64_json"
                        ]
                    }
                }
            }
        }
    }
}
```
</details>

![スクリーンショット 2022-12-06 12.20.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/529c1466-b0da-57c1-4655-add4f608b4b0.png)


「作成」と検索し、組み込みタブ、「作成」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/6b573004-f536-a65b-dd05-56068ce8902c.png)

下記のように設定し、アクションの追加をクリックします。

|  | 設定値 |
|:-----------|:------------|
| 入力       | @{base64ToBinary(body('JSON_の解析')?['data'][0]['b64_json'])}    |

![スクリーンショット 2022-12-06 12.28.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/39a1ec09-61d9-2aa0-d5c2-0f6489f7bc57.png)


:::note alert
ここから先の手順はMicrosoft Azureのアカウントが必要になります。
:::

Azureアカウントに接続し、ストレージアカウントを作成します。

https://portal.azure.com/#create/Microsoft.StorageAccount-ARM

![スクリーンショット 2022-12-06 12.38.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/d41dbb46-566e-5472-3b57-7adf55b11aeb.png)

![スクリーンショット 2022-12-06 12.39.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/4ec5ab0a-a40d-639f-9c78-b49099ff9cf0.png)


「images」でコンテナを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/76d88d19-496c-83a8-62ef-c64f09e7eff3.png)


送った画像を保存するために下記のロールを追加します。
・ストレージ BLOB データ共同作成者


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/d83cf9c8-7288-f58b-976f-749350eb021d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/1432f567-a3f0-d1be-1df1-c87a88f217a0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/09163ac2-34dc-c4b0-2fd1-fda4a6f515d2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/177ad010-4156-e266-da40-5898abcda6ba.png)

Power Automate画面に戻り、「作成」アクションの下に「BLOB を作成する(V2)」アクションを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/0bc7d19e-6f7c-a2c3-90dd-561122156681.png)

サインインをします。

![スクリーンショット 2022-12-06 12.41.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/a0d68f8a-5dcf-1f99-f30c-54bcd49b009f.png)


下記のように設定し、アクションの追加をクリックします。

|  | 設定値 |
|:-----------|:------------|
| ストレージアカウント名       | 「カスタム値の入力」を選択してから、Azureで作成したアカウント名を入力     |
| フォルダパス       | 右にあるフォルダマークを押して選択    |
| BLOB名       | @{items('Apply_to_each')?['message']?['id']}        |
| BLOBコンテンツ       | @{outputs('作成')}     |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/3ca84368-fa8a-cc86-cee5-89a0b68723d1.png)

変数の設定を追加し、下記のように設定し、新しいステップをクリックします。

|  | 設定値 |
|:-----------|:------------|
| 名前       | msg    |
| 値       | 下記のjSON    |

<details><summary>jsonコード</summary>

```json
{
  "replyToken": "@{items('Apply_to_each')?['replyToken']}",
  "messages": [
    {
      "type": "image",
      "originalContentUrl": "https://{Azureで作成したアカウント名}.blob.core.windows.net@{outputs('BLOB_を作成する_(V2)')?['body/Path']}",
      "previewImageUrl": "https://{Azureで作成したアカウント名}.blob.core.windows.net@{outputs('BLOB_を作成する_(V2)')?['body/Path']}"
    }
  ]
}
```
</details>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/e7fcf3e7-3a56-f4df-e067-bfa9f5df36c4.png)


「条件」と検索し、条件をクリックします。
![スクリーンショット 2022-12-06 12.58.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/1ba129b0-b982-a84c-e510-42d6f07f3b33.png)

以下を設定します。
|  | 設定値 |
|:-----------|:------------|
| 左側       | 動的コンテンツから「msg」     |
| 中央       | 次の値に等しくない    |
| 右側       | 空   |


「はい」の方にアクションの追加をクリックします。
![スクリーンショット 2022-12-06 12.58.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/2583e2c6-c4de-4dda-95e3-9d883c5c524f.png)

HTTPと検索し、「HTTP」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/f6d136a1-d282-828d-3762-46f895f96170.png)

下記のように設定し、保存をクリックします。

|  | 設定値 |
|:-----------|:------------|
| 方法       | POST        |
| URI     | https://api.line.me/v2/bot/message/reply      |
| ヘッダー       | {<br>&nbsp;&nbsp;"Content-Type": "application/json",<br>&nbsp;&nbsp;"Authorization": "Bearer @{variables('access token')}"<br>}|
| 本文       | @{variables('msg')}      |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/3cfcb979-5b5c-2d5c-d85a-45ef3cda24d6.png)


「HTTP要求の受信時」にあるURLをコピーします。
![スクリーンショット 2022-12-06 13.18.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/996f7b47-1c73-1c0e-d902-1e6c2b305469.png)

LINE側のMessaging APIのWebhook URLに保存し、Webhookの利用をオンにします。

![スクリーンショット 2022-12-06 13.18.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/e3a16a97-27de-3ebc-43da-f2989be7c285.png)

### GPT-3(text-davinci-003)とJapanese Stable Diffusionは下記を参考に行なってください。


<details><summary>GPT-3(text-davinci-003)のフローを作成</summary>

:::note warn
ChatGPTのAPIは現在のところありませんが、大規模言語モデルという共通点をもつGPT-3(text-davinci-003)のAPIを今回使用しております。
:::

:::note
GPT-3(text-davinci-003)のAPIは下記を参考
https://beta.openai.com/docs/api-reference/completions/create
:::

DALL-E2のフローで下記の赤枠三箇所を変更し、❌は削除します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/a72fb0e0-8c8e-094b-fd4b-e5df09eda8b2.png)

### HTTPの変更

|  | 設定値 |
|:-----------|:------------|
| 方法       | POST        |
| URI     | https://api.openai.com/v1/completions      |
| ヘッダー       | {<br>&nbsp;&nbsp;"Content-Type": "application/json",<br>&nbsp;&nbsp;"Authorization": "Bearer {メモしたOpenAIのAPI Key}"<br>}|
| 本文       | {<br>&nbsp;&nbsp;"model": "text-davinci-003",<br>&nbsp;&nbsp;"prompt": "@{items('Apply_to_each')?['message']?['text']}",<br>&nbsp;&nbsp;"max_tokens": 2048,<br>&nbsp;&nbsp;"temperature": 0<br>}        |


### JSONの解析の変更

下記のように設定し、アクションの追加をクリックします。

|  | 設定値 |
|:-----------|:------------|
| コンテンツ       | @{body('HTTP')}        |
| スキーマー       | 下記JSON       |

<details><summary>jsonコード</summary>

```json
{
    "type": "object",
    "properties": {
        "id": {
            "type": "string"
        },
        "object": {
            "type": "string"
        },
        "created": {
            "type": "integer"
        },
        "model": {
            "type": "string"
        },
        "choices": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "text": {
                        "type": "string"
                    },
                    "index": {
                        "type": "integer"
                    },
                    "logprobs": {},
                    "finish_reason": {
                        "type": "string"
                    }
                },
                "required": [
                    "text",
                    "index",
                    "logprobs",
                    "finish_reason"
                ]
            }
        },
        "usage": {
            "type": "object",
            "properties": {
                "prompt_tokens": {
                    "type": "integer"
                },
                "completion_tokens": {
                    "type": "integer"
                },
                "total_tokens": {
                    "type": "integer"
                }
            }
        }
    }
}
```
</details>


「コントロール」と検索し、組み込みタブ、「Apply to each」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/fb34e86f-5209-31a7-35e6-01ad57a20620.png)

以前の手順から出力を選択に「@{body('JSON_の解析')?['choices']}」を入力し、「変数の設定」アクションを追加し、下記のように設定しします。

|  | 設定値 |
|:-----------|:------------|
| 名前       | msg    |
| 値       | 下記のjSON    |

```json
{
  "replyToken": "@{items('Apply_to_each')?['replyToken']}",
  "messages": [
    {
      "type": "text",
      "text": "@{replace(replace(items('Apply_to_each_2')?['text'],decodeUriComponent('%0D'),'\n'),decodeUriComponent('%0A'),'\n')}"
    }
  ]
}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/32a18f43-2b94-ec2b-d157-26d15032ea7d.png)
</details>

<details><summary>Japanese Stable Diffusionのフローを作成</summary>

### Japanese Stable Diffusion のAPI Key取得

まずは下記からアカウントを登録します。
https://developers.rinna.co.jp/signin

使用する「Text to Image API」を含む「Free」を検索します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/f5a8b9e8-6c66-f77f-adf8-f5e8a23cbe47.png)

![スクリーンショット 2022-12-07 10.01.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/7dc931a7-6e15-708f-06bb-8bba5738df1f.png)

「Subscribe」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/594bd361-c91a-8c5d-1ce0-b9582c192d5e.png)

Profileに移動し、showをクリックし、Primary key をメモします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/8c9c2ad4-19d1-2441-2085-1cbde16a15ac.png)

:::note
Japanese Stable DiffusionのAPIは下記を参考
https://developers.rinna.co.jp/api-details#api=z05-text2image-jsd&operation=prediction
:::

### DALL-E2のフローで下記の三箇所を変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/a2549d47-f3dc-8b6d-aad2-87fbb89fbb2c.png)

下記のように設定し、アクションの追加をクリックします。

|  | 設定値 |
|:-----------|:------------|
| 方法       | POST        |
| URI     | https://api.rinna.co.jp/models/tti/v2      |
| ヘッダー       | {<br>&nbsp;&nbsp;"Content-Type": "application/json",<br>&nbsp;&nbsp;"Cache-Control": "no-cache",<br>&nbsp;&nbsp;"Ocp-Apim-Subscription-Key": "{メモしたPrimary Key}"<br>}|
| 本文       | {<br>&nbsp;&nbsp;"prompts": "@{items('Apply_to_each')?['message']?['text']}",<br>&nbsp;&nbsp;"scale": 7.5<br>}        |

:::note warn
ヘッダーは赤枠をクリックしてテキストモードに切り替えます。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/952338c3-f716-2832-6938-390211f94082.png)

### JSONの解析の変更

下記のように設定し、アクションの追加をクリックします。

|  | 設定値 |
|:-----------|:------------|
| コンテンツ       | @{body('HTTP')}        |
| スキーマー       | 下記JSON       |

<details><summary>jsonコード</summary>

```json
{
    "type": "object",
    "properties": {
        "image": {
            "type": "string"
        },
        "nsfwContentDetected": {
            "type": "boolean"
        },
        "type": {
            "type": "string"
        },
        "requestMetadata": {
            "type": "object",
            "properties": {
                "engine": {
                    "type": "object",
                    "properties": {
                        "module": {
                            "type": "object",
                            "properties": {
                                "id": {
                                    "type": "string"
                                },
                                "version": {
                                    "type": "string"
                                }
                            }
                        },
                        "model": {
                            "type": "object",
                            "properties": {
                                "id": {
                                    "type": "string"
                                }
                            }
                        },
                        "instance": {
                            "type": "object",
                            "properties": {
                                "id": {
                                    "type": "string"
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
</details>

### 作成の変更

下記のように設定します。

|  | 設定値 |
|:-----------|:------------|
| 入力       | @{base64ToBinary(replace(body('JSON_の解析')?['image'], 'data:image/png;base64,', ''))}        |

</details>

### 【3月2日追記】 ChatGPT APIを組み込み

<details><summary>ChatGPTのフローを作成</summary>

:::note
GPT-3(text-davinci-003)のAPIは下記を参考
https://platform.openai.com/docs/api-reference/chat
https://platform.openai.com/docs/guides/chat/introduction
:::

DALL-E2のフローで下記の赤枠三箇所を変更し、❌は削除します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/a72fb0e0-8c8e-094b-fd4b-e5df09eda8b2.png)

### HTTPの変更

|  | 設定値 |
|:-----------|:------------|
| 方法       | POST        |
| URI     | https://api.openai.com/v1/chat/completions      |
| ヘッダー       | {<br>&nbsp;&nbsp;"Content-Type": "application/json",<br>&nbsp;&nbsp;"Authorization": "Bearer {メモしたOpenAIのAPI Key}"<br>}|
| 本文       | {<br>&nbsp;&nbsp;"model": "gpt-3.5-turbo",<br>&nbsp;&nbsp;"messages": [{<br> &nbsp;&nbsp;&nbsp;&nbsp;"role": "user", <br> &nbsp;&nbsp;&nbsp;&nbsp;"content": "@{items('Apply_to_each')?['message']?['text']}"<br> &nbsp;&nbsp;}]<br>}        |



### JSONの解析の変更

下記のように設定し、アクションの追加をクリックします。

|  | 設定値 |
|:-----------|:------------|
| コンテンツ       | @{body('HTTP')}        |
| スキーマー       | 下記JSON       |

<details><summary>jsonコード</summary>

```json
{
    "type": "object",
    "properties": {
        "statusCode": {
            "type": "integer"
        },
        "headers": {
            "type": "object",
            "properties": {
                "Transfer-Encoding": {
                    "type": "string"
                },
                "Connection": {
                    "type": "string"
                },
                "Access-Control-Allow-Origin": {
                    "type": "string"
                },
                "Openai-Model": {
                    "type": "string"
                },
                "Openai-Organization": {
                    "type": "string"
                },
                "Openai-Processing-Ms": {
                    "type": "string"
                },
                "Openai-Version": {
                    "type": "string"
                },
                "Strict-Transport-Security": {
                    "type": "string"
                },
                "X-Request-Id": {
                    "type": "string"
                },
                "Cache-Control": {
                    "type": "string"
                },
                "Date": {
                    "type": "string"
                },
                "Content-Type": {
                    "type": "string"
                },
                "Content-Length": {
                    "type": "string"
                }
            }
        },
        "body": {
            "type": "object",
            "properties": {
                "id": {
                    "type": "string"
                },
                "object": {
                    "type": "string"
                },
                "created": {
                    "type": "integer"
                },
                "model": {
                    "type": "string"
                },
                "usage": {
                    "type": "object",
                    "properties": {
                        "prompt_tokens": {
                            "type": "integer"
                        },
                        "completion_tokens": {
                            "type": "integer"
                        },
                        "total_tokens": {
                            "type": "integer"
                        }
                    }
                },
                "choices": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "message": {
                                "type": "object",
                                "properties": {
                                    "role": {
                                        "type": "string"
                                    },
                                    "content": {
                                        "type": "string"
                                    }
                                }
                            },
                            "finish_reason": {
                                "type": "string"
                            },
                            "index": {
                                "type": "integer"
                            }
                        },
                        "required": [
                            "message",
                            "finish_reason",
                            "index"
                        ]
                    }
                }
            }
        }
    }
}
```
</details>


「コントロール」と検索し、組み込みタブ、「Apply to each」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/fb34e86f-5209-31a7-35e6-01ad57a20620.png)

以前の手順から出力を選択に「@{body('JSON_の解析')?['choices']}」を入力し、「変数の設定」アクションを追加し、下記のように設定しします。

|  | 設定値 |
|:-----------|:------------|
| 名前       | msg    |
| 値       | 下記のjSON    |

```json
{
  "replyToken": "@{items('Apply_to_each')?['replyToken']}",
  "messages": [
    {
      "type": "text",
      "text": "@{replace(replace(items('Apply_to_each_2')?['message']['content'],decodeUriComponent('%0D'),'\n'),decodeUriComponent('%0A'),'\n')}"
    }
  ]
}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364213/32a18f43-2b94-ec2b-d157-26d15032ea7d.png)



</details>

## 動作確認

* 【3月2日追記】 ChatGPT

![chatgpt.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121860/38534622-df2f-b0bd-e054-ab4cc7a63a62.gif)

<details><summary>DALL-E2</summary>

![DALL_.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121860/3cf0cf65-2af2-2954-5475-b58535c89607.gif)

</details>

<details><summary>GPT-3(text-davinci-003)</summary>

![ChatGPT (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121860/04521ac5-2b70-5248-8c86-d7da43b18239.gif)

</details>

<details><summary>Japanese Stable Diffusion</summary>

![Japanese-Stable-Diffusion.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121860/04856ba9-573d-1b57-6ec6-3f05fa64834f.gif)

</details>


## まとめ

Microsoftのテクノロジーを使うと、最先端技術の恩恵にあずかることができますね。
さらにそれが、限られた専門家だけでなく多くの方が活用できる環境を提供しているのが良いですね！色々な分野の民主化が進んでいきそうな気配も感じます！
新しい展開、イノベーションが巻き起こる日も近そうですね。

## 参考

https://make.powerautomate.com/
https://openai.com/about/
https://developers.rinna.co.jp/
https://qiita.com/joohounsong/items/fdbb783a9467478c6479
https://developers.line.biz/ja/docs/messaging-api/getting-started/#using-console
https://developers.line.biz/ja/docs/messaging-api/building-bot/#page-title
https://openai.com/blog/dall-e-api-now-available-in-public-beta/
https://beta.openai.com/docs/api-reference/images/create#images/create-response_format
https://beta.openai.com/docs/api-reference/completions/create
https://developers.rinna.co.jp/api-details#api=z05-text2image-jsd&operation=prediction
https://platform.openai.com/docs/guides/chat
https://platform.openai.com/docs/api-reference/chat