CodeAGI、テキトーExcel設計書でも動くのか？


結論：動く。えらい。

# 人類の夢、AGI

CodeAGIについて話す前にまずAGIについて語ります。
AGIとはもちろん素早さ、敏捷性（agility）……ではなく汎用人工知能のことです。

https://aws.amazon.com/jp/what-is/artificial-general-intelligence/

例えば、今だと「ChatGPT、Excelのデータをこれこれこういう順番からこれこれこういう順番に並び替えるためにPythonコードを書いてほしいの」とお願いすると、ChatGPT様は「こちら、コードになります」と書いてくださるわけですよ。

これだけでも仕事は効率化され、「お疲れさまでした！」と晴れやかな顔で帰ることができるはずなのですが、AGIはもう一歩賢い。

AGIだと、自分で思考してくれる、つまり「Excelのデータをこれこれこういう順番からこれこれこういう順番に並び替えて」「はい！（ええっと、つまり、Pythonがいいかな？Pythonでコードを作成して、このファイルとこのファイルを……こう処理してっと……）できました」と、全部やってくれるんだと思います。
まるで、人間の秘書のようですね。

Auto-GPTやAgentGPTなんかは、GPTでどうするかを問い続け、うまいこと関数を使ったりして、（ある程度の単純作業を複数組み合わせて、）勝手にタスクをこなしてくれる域くらいにはいっているようです。例えば論文を取得して、翻訳にかけて……要約して……などなどです。

AGIがあったら何がうれしいか、それは「私はが寝てるからお前が仕事に行ってきて」と言ってAIが勝手に働いてくれる夢の未来が近いんじゃないかということです。

# CodeAGI


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/b7154316-021c-ae11-1dcb-61acf1bf3d31.png)

CodeAGIは、コードの作成において自律的に考えて自律的にふるまうため、そこがAGIというわけですね。

CodeAGIでできることは、「ドキュメントをしっかり書いて渡したら、後は勝手に生成AIがプログラムを作ってくれる」というものですね。

# CodeAGIを使ってみよう（前準備）


CodeAGIをインストールしてみます。
インストーラー式です。
インストーラーをダウンロードして、インストールしてみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/09c30bfc-6227-6e70-2acf-95a885d8935e.png)

利用規約を読んで、OKして……。

おっと、アカウント登録が必要なのか。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/5eb163ff-b3c0-d144-b721-134715a01551.png)

メールアドレスとパスワードのほか、会社名、部署名、名前などが必須です。
個人というよりも企業向けのサービスなんですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/d29c1aac-4e26-3cba-cb5f-d4c540d8a2ce.png)

認証キーが送られてくるので、認証。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/51779d5b-1c24-ec56-9c82-75bef1a81382.png)

生成AIを選択しましょうか。
なじみのあるOpenAIを使用することにするか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/b5712f6c-b7da-9a1e-b77e-234cd48c5302.png)

すると、OpenAIのキーを求められる。βのCodeAGI、このCodeAGI自体は無料ですが、外部APIの分はこっちで負担しないとならないわけです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/31e2efa4-de51-660c-3ea1-f5b7dea19839.png)

無料キャンペーンなんかもやっているようだが、応募者抽選キャンペーンのようだし、これは自分で用意しておくことにしましょうか。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/05b22311-3886-2cd9-1c54-0367c9f0b423.png)

つまるところ、**OpenAIのAPIキー**が必要になります。

（ChatGPTのアカウントとは別で、クレジットカードの登録が必要になります。
とはいえ、最初はおためしでいくらかもらえたと思います。）

### （余談）
ローカルのLLMでGPUなんかの力を借りて、自分で計算して、出力を得るタイプのソフトではない場合（つまり、OpenAIなり、Azureなりに頼る場合）、使うたびに、APIの料金というものが発生します。

（月額で固定料金の、Webの、ChatGPTとは異なる）

GPTを使ったサービスの、「生成は何回まで無料」「月額サブスクリプション」という料金形態は、こういうところからきている。定額の場合、あまり使われすぎると赤字になるので（しかも、GPT-4oとか、いいやつだと結構高いので）こちらが、結構たいへんなのです。

そうなってくると、こうやってキーを自前で用意してもらうか、月額サブスクリプションかってことが多いようです。

タダでGPT-4o試させてくれるのは破格です。

自分のキーだから、GPT-4は高いからGPT3.5で試してみましょうかっと。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/23eb2ec7-4dd1-7cdf-ceb8-c4afcda079c1.png)

ちなみにコストは、OpenAIが決めていて、ちょいちょい変わるんですけれども（今のところ、古いのが安くなったり、逆に最新のやつのほうが安くなったりで、高くなるってことはないんだけど）、どれが安いのかはチェックしておくとよさそうですね。

https://openai.com/api/pricing/

ふむふむ、gpt-3.5-turbo-0125が安いかな～っ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/21bc3dac-98aa-7b22-66d8-7dbd34caa05f.png)

# サンプルを動かしてみる

とはいえどういう風に書いたらいいんだろう、ということでサンプル設計書を見てみよう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/e3b900fb-42ff-42ed-6b05-63af7401b719.png)

あっ、すごい、かなり、かなり詳細が決まってるタイプな！？
（油断していた……）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/ba16737e-a474-0455-382c-707d0243fe8f.png)

１からだとしんどそうなので、「会議室予約システム」をベースにいじってみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/9cdecc31-52b6-ce4b-89bb-58b09b802f48.png)

Excel形式のファイルが二つあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/fd3f95a8-da9a-c70a-a8b8-0f60a7e4f9b3.png)

### テーブル定義書

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/ee8b4966-aabd-829f-6cb1-4b4ea4f9cb3e.png)

テーブルは、かなりしっかり詳細に記されています。

### 画面設計書

画面レイアウトシート……とはいっても、GPT-3.5には、画像を読み込む機能はないのでGPT-4oか人間用ですね。
CodeAGIの説明には、

>画像データを解析することで、画面プログラムのコード生成を実現

とあるので、GPT-4oなんかだったら解釈してくれるのでしょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/57950049-a1c1-929f-34a8-a79edbbc2755.png)

こちらは、画面項目一覧（会議室予約登録画面）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/fde4faf1-a2c9-0514-18dd-6add5390c8d2.png)

アクション定義書（会議室予約登録画面）シートには、手順がきちんとインデントをつけて定義されていますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/cc824900-1c36-552b-0d7d-d971ff022997.png)

# とりあえずやってみる

GPTというか、LLMの良いところはデータをポンポン放り込んでも「あれがない、これがない、エラー」とならない点です。ファイル名こそ指定があるようですが、結構、想定された形ではないものも読み込んでくれるはずです。

クイックリファレンスを眺めつつ、とりあえず動かしてみましょう。

プロジェクトの設定で、「新規作成」。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/583c5b0d-107f-774d-bcbd-9f4c9e26da75.png)

プロジェクト名、プロジェクト説明。コード出力先フォルダ、OS、DB……。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/971ffc7c-1bf3-b71b-3ccb-5664d84c76ef.png)

ブラウザや、言語を設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/41f931d4-42ac-c6f0-c3ab-92c46a6b00d1.png)

フレームワークを選ぶと、勝手にフォルダ構成を指定してくれました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/fdf90b23-0773-b5ff-5a22-4661002d7454.png)

とりあえず、サンプルのテーブル定義書と画面設計書を設定し、生成を試みてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/abb45baf-7595-2efd-e18f-49844918ec2a.png)

おお……。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/48713c06-9790-ef45-ec42-d490bf178d88.png)

おお……！？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/84b16b4c-1238-767a-b3f3-2a483d154a8c.png)


GPT3.5だぞ～！？よくできるなあ？！

吐き出されたコードを眺めてみます。
テーブル定義など、コンポーネントが用意されていますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/cc3f5455-90e9-b3ea-bd67-1b8ac179e168.png)

気になるお値段は、0.15ドル＝22円くらいでした。

# そうはいっても、ほんとに好きなExcel突っ込んでもいいのか？

サンプルのExcelがかなりしっかりとした記述をもったExcelで不安になってきました。
ほんとにこれって好きなシステムを作れるやつなんでしょうか？
項が1個ずれたり、なくなってたらエラーをはいて落ちてしまったりしないのか？

厳格なExcelのフォーマットに従わなくても大丈夫なんでしょうか。
弊社のごちゃごちゃしたあんな設計書やこんな設計書、突っ込んでも大丈夫なんでしょうか。
ダイジョブであってほしい。

というわけで、ちょっと気になったので、雑なExcelを用意してみました。

とりあえず、ラーメンタイマーの仕様書です（このシート1枚だけです。アクション定義書を上書きしました）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/50a07af3-c6d1-934b-1105-2d10fe7bef13.png)

>ラーメンタイマー定義書
プロジェクト概要
ラーメンタイマーは、ユーザーがラーメンを作る際に使用する簡単なタイマーアプリケーションです。このアプリケーションは、特定の時間が経過した際にアラームを鳴らし、ユーザーに通知します。

>目的
ユーザーが設定した時間（例：3分、4分、5分）に基づいて、正確にタイマーをカウントダウンする。
タイマー終了時にアラームを鳴らし、視覚的に通知する。
シンプルで直感的なユーザーインターフェースを提供する。

略……。

これで出してみると……。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/de6454b1-8da0-da48-9b60-8d892ca0610a.png)

おお、ちゃんとなんか、パーツがタイマーっぽいぞ。

中も、ラーメンタイマーっぽい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/788b4561-41d2-ee19-f975-9321c9bd6639.png)

というわけで、結構ざっくりしたExcelをポイしても動いてくれそうです。
これは大変にありがたい点ですね。

## 所感

まあ中でAPIを複数回たたいてやってもらってるだけだろうしな～と思ったら思った以上にしっかりとした構成の、しっかりしたパーツが生成されて驚きました。

### 割とどんなExcelでもよさそう

テキトーなExcelファイルを入れてみたわけですが、それでもきちんと動いてくれました。
設定が必須なところはそう多くはなく、あっても選ぶだけなので、ぱちぱちやってGOと生成すると、ほんとにすぐに動きます。

エラーを吐いて落ちたり、あれがないとだめとかこれがないとだめとか言いません。かなり柔軟性があると思いました。

LLMの良いところ、きちんとした形式のファイルに変換して渡さなくったってぐいぐい動く。その良さを全く殺してなくていいですね。

なんか動く。すぐ動く。えらい。

### APIの選択肢が広い

ほか、うれしいのはOpenAIのAPIのみならずAzureなどにも対応してくれているところです。これはすごい。
OpenAIのAPIで組んでいたシステムを「やっぱりAzureにして」って言われて移植したことがありました。その作業自体は重くはなかったんですが、いろいろ変えなくちゃいけないうえに最新のAPIリファレンスはどれだという作業がめんどくさくはあったので、ぱっぱと使うAPIを切り替えられるのはかなりうれしいです。

### 使用言語やDBのカバー範囲が（異様に）広い

生成AIの部分のみならずDBの選択肢が、知ってるやつは（まだ未対応なのか、グレーアウトされたものを含めて）全部あって「網羅してやる」という意気込みがすごかったです。これもLLMの強みかもしれません（中で、DB名はこれと指定しているのでしょうから……）。
とはいえ、DBごとに癖があって気を付けないとならないこともあるはずで、長い出力を得るなら一貫した命令を出さないといけないわけですが、それにも対応していくぞ、という意気込みを感じます。ありがたいですね。

### すぐ動く成果物が得られるわけではなさそう（現状）
実行環境とセットではないので（たとえばC#のexeがあって、クリックしたら起動するような成果物ができるものではない）知識がない人が０から書類だけきっちり書ききって、あとは手放しでコーディングというのはまだですね。ちょっと難しいかなあ。

ただ、どういうパーツが必要でどう組んでいけばいいかみたいなところのガイドラインとしてあったらうれしくはあるかと思います。
DBの定義なんかは書類がしっかりしてる分、出てくるモデルもしっかりしてて、かなり流用できそうです。
初心者くらいの知識でこれを利用して骨組みとして、楽に、きれいに、美しいコードが書けるかもしれない。

### DBがあるWebシステム前提かもしれない（現状）
DBが前提のシステムを想定しているような気がします。Web系の、SpringBootとかの、あのへんの分割なんだろうか。かなり、Webシステムの開発を意識しているやつのようですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439672/56f081c7-588c-a495-9e23-002471542d26.png)

わりと、DBや、Web操作の部分はいらなくて、手元のCSVに読み書き～みたいなソフトも作ったりするんですが、それはまだ対応してないんじゃないかな。DBが欲しいときは強そうである。