見出し画像

GPT Pilot - 人間がAIに質問攻めをされながらアプリを開発: これぞ未来のアプリ開発!

GPT Pilotは、AI(特にGPT-4)と開発者が協力してアプリケーションを開発するための新しいプラットフォームです。


この記事では、GPT Pilotの主要な特徴、使用方法、開発者との連携の仕方などを詳しく解説します。


GPT Pilotの概要

GPT Pilotは、AI(特にGPT-4)を用いてアプリケーションを開発するためのプロジェクトです。このプロジェクトの目的は、AIが大部分(約95%)のコードを書き、残りの5%は開発者が補完するという形で、効率的なアプリ開発を実現することです。

GPT Pilot ワークフロー

主要な特徴

1. 開発者の参加が必要

GPT PilotはAIを活用していますが、その能力には限界があります。例えば、AIはビジネスロジックやユーザーインターフェースの設計にはまだ不慣れです。そのため、開発者が具体的な要件や設計方針を決定し、AIが生成したコードをレビューする役割が必要です。

2. ステップバイステップの開発

このプラットフォームでは、アプリケーションは段階的に開発されます。最初に基本的なフレームワークが生成され、その後で各機能が追加されていきます。この進行形式は、開発者が各ステップでAIの出力を確認し、必要な調整を行いやすくしています。

3. スケーラビリティ

GPT Pilotは、小規模なプロジェクトから大規模なエンタープライズアプリケーションまで対応可能です。AIが生成するコードは、拡張性と保守性を考慮して設計されています。

開発者との連携

GPT Pilotは、開発者が各ステップを確認できるように、インタラクティブなツールを提供しています。これにより、AIが全体のコードベースをより良く理解できます。

他のプロジェクトとの違い

  1. 開発者の関与: GPT Pilotは、AIだけではなく、開発者がプロセス全体で関与することを前提としています。

  2. 自動デバッグ: このプラットフォームは、AIが生成したコードの品質を自動的に評価し、必要な場合は修正します。

  3. コミュニティサポート: GPT Pilotはオープンソースプロジェクトであり、多くの開発者が貢献しています。これにより、多様なニーズに対応できるようになっています。

貢献と開発

このプロジェクトはオープンソースであり、多くの研究課題と開発課題があります。興味があれば、貢献することが可能です。

使用方法

環境設定: Python(3.8以上)とPostgreSQL(9.6以上)が必要です。

PostgreSQL(9.6以上)に関する設定はこのnoteでは触れませんのでご注意ください。

リポジトリのクローン: GitHubからプロジェクトをクローンします。

git clone https://github.com/Pythagora-io/gpt-pilot.git

クローンしたフォルダに移動:

cd gpt-pilot

仮想環境の作成:以下のコマンドで仮想環境を作成します。

python -m venv myenv

続いて:

source pilot-env/bin/activate

Windowsの場合は以下のコマンドを:
.\pilot-env\Scripts\activate
もしくは、
.\myenv\Scripts\activate

念のためpipのバージョンも上げておきましょう。
python.exe -m pip install --upgrade pip

依存関係のインストール: 必要なパッケージをインストールします。

pip install -r requirements.txt

上手くいかない場合は:
pip install -r gpt-pilot/requirements.txt

ディレクトリの移動をします。

cd gpt-pilot/pilot
もしくは
cd pilot

.envファイルの設定: データベース接続情報などを設定します。

mv .env.example .env

上手くいかなかったので私は以下で出来ました。
mv E:\workspace\apps\GPT-Pilot\gpt-pilot\pilot.env.example E:\workspace\apps\GPT-Pilot\gpt-pilot\pilot.env

.envファイルに環境(OpenAI/Azure)、APIキー、およびSQLite/PostgreSQLデータベース情報を追加するには、以下のようにファイルを編集します:

 #OPENAI  or AZURE
ENDPOINT=OPENAI
OPENAI_API_KEY=your_openai_api_key 【変更】
AZURE_API_KEY=your_azure_api_key
AZURE_ENDPOINT=your_azure_endpoint #In  case of Azure endpoint, change this to your deployed model name
MODEL_NAME=gpt-4
MAX_TOKENS=4096 【この数値が8192のままだとエラーが出やすいらしいです。】
DB_NAME=gpt-pilot
DB_HOST=localhost
DB_PORT=5432
DB_USER=admin
DB_PASSWORD=admin 【変更】
DATABASE_TYPE=postgres

適宜テンプレを変更入力しましょう。

データベースの初期化: python manage.py migrateでデータベースを初期化します。

python db_init.py

上手くいかなかったので:
python gpt-pilot/db_init.py

これも上手くいかなかったので:
python E:\workspace\apps\GPT-Pilot\gpt-pilot\pilot\db_init.py

アプリケーションいざ起動!: python manage.py runserverでアプリケーションを起動します。

python main.py

成功すると以下のような感じのものが出てきます。

------------------ STARTING NEW PROJECT ----------------------
If you wish to continue with this project in future run:
python main.py app_id=2dffdgef-24dsfds-dsdf8-af5sd-2fd1bfsdfsdfeb
---------------------------------------------------------------------

表示された方おめでとうございます!

ここからがスタートです!

? What is the project name? 

上記が表示されます。プロジェクト名は、あなたが作成または作業しているプロジェクトを一意に識別するための名前です。これは任意の文字列で、通常はプロジェクトの目的や内容を簡潔に表現します。

例えば、あなたがチャットアプリケーションを開発している場合、プロジェクト名はChatAppやMyChatProjectなどになるかもしれません。また、機械学習モデルを訓練するプロジェクトであれば、MLModelTrainingやImageRecognitionProjectなどの名前が考えられます。

プロジェクト名は、あなたがプロジェクトを管理し、他の人がプロジェクトを理解するのを助けるためのものなので、具体的でわかりやすい名前を選ぶことをお勧めします。

? What is the project name? ChatApp

私は上記のように「ChatApp」にしました。

詳細(details)の入力

アプリケーションの詳細な説明を入力する必要があります。これは、アプリケーションが何をするのか、どのような機能を持つのか、どのようなユーザーが対象なのか、などを含むべきです。

例えば、あなたがチャットアプリケーションを開発している場合、以下のような説明を入力できます:

? Describe your app in as many details as possible. 

以下のように入力しました。
英語で入力した方が精度が高くなるはずですが、デモなので合えて日本語で行きます。実際は改行せず、一行で入力しました。

このアプリケーションは、リアルタイムのチャットアプリケーションです。
ユーザーは個別にまたはグループ内でメッセージを送信できます。
このアプリケーションは、ビジネスチームや友人同士のコミュニケーションを目的としています。

質問攻めにあう

この後アプリから沢山質問が来ますので、チャットで回答していきます。
私は以下のような質問が来ました。
質問はすべて英語なので、分からない方はDeepLなどで翻訳しましょう。
通常は英語で回答した方が精度が高いはずですが、デモなのであえて日本語で回答しました。

? What is the project name?
⇒ChatApp

? Describe your app in as many details as possible.
⇒私のアプリケーションは、リアルタイムのチャットアプリケーションです。ユーザーは個別にまたはグル 
ープ内でメッセージを送信できます。また、ファイルの共有、ビデオ通話、音声通話の機能も提供します。このアプリケーションは、ビジネスチームや友人同士の コミュニケーションを目的としています。

? Is there a requirement for a specific platform or is this application supposed to be multi-platform (iOS, Android, Desktop, Web, etc.)? Web      

? Will the app require any third-party integrations such as Google Drive or Dropbox for the file sharing part of the application? no

? Do the users need to register and log in to use the application or can unregistered users also participate in the chats? はい必要です。未登録ユ  
ーザーはチャットに参加できません。

? Should the messaging be end-to-end encrypted? 
⇒はい。

? Does the application need to support multiple languages, or will it be in Japanese only? 
⇒デフォルトは日本語ですが、英語も選択できるようにして下  さい。
さい。

質問が終了すると

EVERYTHING_CLEAR

これが表示されたら質問攻めは終わりです。ホッ🍵

まとめと確認

A software application, named "ChatApp", is to be created. 
This application serves as a real-time chat application 
where users can send messages individually or within a group. 
It also provides features for file sharing, video calls, and voice calls. 
The application is intended for communication among business teams and friends. 
It will be web-based, with no requirement for third-party integrations, 
such as Google Drive or Dropbox, for the file sharing feature.

和訳:
ChatApp "と名付けられたソフトウェア・アプリケーションを作成する。
このアプリケーションはリアルタイムのチャットアプリケーションとして機能し、
ユーザーは個別またはグループ内でメッセージを送信できる。
また、ファイル共有、ビデオ通話、音声通話の機能も提供する。
このアプリケーションは、ビジネスチームや友人同士のコミュニケーションを目的としている。
ファイル共有機能にはGoogle DriveやDropboxなどのサードパーティとの連携は必要なく、
ウェブベースで動作する。
Users must register and log in to use this application, 
as unregistered users cannot participate in chats. 
The messaging in application is end-to-end encrypted. 
This application will be available in Japanese as a default language and English 
as a selectable language. The application will be strictly monolithic; 
no microservices will be used or suggested in the development process.

和訳:
未登録のユーザーはチャットに参加できないため、このアプリケーションを使用するには
ユーザー登録とログインが必要。アプリケーション内のメッセージはエンドツーエンドで暗号化されます。
このアプリケーションは、デフォルトで日本語、選択可能な言語として英語に対応します。
このアプリケーションは厳密にモノリシックであり、開発プロセスにおいてマイクロサービスは
使用されませんし、提案もされません。

質問攻めはまだ続く・・・

User Stories:
Do you want to add anything else? If not, just press ENTER.
? User will register to be able to use the application. 

和訳:
ユーザーストーリー
他に何か追加しますか?なければENTERを押してください。
? ユーザーはアプリケーションを使えるように登録する。

こんな感じで回答してみました。

PythonとStreamlitで開発してください。

再度以下の確認をされます。

Do you want to add anything else? If not, just press ENTER.
? User will register to be able to use the application. 

和訳:
他に何か追加しますか?なければENTERを押してください。
? ユーザーはアプリケーションを使えるように登録する。

ここでようやくエンターキーを押して完了です!

と思いきや、また質問が🤣!

User Stories:
Do you want to add anything else? If not, just press ENTER.
? User will register to be able to use the application. PythonとStreamlitで開発してください。

Do you want to add anything else? If not, just press ENTER.
? User will log in to access application functionalities. 

Do you want to add anything else? If not, just press ENTER.
? User will be able to create and participate in individual and group chats. 

Do you want to add anything else? If not, just press ENTER.
? User can send real-time messages to other users individually or within a group chat. 

Do you want to add anything else? If not, just press ENTER.
? User can share files within the chats. 

Do you want to add anything else? If not, just press ENTER.
? User can initiate and participate in video calls. 

Do you want to add anything else? If not, just press ENTER.
? User can initiate and participate in voice calls. 

Do you want to add anything else? If not, just press ENTER.
? The application will ensure end-to-end encryption for all the messages sent. 

Do you want to add anything else? If not, just press ENTER.
? The application will default to Japanese language but user can switch the application language to English. 
和訳:
ユーザーストーリー
他に何か追加しますか?なければENTERを押してください。
? ユーザーはアプリケーションを使用できるように登録します。PythonとStreamlitで開発してください。

他に何か追加しますか?なければENTERを押してください。 
? ユーザーはアプリケーションの機能にアクセスするためにログインします。

他に何か追加しますか?なければENTERを押してください。 
? ユーザーは個人チャットおよびグループチャットを作成し、参加することができます。

他に何か追加しますか?なければENTERを押してください。 
? ユーザーは、個人またはグループチャット内で他のユーザーにリアルタイムメッセージを送信できます。

他に何か追加しますか?なければENTERを押してください。 
? ユーザーはチャット内でファイルを共有することができます。

他に何か追加しますか?なければENTERを押してください。 
? ユーザーはビデオ通話を開始し、参加することができます。

他に何か追加しますか? なければENTERを押してください。 
? ユーザーは音声通話を開始し、参加することができます。

他に何か追加しますか? なければENTERを押してください。 
? このアプリケーションは、送信されるすべてのメッセージのエンドツーエンドの暗号化を保証します。

他に何か追加しますか? なければENTERを押してください。 
? アプリケーションはデフォルトで日本語になりますが、ユーザーはアプリケーションの言語を英語に切り替えることができます。

最初だけ答えて、後は全てEnterにしました。

遂に開発開始!

Planning project architecture...

ものすごい速さで以下のファイルが出力されました。
さすがGPT-Pilot様!

Function call: process_technologies
{
"technologies": [
"Node.js",
"MongoDB",
"Mongoose",
"Express.js",
"Socket.io",
"cronjob",
"WebRTC",
"Javascript",
"HTML",
"CSS",
"Bootstrap",
"EJS (Embedded JavaScript Templating)",
"JSON Web Tokens (JWT) for authentication",
"bcrypt for password hashing",
"i18next for internationalization (Japanese and English)"
]
Node.js
MongoDB
Mongoose
Express.js
Socket.io
cronjob
WebRTC
Javascript
HTML
CSS
Bootstrap
EJS (Embedded JavaScript Templating)
JSON Web Tokens (JWT) for authentication
bcrypt for password hashing
i18next for internationalization (Japanese and English)
出力後のIDE(Cursor)

必要な環境を整えます

別窓でSSHを起動します。同じSSHで行うと、やり直になる可能性があるので注意しましょう。
GPT Pilotさんから指示されたとおりにパッケージをインストールしてみます。

npm install mongoose express socket.io cron bcrypt i18next

DONE!

先ほどのSSHに戻ります。
戻ったら、

DONE

と打ちましょう!これで終了です!
待つこと数分。GPT-Pilotさんが開発してくれました。

また質問攻め!しかし・・・

ENTERをおして次に進みます。
エラーが出ては自動的に修正してくれているようです。
基本的にENTERキーで進みます。
あまり考えなくて良いので今回は楽です。
気の遠くなるほどのERRORを解消してくれている!
GPT-Pilotすげぇ~!
仮想環境ゼロからこれほどまで自動的に環境構築&開発をしてくれるとは驚き・・・。

しかし・・・

しかし、開発が佳境に入ったと思われたその時、、、

t: 2714ms : ---------- GPT PILOT EXITING WITH ERROR ----------
Too many tokens in the request. Please try to continue the project 
with some previous development step.

? How did GPT Pilot do? Were you able to create any app that works? 
Please write any feedback you have or just press ENTER to exit:  
和訳:

リクエストのトークンが多すぎます。以前の開発ステップでプロジェクトを続行してください。

? GPT PILOTはどうでしたか?動作するアプリを作成できましたか?
フィードバックがあれば書いてください:  

ちーーーーーーん。。。

開発は突如トークン数が多すぎるとのことで中止になってしまいました。

いやはや残念です。

後は要件定義を少なくして再挑戦してみたいと思います。

あとがき

この要件定義をシンプルにして数回試したのですが、以下のエラーが出てしまいました。.envの「MAX_TOKENS=4096」にしても駄目でした。

Too many tokens in the request. Please try to continue the project with some previous development step.

最後に"Hello world!"だけを表示するHTML1つを作る開発を試しましたが、「data['path'].rsplit('/', 1)」の部分でエラーが発生してしまい完成しませんでした。

GPT Pilotは、AIと人間が協力して効率的なアプリ開発を目指す興味深いプロジェクトですが、まだまだ完全な形には至っていません。しかし、そのコンセプトと可能性は大いに期待できるものがあります。今後の進展を楽しみに待ちます。

レポジトリ

Pythagora-io/gpt-pilot: Dev tool that writes scalable apps from scratch while the developer oversees the implementation (github.com)


この記事が気に入ったらサポートをしてみませんか?