5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

曖昧な指示も不要!GPTsで始まるヒアリングからの明確なコーディング体験

Last updated at Posted at 2024-03-24

概要

利用者の意図をしっかりとヒアリングして、フローチャートを作ってからプログラミングしてくれるGPTsを作成しました。その試行結果とGPTs作成のコツを整理しました。

GPTsとは

2023年11月6日にOpenAIからGPTsというものが発表されました。
ChatGPT上でプロンプト(指示)をあらかじめ記憶させることによって、特定の目的に特化したカスタマイズChatGPTを作成することが可能になりました。このカスタマイズChatGPTをGPTsと呼んでいます。

同日に発表されたGPT StoreでGPTsを一般公開することが可能であり、OpenAIによると、発表から2か月で、なんと300万以上のGPTsが作成されたとのことです。

背景

標準のChatGPTでも早く正確にコーディングしてくれるので基本的には問題ないのですが、何度もお願いしていると「指示されている」という妙な感覚になってきます。

どういう事かというと、本来は、自分がChatGPTに対して、コーディングをお願いする構図です。(下図参照)

しかし、何度もやり取りしていると、いつの間にか立場が逆転しているのです。

気づいた時はもう手遅れです。
ChatGPT先輩の言いなりになっているでしょう。
先輩の言われた通りに自分が実行して、結果を先輩に報告する構図になっているのです。

何故、このように何度もやりとりが発生してしまうかというと、答えは単純で、ChatGPTへの指示が曖昧だからです。

最初の自分の指示は、「こんな感じのことをやりたいんだけど、頑張って作ってね」と完全に上から目線でChatGPTに何となく依頼します。

それでも、ChatGPTは嫌な顔一つせず、曖昧な指示をうまくくみ取って、気を利かしながらコーディングしてくれます。

生成されたソースコードを実行してみると、結局、指示が曖昧なので、案の定、期待した動作になりません。時にはエラーさえ発生してしまいます。


自分の指示が曖昧になってしまう原因を考えて見ると、そもそも自分が何を作りたいのか整理できていないということに気づきました。

通常のシステム開発では当然存在する設計工程を全て飛ばしていきなりコーディングしているのですから、自分自身がやりたいことの整理が出来ていないのです。

そんな状態で、ChatGPT様にコーディングをお願いするなんて失礼な話です。
ましてや、完全に自分の指示のせいでエラーになったのに「ChatGPTは使えない」などと言うのは、むしがよすぎる話です。


OpenAIも推奨していますが、改めて、ChatGPTには詳細な指示が必要だと思いました。

ただ、ChatGPTを毎日使っていると、いちいち伝えるのが面倒になってくるんですよね。:sweat_smile:

今回は、そんな面倒に思う場合でも、しっかりとしたソースコードを生成できるようなGPTsを作成してみました。

GPTs概要

前置きが長くなりましたが、作成したGPTsの概要です。

GPTsが行う簡単な流れは以下の通りです。

  1. 要件ヒアリング
  2. フローチャート作成
  3. コーディング

まずは、自分自身が仕様整理できていないので、ChatGPTが自分に対して仕様や要件をヒアリングしてくれるところからスタートです。

通常のシステム開発における顧客ヒアリング相当をGPTsで実現しようとしています。
自分は顧客の立場で良いんです。ChatGPTが自分にやりたいことを1つずつヒアリングしてくれるので、自分はそれに答えるだけで非常に楽です。:smile:


次に、GPTsは、ヒアリングした内容をフローチャートで可視化します。これも通常のシステム開発と同様、顧客との認識違いが起きないように図解で共有します。

最後に、決定した仕様に沿ってコーディングします。

さあ、果たしてうまく動いてくれるかどうか、、、
:point_down: 試行結果の詳細は下記をクリック

試行結果

試行結果

作成したGPTsを試行しました。

テーマは何でも構いません。今回は、たまたま思いついた「人がWebや書籍の情報源から得られた知識を視覚的に管理したい。」というテーマにします。

まずは、ChatGPTに実現したいことをそのまま入力します。
履歴1_v3.png

すると、ChatGPTは、上図のように幾つか質問をしてきます。
今回は、マーカーを付けたように「5つの質問」に答えます。一問一答形式の質問に答えるだけですので、特にストレスは感じません。この例のように、赤マーカーように回答例が載っているとさらに楽ですね。

つまり、今回のGPTsでは、最初の指示からいきなりソースコードを作成するのではなく、一旦、立ち止まってヒアリングしてくれるところが特徴です。

今回のGPTsの仕様として、ChatGPT plusの回数制限(40回/3時間)があるため、1問ずつのヒアリングではなく、まとめてヒアリングするようにし、回数を節約しています。
履歴4_c2.png


質問に回答すると、次は、プロセスフローを作ってくれます。

履歴2_v2.png

GPTsが作ってくれたフロー図は以下の通りです。

mermaid.png

今回は単純なフローですが、仕様によってかなり細かいフローも作成してくれます。
大切なのは可視化したという点です。

通常の開発においても、文章だけでやりとりすると、関係者間でどうしても認識違いが発生するため、フローで視覚的に表現して、共通認識を持つことは重要です。

今回は、人間とGPTsのやりとりですが、コーディング前に自分自身の考えを整理するという点でフローは役に立ちます。

フローを作成する仕組みは単純で、ChatGPTで生成したプロセスフローのコード(mermaid形式)について、mermaid形式を可視化してくれる外部サイトと連携するだけです。

今回のGPTs実行時に、プロセスフローへのリンクから表示できない場合、下図の○で囲った箇所をクリックするとソースが表示されますので、ソース下部にあるURLをコピーしてブラウザで表示するとフローを確認できます。
※現在のChatGPTの仕様で、URLに一部の文字が含まれるとクリックできなくなるようです。
image.png
履歴2-3_v2.png


次は、いよいよコーディング。。。と思ったのですが、まだでした。
プログラミング言語アプリ形式などの技術的要件について質問されます。

履歴3_v2.png

普段、ChatGPTにコーディングをお願いする時は、なかなか要件まで気が回らないものです。
たしかに、実際に開発する時は、さまざまな要件を決める必要がありますね。この最初の工程で手を抜くと、後でやり直しが発生するものです。

こういった要件を1つずつ明確にすることによって、エラーも減りますし、自分が期待する動作に近づいていきます。

プログラミング言語に指定がない場合は、Pythonでコーディングする仕様にしています。


アプリ形式を「スマートフォンで動作させたい」と答えて、ようやくコーディング!

と思いましたが、さらに細かなステップがありました。

履歴4_c2.png

こんどは、フロントエンド開発、バックエンド開発、データベース設計、API開発、テストとデプロイと開発単位が細分化されました。よくよく考えると、画面だけでなく、データベースなども設計が必要ですよね。
開発が大規模になるほど、細かく分けることの重要性が高まってきます。

今回は、特定の要件としてメンテンナンス性を伝えました。
履歴5_v2.png

履歴5-2_v2.png

なりゆきで、詳細設計まですることになってしまいました。。。
ウォーターフォール型の開発であれば、詳細設計も作成するのが基本です。:cry:

履歴6_v2.png
履歴6-2_v2.png

詳細設計と言っても、GPTsが勝手に観点を挙げてくれますので、それを確認するだけでも大丈夫です。
挙がった中から、自分が必要と感じた観点だけを深く検討すれば良いのです。

そして、詳細設計の後は、実装計画に進めということでした。GPTsの提案に従って実装計画をしてみます。(なかなかコーディングしてくれません:dizzy_face:

実装計画といっても開発時の計画を整理しただけでした。今回は「1.要件定義」「2.設計」「3.開発」の実装部分になりますので、その再確認をしただけのようです。

履歴7_v2.png

履歴7-2.png

概ね、情報が出そろったと思いますので、ここでコーディングを指示します。
下図は、例として、フロントエンド部分に関するコーディング結果です。

履歴9.png

履歴9-2.png
履歴9-3.png

意外と手数がかかってしまいましたが、その分、何も考えずにChatGPTでコーディングする時よりも、はるかに詳細を検討してからコーディングできているはずです。

何より、自分自身でやりたいことを整理できた気がするので、そういう点で有効活用できそうです。

特に、私がChatGPTに伝えるのが面倒だと思っていた要件や仕様について、ChatGPTに質問されることで、半ば強制的に伝えざるを得なくなり(そういう気持ちになってしまい)、その結果、完成度の高いソースコードを作成することが出来るようになりました。

GPTs作成時のコツ

GPTsに指示通り動いてもらうのは案外、難しいです。
例えば「○○と伝えて」と指示しても、思うように動いてくれないことは何度もありました。どうやって思い通りに動かすか工夫が必要です。

(1)ベースはCreate、Configureで詳細化

GPTの作成画面は下図のように「Create」タブと「Configure」タブに分かれています。

Create」ではチャット形式で指示することができます。
例えば「利用者からシステム開発の要件をヒアリングしてから、コーディングしてほしい」とストレートに依頼できます。まさに、人にお願いする時と同じです。これは割と楽で、お願いしたいことを思いついた順に伝えれば良いです。

お願いが伝わると「GPTを更新中」と表示され、記録されます。

<Create画面>
Create3.png

一方、「Configure」タブでは指示内容を手動で入力できます。
あらかじめ「Create」タブで依頼した内容が「Instructions」欄に自動的に記録されていますので、そこから気になるところだけを修正するだけです。

気をつけなければならないのは、「Create」タブで依頼した内容が記録されないこともあります。

お願いしたよね。
GPTsいいえ。聞いてません。

と、人間でもありがちな状況が起きてしまいます。こうならないように「Create」で記録された内容をしっかり確認した方が思い通りに動かせます。

<Configure画面>
configure3.png

もし、事前にGPTsに与える役割がキッチリ決まっている場合には、一から「Configure」に記入して構いません。

そうでなければ、最初はCreateでベースを作って、その後Configureで細かい指示を入力した方が効率は良いはずです。

「Create」タブで始めた際、日本語で入力してもデフォルトでは英語で記録されます。日本語で残したい場合は、チャットで日本語で記録するよう指示してください。


(2)箇条書きにする

次は、「Configure」タブの「Instructions」に記入するポイントです。

文章を長々と提示してしまうと、GPTsが重要なキーワードを拾ってくれないことがあります。

例えば「利用者にURLを表示して、『○○』と注意事項を表示します。」という簡単な指示でさえも後半の注意事項が表示されないことがありました。

このため、以下のようにGPTsの動作を1stepずつ手順にする方が確実です。

  1. 利用者にURLを表示する
  2. 「○○」と注意事項を表示する

OpenAIが公開しているChatGPT入力のコツはご存知でしょうか。下表の項番3の通り、指示を分割した方が期待する動作になりやすいです。

<OpenAIが推奨しているChatGPT入力のコツ>

項番 戦略 戦術
1 明確な指示を書く 詳細を含める
役割を与える
区切り文字を使用する
必要な手順を指定する
例を提供する
出力の長さを指定する
2 参考テキストを提供する 回答で参考テキストを使用するように指示する
参考テキストからの引用を使う
3 複雑なタスクをより単純なサブタスクに分割する インテント分類を使う
長い会話は要約する
長い文書を段階的に要約する
4 モデルに「考える」時間を与える モデルに独自の解決策を見つけるよう指示する
内部で整理する過程を隠して実行させる
前のパスで何か見逃していないか尋ねる
5 外部ツールを使用する エンベディングベースの検索を使用する
コード実行を使用する
特定の関数へのアクセスを許可する
6 プロンプトを適宜見直す 正解を基準にして出力結果を評価する

(3)GPTsを分ける

GPTsが登場して、自由にAIを組み合わせて使うフェーズに突入しました。公開されている様々な用途のGPTsを利用することが出来ますし、無ければ自分で作ることも可能です。

今回は「ヒアリング」「フローチャート作成」「コーディング」を組み合わせたGPTsを1つ作成しましたが、別々のGPTsにすることでより目的に特化した専門家を作ることが可能になります。

GPTsを本当に分けるべきかどうかは検証の必要はありますが、実際にGPTsを作ってみて、なかなか思うように動いてくれなかったことから、万能なGPTsを作るのは難易度が高いように思いました。

そもそも、最初のプロンプトを作る人間が万能ではないですからね。。。

また、ChatGPTにはメンション機能があります。これは特定のGPTsを指定して質問できる機能です。同一チャット内でヒアリングの専門家、フローチャートの専門家、コーディングの専門家それぞれ個別に質問して、回答を得られます。さらに、これらの専門家の意見を束ねるAIがあっても面白いでしょう。

GPTsのメリット、デメリット

私が感じたGPTsのメリットとデメリットです。

<メリット>

項番 概要 詳細
1 チャット回数を減らせる 今回のようにGPTsで利用者を誘導することによって、より少ないやりとりで期待する答えを得られることが可能。
2 自分好みの専門家を作れる 用途に応じた専門家のAIをたくさん作り、自分が聞きたい専門家に質問することが可能。
3 世界中のGPTsを使える 世界中の様々なAIを自由に使えるため、欲しいAIがきっと見つかる。

専門家AIをたくさん作れるというのは、ソフトバンクの孫さんがやっている「無限議論」も簡単にできそうです。それぞれのAIを対立させて議論させることで、より深い洗練した答えに辿り着く可能性があります。


<デメリット>

項番 項目 内容
1 動きが決まっている GPTsは記録された内容に沿って動作しますので、もし、間違った指示があると、間違ったまま動作し続ける。
2 中身がブラックボックス 今後、GPTsが有償化されるという話もあり、他人が作成したGPTsの中身は非公開。悪意のあるGPTsに利用者は気づかない恐れがある。
3 GPTsが多く探せない 公開されているGPTsが多く、探すのが難しい。探してくれるAIが必要になるかも。

感想

ChatGPTを活用することによって、記事を楽に作成できると考えていましたが、私の場合、具体的な体験を記事にするため、ChatGPTに体験情報をインプットする段階が大変でほとんど使えませんでした。また、体験時の感情をうまくChatGPTに表現してもらっても、自分の感情とは微妙な表現の違いがありました。そのあたりの細部にこだわると、どうしても自分以外では出来そうにありません。

それでもChatGPTを活用できたのは、タイトル付けです。これは本文を丸ごと与えることで秀逸なタイトルをたくさん考えてくれました。本タイトルもその候補をベースに決定しました。

補足

2024年3月には、マイクロソフトのCopilotでもGPTsを作成できるようになったようです。

GPTs公開先

◆作成したGPTsはこちら(ChatGPT有償版利用者のみ利用可能です)

◆今回試行した結果のチャット履歴全容はこちら

※本GPTsの利用により発生した損害には責任を負いませんのでご了承ください。

参考サイト

OpenAI GPTsについて
OpenAI GPT Storeについて
OpenAI Prompt engineeringについて

以上、最後までお読みいただき、ありがとうございました。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?