【成功】GPT-3.5、4にReactでページを作成してもらう

GPTが作成し保存したページ
![DD0DBDD2-B5C6-4DBA-87D1-1271AA9F738C.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167934/bceef20c-a1cb-0b58-9594-8c34bbf034bc.jpeg)

# 概要
OpenAI API createCompletionを管理するMacアプリを作成し、それを使ってReactでページの生成が成功したので共有させて頂きます。
説明は稀にChatGPT中毒者しかわからない話も出てきますが、全体的には簡単な話になっていると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167934/b1dd9ec5-4cd3-d4d7-bc16-2e4f413721fd.png)
（図が偉そうでごめんなさい）

# 動画デモ
GPTモデルを使ってReactでページフィットネスジムの登録ページが作成される一通りの流れのデモ動画です
※動画は退屈なのでかるーく流してもらえれば
<iframe width="560" height="315" src="https://www.youtube.com/embed/Bgsk2zdh518" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

# 流れ
動画の内容に沿ってReactでページが作成されるまでを時系列に解説していきます

## 1. 要件のヒアリング
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167934/c925c932-6929-07f7-91eb-04f5ea3756e6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167934/a7ce2d94-8a7b-92f5-ba93-3187eeea5937.png)

以下の設定されたAIアシスタントを起動します

| 分類    | 説明                                | レベル |
| ------- | ----------------------------------- | ------ |
| モデル    | gpt-3.5-turbo-0613                 | LV5   |
| 名前    | システム会社営業マン                 | LV80   |
| 役割    | お客様からどのようなプログラムを作成したいかヒアリングする | LV3    |
| 装備    | AIインスタンスを起動する能力(functions)          | LV5    |

※LVはただの雰囲気です

ページの仕様、プログラム要件を入力します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167934/5e6e7dc4-188d-4ec4-2dd5-725ffc64d0cf.png)

要件をまとめてくれました。更に保存先を聞いてくれました。（さすが営業マン）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167934/87525946-440c-acb4-f2bb-581d7240ad44.png)

保存先とテンプレートページのファイルパスを伝えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167934/31dad754-7458-56fd-5e93-850169c64fa5.png)

### コツ （プロンプトエンジニアリング）
ここがかなり**重要**でChatGPTは**ゼロイチ**が苦手です。苦手というよりもゼロからイチを説明する人間のコストが膨大なのでテンプレートを渡す方が早いのです。**テンプレート** はこちらの意図やページの基本の仕様が組み込まれているものになります。
例えばDBの仕様、mysql？ firebase? を日本語の仕様で書くよりもテンプレートに保存のサンプルを記述してあるだけで伝わります。

## 2. AIからAIを生成
要件を聞き終えた営業マンはプログラマーに仕様を伝え、保存先パスと参考ファイルの内容をテキストで渡します。
（動画だとわかりにくいですが）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167934/072cc423-72fb-3059-71c9-08a0a7808804.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167934/36fcd3ce-3b1e-dc76-8d30-33ab18146e29.png)
↑AIインスタンスの関連性をノード表示で視覚化してあります
program_listner（営業）→ programer

↓営業マンとプログラマーのチャット画面が２つ並んでいます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167934/fbf3a655-f145-5062-e544-36a93dfbb065.png)

### プログラマーAI
以下の設定されたAIアシスタントを起動します

| 分類    | 説明                                | レベル |
| ------- | ----------------------------------- | ------ |
| モデル    | gpt-3.5-turbo-16k-0613                 | LV10   |
| 名前    | プログラマー                 | LV20   |
| 役割    | 仕様、参考ファイルに基づいてコーディングのみします。無駄な発言は許可されていません | LV4    |
| 装備    | ファイルを読み込む、保存(拡張（独自）)          | LV10    |

コーディングを終えたプログラマーはファイルに保存しました。厳密にはsystemが保存する能力を持っています。

ファイルの読み書きに functionsではなく拡張を利用した理由はfunctionsを通してプログラムコードをapiで渡す際にgpt-3.5-turboがjsonのエスケープを頻繁にミスるからです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167934/893a1bc6-286b-ffcc-3e27-230a5d07c3f8.png)

### コーディング完成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167934/dc3e502c-b5ca-14cf-5834-8d9e3f10fa4a.png)

「俺」がscssのファイルパスを修正します。少し人間の手を借りましたがコーディングは完了しました
```js
- import classes from './Template.module.scss'
+ import classes from './PageTemplate.module.scss'
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167934/573ff345-05bd-e99e-e798-5dce7e847c9c.png)
レイアウトが崩れている？　プログラマーは見た目を気にしません。「要件通り動くからそれでいいじゃないですか」と言っているかもしれません。

## 3. スタイルを作成して頂きます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167934/acd83e45-3dd0-1d5a-0fcb-2e768a29c0e4.png)

次は営業マンを通さずにプログラマーに直接依頼をします。
(現実にもよくあって揉めますよね笑)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167934/f39ecfde-a4b5-70fa-47cd-44d7c755d201.png)

以下の設定されたAIアシスタントを起動します

| 分類    | 説明                                | レベル |
| ------- | ----------------------------------- | ------ |
| モデル    | gpt-3.5-turbo-0613                 | LV5   |
| 名前    | functions                 | LV28   |
| 役割    | ユーザーのfunctionsをそのままapi functionsに渡します | LV1    |
| 装備    | AIインスタンスを起動する能力(functions)          | LV5    |

openai api chat/completions functions の形式に対応してくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167934/b5fb732c-ee08-2aca-b617-de412cd09033.png)


先程と同じプログラマーAIが生成されました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167934/3e67a30e-644e-24b6-2c21-a7e53a6ff257.png)

スタイルシートのコードディングが完了しました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167934/0bc6acd2-7638-1271-9d9d-7868fc52d6db.png)
何も変わっていない。。。

### 当初の目標
安くて早いgpt-3.5で私の業務（システムアプリ開発）を行えるこのアプリを開発していました。しかし
gpt-3.5モデルを使う中で記憶力の悪さに気がつきました。そでタスクを細かく分散（１回１回のゴールを小さく）すると、仕事がこなせる事がわかったので営業マンとプログラマーに分けました。

### 目標の方向転換
ですが cssの作成はTemplate.scssとページRegister2.jsの２つのファイルを見合わせながら新たにRegister2.scssの作成が必要です。

### といわけで
お待たせいたしました**みんな大好き GPT-4**を召喚します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167934/eb11b2d9-f256-3596-f3f3-74c44b25e641.png)

GPT-4はjsのスタイルとHTMLの構造理解し、Template.scssからどのようなデザインを望んでいるかいるか理解してscssファイルを生成してくれます。

「俺」が保存されたcssの参照するファイルパスを修正します
```js
- import classes from './PageTemplate.module.scss'
+ import classes from './Register2.module.scss'
```

スタイルが適応されました😊
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167934/c91ff627-b92c-8b75-abba-ed48334aeaab.png)
いい感じです！


# 今後の目標
今はシステム会社営業マンとプログラマーだけの組織ですが、プロデューサー、ディレクター、デザイナーを生成してIT会社を構築していきます。インスタンス制御できるので小規模から大規模な組織づくりができます。また現段階ではMac内で動作していますがクラウド実装に移植してスマフォだけで仕事をできるようにする構想があります。Reactのコーディングは割りと簡単な方だと思うのでUnityやFlutterの仕事をふっていこうと思います。
システムやITだけでは無く他の業種でも使えるものになると思いますが、その頃にはWindowsですべて実装されているのではないかな？笑

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167934/3b88e867-8b66-d43d-7e79-6dc278ed6bd5.png)
↓タコみたいになりました笑
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167934/a81003b6-1262-1af8-7fa1-a85f727963c1.png)

ここまでくれば
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1167934/5156507e-2f0d-f421-6cec-c969bf3df67e.png)
ですね！


## 目標の進捗
達成率 : 20%
現在 ■■□□□□□□□□ 目標



# 利用したAPI仕様
| API                            |
| ------------------------------ |
| api.openai.com/v1/chat/completions |

| 利用モデル             | 役割                | 説明
| ---------------------- | ------------------ | ------------------ |
| gpt-3.5-turbo-0613    | システム会社営業マン | 0613でfunctionsを利用
| gpt-3.5-turbo-16k-0613| Reactプログラムコーディング | コーディングするために16kでtoken量を増やしている(functionsは利用していない)
| gpt-4                 | scssコーディング    | ２つのファイルを認識するために4の頭脳が必要（でした）

# 最後に
ここまでお読み頂きまして、ありがとうございます。GPTやAIを利用した技術の進歩が早すぎて今私のやっている事が良いものなのか悪いのかわからず、みなさんのご意見をお聞きしたいと思い投稿してみました。「いいね」や「もっとこの方が良いのあるよ」とかなんでも良いので反応が頂けると幸いかと思います。よろしくお願いいたします。
（荒木先生ごめんなさい尊敬しています）