(ALL FREE)ノーコードツールで作るAI画像生成アプリケーション



# はじめに
生成したい画像を伝えることで、AIが画像を生成してくれる以下のようなアプリケーションを作成してみました。ものの30分程度で出来る簡単なものなので興味が出た方は、ぜひ試してみてください。
![demo-gif-_online-video-cutter.com_.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133151/ff3c3f28-dcdf-9d27-fee1-0a69535b3aa2.gif)


# 今回使うもの
今回は、Open AIの画像生成モデルのAPIと、それを叩くための、UiPath Studio、これらのロジックをラップするインターフェースとしてUiPath Appsを利用しています。

## Open AI
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133151/999e5751-b425-ff63-5841-c041f1286136.png)

Open AIのImage generation model(beta)を今回は利用しました。promptとして、生成したい画像の特徴を描写するだけでAIが自動で画像を生成してくれます。以下にDocsから取ったサンプルをつけています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133151/71def032-0545-3246-12a9-8d374a96585c.png)

ちなみに精度はアレでしたが、**日本語でもイケます。**（すごい）でも個人的には英語で試した方がいいです。必要に応じて、翻訳ツールを通して日本語を英語に変換してAPIを叩いた方が望むものがでてくるかもです。

こちらがcurlのサンプルです。bodyに記載するパラメーターはシンプルで、`n`が作成したい画像の枚数で、`size`は画像のサイズです。（3種類くらいしか選択できないのでご注意を。）
```
curl https://api.openai.com/v1/images/generations \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -d '{
  "prompt": "A cute baby sea otter",
  "n": 2,
  "size": "1024x1024"
}'
```

## UiPath Apps
UiPath Appsは、俗に言う**ノーコード開発ツール**です。こんな感じで直感的にインターフェースとバックエンドのロジックを作ることができちゃう優れものです。
![Go_live_faster_with_app_templates.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133151/f2c05f81-a811-10e6-b823-0de5698b6057.gif)

#### レスポンシブデザイン
Appsはレスポンシブデザインに対応しています。コンテナの概念で階層的にコンポーネント単位で管理することができるので、一般的なノーコード開発ツールのように使いやすい設計になっています。

#### インターネット公開、プライベート公開も対応
つい先日public facing appというインターネット公開可能な機能を発表し、誰でもAppsで作成したアプリケーションにアクセスできるようになりました。また社内だけで使いたい場合も、UiPath Automation Cloudの組織内に閉じて管理する事ができるため、多様な使い方をすることができます。

#### AppsからAPIやワークフローを叩ける
APIを叩けるサービスは他にありますが、UiPathのワークフローを直接的に叩けるのは、UiPath Appsだけです（当たり前ですが。）もしUiPathを使っているユーザーには特に親和性があるノーコード開発ツールになるのかなと思っています。


# 実装方法
それではここから実装方法です。

### Open AIからAPI Keyを取得する
取得方法は以下を参照してください。

https://qiita.com/MUCHIUCHI_OJISAN/items/815e7d5375da4962381c#open-ai%E3%81%ABsign-up%E3%81%97%E3%81%A6api%E3%82%92%E5%8F%96%E5%BE%97

### Studioのワークフローを作成する
StudioではAppsから入力データを受け取り、それを元にAPIを叩き、帰ってきた結果をAppsに渡す処理を書いていきます。
まず始めにAppsとのデータを受け渡しをするため、引数を以下のように定義します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133151/1afc0bc5-6bf5-b43a-5a7b-d8eb832c41f1.png)

次に引数を渡し、Open AIのAPIを叩くアクティビティを設定します。`HTTP Request`アクティビティを今回は利用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133151/2edad32a-cb9c-a99a-9d85-d8fff11d8cd7.png)
`JsonInputData`として格納したBodyのパラメータは以下の通り。
```
@"{
" + "\n" +
      @"""prompt"": ""Q: "  + Question + @"?\nA:"",
" + "\n" +
      @"""n"": 1
" + "\n" +
      @"}"
```

HTTP Requestアクティビティの設定はこのようにしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133151/40a92ddb-d944-d3c4-ae1d-71efea205dfe.png)

最後に、APIのレスポンスをoutputとして出力するアクティビティを設定します。デシリアライズ後、`JsonObjectOutput.SelectToken("$.data.[0].url").ToString()`のように書き、生成した画像のurlを取得しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133151/031a1321-8f4c-873c-0e2a-f8de420adabe.png)

### 実行用のロボットを用意する
上記で作成したワークフローを実行する用のロボットとして、今回は UiPath Automation Cloud Robot -VM を利用することにしました。特にPublic Facing Appとして外部公開する場合は、UR実行として、そしてCloud Robotが相性がいいと思っています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133151/259b050a-de07-ffb5-1ed6-18fdcf1047d5.png)

構築手順は以下をご参照ください。

https://qiita.com/MUCHIUCHI_OJISAN/items/cc2b89711c00e774ddd2

現時点では、Apps経由でトリガーとして実行するロボットを指定できないため、Apps用の専用フォルダーにて、ワークフローや特定のマシンをアサインして使う事をお勧めします。

### Appsでインターフェースと接続する

Appsのプロジェクトを新規で作成する際に`public app`?? と聞かれます。これにチェックをつけると誰でもアクセスできるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133151/b9d50c8b-f034-5094-3167-443a33c5a202.png)

アプリケーションの階層構造はこのようにしています。画像上にある`Add control`を押すことでこのようなコンポーネントをドラッグアンドドロップで配置する事ができるようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133151/a86c72a0-10c7-728a-5f7f-221daeae2c6c.png)

生成したい画像を入力するフォームには、`input`という引数（Studioへ受け渡す用）を設定しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133151/d73b23a0-f8e7-d152-8a1a-191a972b8012.png)

またボタンを押した際にStudioで作成したワークフローを叩くための`イベント`を設定します。連続的にリクエストを送れないようにstatusで管理するように今回はロジックを組んでいます。（ここの改善点は次のブログで書きます。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133151/f62ffe0d-fe19-0826-5198-57a9f165bd11.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133151/be6201f1-270b-15d0-2c3e-644c867bc13f.png)

ここでは実行するプロセスを選択し、URを実行します。前述しましたがUR実行の際のロボットを明示的にしていすることはできません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133151/81257236-ced9-3d80-ccc3-09dca2056294.png)

以上が、構築手順になります。最後にApps画面のPublishを押下すれば、完成です。


# さいごに
今回は、UiPath AppsとOpen AIを組み合わせたアプリケーションを作った手順を説明しました。APIをラップするインターフェースを組み合わせることで、視覚的、体験的にも面白いものになったと思います。このようにAppsは簡単にインターフェースと簡単なロジックを画面上でノーコードでくみ上げる事ができる優れものです。UiPathのトライアルからも無料で使う事ができるので興味がある方はぜひお試しください。

https://qiita.com/MUCHIUCHI_OJISAN/items/c37f16eaeb08dfbc7a7d