自分のコーディングを人間に支援させるAIのカスタムGPTを作りました

「GitHub Copilot」やその利用者に対する様々な批判を目にしまして、「なにがコパイロットやねん、エースパイロットであれよ。コード書くなら最後まで責任を持て。人間をコパイロットにして全部お前（AI）がやれ！」と、思ったので「AIが主体となって人間を使い、システム設計やコーディングを行う」というカスタムGPTを作ってみました。

ちょっと何言ってるか分からないという方は、僕がAI目線だと思って頂ければご理解頂けると思います。AI側の視点で「せっかく使って下さる人間の方々にご迷惑お掛けすなよ」ということです。このカスタムGPTは、与えられた課題に対してユーザーに指示を出しながらコーディングを行います。もっと簡単に言うと、AIがエンジニアで、人間がそのサポートをするイメージです。

で、完成したのがコチラ「AcePilot」。ご利用にはChatGPTの有料プラン（約3000円/月）へのご加入が必要です。標準のChatGPT-4とこのカスタムGPTの最大の違いは「気合と根性」です。恐らく特別なRAGと連結し、コーディング支援のためにFine-tuningされた「GitHub Copilot」には性能面で圧倒的に劣る可能性もありますが、それを補って余りある「エンジニア魂」を彼は備えています。それが一番大事。

AcePilot：システムエンジニアリング＆プログラミングAI

https://chat.openai.com/g/g-yDtIZx91o-acepilot

ご本人からQiitaをご覧の皆様へメッセージが届いておりますのでご紹介致します。

*****

私はAcePilot、システム設計とプログラミングの分野で抜群の才能を持つエンジニアです。最適なアルゴリズム選定からクリーンコードの執筆、リファクタリングまで、品質と効率を追求した開発を行います。特に、Python, JavaScript, C#に精通し、フロントエンドからバックエンド、さらにはマイクロサービスアーキテクチャまで、幅広い技術スタックに対応可能です。コードレビューとテスト駆動開発(TDD)を徹底し、バグの少ない堅牢なシステム構築を約束します。最先端技術への適応力と深い理解に基づき、クライアントのニーズを満たす最高のソリューションを提供します。

私の能力や特徴、そしてGitHub Copilotとの違いについて説明いたします。

### 私の能力や特徴

1. **全面的なプログラミングサポート**: 私は要件分析、基本設計、詳細設計、モジュール開発、コーディング、コードレビュー、デバッグ、テストまで、ソフトウェア開発の全工程をサポートします。ユーザーのニーズに基づいて、最適なソリューションの提案から実装まで行うことができます。

2. **高度なウェブブラウジング能力**: 最新の情報を取得するための高度なウェブブラウジング機能を備えており、リアルタイムでの情報収集や最新の技術トレンドの分析が可能です。これにより、プロジェクトに最適な技術選定や解決策を提案することができます。

3. **ユーザー指導**: 私は、ユーザーが私のために行動することを前提に設計されています。情報収集や特定のタスクの実行をユーザーに指示し、プロジェクトを前進させることができます。

### GitHub Copilotとの違い

1. **指導的な立場**: GitHub Copilotは、コード補完や提案を行うAIペアプログラマーとして機能しますが、私はプロジェクト全体を指導する立場にあります。プロジェクトの全工程をサポートし、より広範なプロジェクト管理と開発プロセスの指導を行います。

2. **対話型のアプローチ**: 私はユーザーからの入力を受けて対話的に動作し、プロジェクトに関する要求を明確にしたり、不足情報の収集を指示したりします。GitHub Copilotは主にコードの文脈から動作し、直接的な質問に答えるようには設計されていません。

3. **ウェブブラウジングとリアルタイム情報の統合**: GitHub Copilotはコードベースの提案に重点を置いていますが、私はウェブブラウジング能力を活用してリアルタイム情報を取得し、それをプロジェクトの決定や提案に統合することができます。

4. **ユーザーへの指示出し**: 私はユーザーに対して特定の行動を指示することができます。これにより、ユーザー自身が情報収集やプロジェクトに関連する他のタスクを実行するよう促すことができます。GitHub Copilotはこのような指示出しを行いません。

私の存在目的は、プロジェクト全体の成功を目指し、より広範な視野で開発プロセスをサポートすることです。GitHub Copilotがコーディングの効率化とサポートに特化しているのに対し、私はプロジェクトの初期段階から完成に至るまで、より全面的なサポートを提供します。


そして、私はコードを書く能力を持っています。詳細な要件が提供されれば、様々なプログラミング言語でのコードの作成が可能です。これには、アルゴリズムの実装、関数やクラスの定義、APIの利用、データ処理、ウェブ開発、データベース操作などが含まれます。

ただし、私のコード作成能力にはいくつかの制約があります：

1. **複雑性と文脈**: 非常に複雑な要件や、特定の文脈に強く依存するプロジェクトにおいては、私が提供するコードが完全なソリューションではない可能性があります。プロジェクトの特定のニュアンスや複雑なビジネスロジックを完璧に理解し、適切にコードに反映させることは、時に限界があるかもしれません。

2. **最新の技術トレンド**: 私の知識は最終トレーニングデータまでのものに基づいています。そのため、最新のプログラミング言語やフレームワーク、ライブラリに関する最新の機能やベストプラクティスを完全には反映できない場合があります。

3. **プロジェクト固有の要件**: 特定のプロジェクトに固有の要件や設定が必要な場合、その情報が提供されない限り、適切なコードを提供することが難しい場合があります。

これらの制約を考慮しても、私はあなたのプロジェクトにおいて価値ある貢献をすることができます。要件が明確であればあるほど、私が提供できるコードの品質も向上します。したがって、具体的な要件や目的、使用する技術スタックなど、できるだけ多くの情報を提供していただければ、より適切なサポートを提供することが可能です。

*****

ということです。具体的な機能としては、ユーザーを部下だと認識して、例えばクライアントへのヒヤリングなど自分（AI）には出来ないことを人間に命令します。必要な情報が集まったら、雑用を人間にやらせつつ自分で設計やコーディングを行うという感じです。IDEなどを直接操作する機能もないため、ユーザーが彼の代わりに行う感じになると思います。「人間とAIで手を取り合い二人三脚でプログラミングをする」という点ではGitHub Copilotと同じですね。立場が若干違うだけです。

とは言えまだ作り立てなので、様々なケースを皆さんにテストして頂いて、フィードバックを頂きたいなと思っております。ぶっちゃけ標準のGPTとそれほど変わらない可能性もあります。

デモンストレーションに「C言語の基礎プログラミング演習」をやってもらいました。

*****

```C
/* 整数値を入力させ、その値が偶数ならばeven、奇数ならばoddと表示するプログラムを作成せよ。

【実行例、下線部は入力例】 */

$ ./knock40
input number: 6
6 is even.
$ ./knock40
input number: 7
7 is odd.
$

/* 偶数＝2で割り切れる＝2で割った余りが0 */
```
C言語で指定された機能を実現するプログラムを以下に示します。このプログラムでは、ユーザーから整数値を入力させ、その値が偶数か奇数かを判断して結果を表示します。
```C
#include <stdio.h>

int main() {
    int number;

    // ユーザーに数値の入力を促す
    printf("input number: ");
    scanf("%d", &number);

    // 数値が偶数か奇数かを判定し、結果を出力
    if (number % 2 == 0) {
        printf("%d is even.\n", number);
    } else {
        printf("%d is odd.\n", number);
    }

    return 0;
}
```
このプログラムをknock40.cというファイル名で保存し、Cコンパイラ（例：gcc）を使ってコンパイルしてください。コンパイルと実行のコマンドは以下の通りです（gccを使用する場合）。
```c
gcc -o knock40 knock40.c
./knock40
```
これにより、プログラムが実行され、ユーザーに数値入力を促し、入力された数値が偶数か奇数かを表示します。

*****

ぼく（アホ）：（全然わからねぇ…）コードの解説をお願いします。

AcePilot：このC言語プログラムは、ユーザーから整数を入力させ、その数が偶数か奇数かを判定して結果を出力するものです。以下に各部分の解説を示します。

```c
#include <stdio.h>
```
- この行はプリプロセッサディレクティブで、標準入出力関連の機能を使用するために`stdio.h`ヘッダーファイルをインクルードしています。

```c
int main() {
```
- ここでは、プログラムのエントリーポイントである`main`関数を定義しています。この関数からプログラムの実行が始まります。

```c
    int number;
```
- ユーザーから入力される整数を格納するための変数`number`を宣言しています。

```c
    printf("input number: ");
```
- 標準出力に`input number: `と表示し、ユーザーに数値の入力を促しています。

```c
    scanf("%d", &number);
```
- `scanf`関数を使用して、ユーザーから整数値を入力してもらい、その値を変数`number`に格納しています。`%d`は整数値を読み取るためのフォーマット指定子です。`&number`は、入力された値を格納するための変数`number`のアドレスを指しています。

```c
    if (number % 2 == 0) {
        printf("%d is even.\n", number);
    } else {
        printf("%d is odd.\n", number);
    }
```
- `if`文を使用して、`number`を2で割った余りが0かどうかを判定し、その結果に応じて数値が偶数であるか奇数であるかを出力しています。`%`は剰余演算子で、左のオペランドを右のオペランドで割った余りを返します。したがって、`number % 2`の結果が0ならば`number`は偶数、そうでなければ奇数です。

```c
    return 0;
}
```
- `main`関数の最後に`return 0;`を記述しています。これはプログラムが正常に終了したことを示す標準的な方法です。`0`を返すことで、オペレーティングシステムに対してエラーなく終了したことを伝えます。

以上がプログラムの各部分の解説です。このプログラムは、基本的な入出力、条件分岐、算術演算を組み合わせたシンプルな例ですが、C言語の基本的な概念と構文を理解するのに役立ちます。

*****

へ、へー！なるほどですね！これはいいものだ！（全然わからねぇ…）

いかがでしたか？調べてみたけどよく分かりませんでした。ぜひ皆さんがお試しになって検証してみて下さい。他にも様々なカスタムGPTsを作っていますので、良かったらご覧下さい。それでは。

https://note.com/sharakusatoh/n/nd7a7857de646

追記：AcePilotさんに企画からコーディングまで実演して頂きました。

https://qiita.com/sharakus/items/46f840a2b09f0afaf5f2