目次
ChatGPTをソフトウェア開発(設計)に応用する
2023年3月14日にChatGPT (GTP-4) がリリースされてから、その威力に全世界が注目するようになりました。
まだ多くの人が手さぐりで使い方を模索しているChatGPTですが、アカデミックの世界ではChatGPTの活用方法について既に研究が進んでいます。
このブログでは、論文などのエビデンスに基づいた知識をもとに、ChatGPTの応用方法を解説したいと思います。
今回は以下の論文から、ChatGPTをソフトウェア開発における設計フェーズに応用する方法についてまとめます。
WHITE, Jules, et al. ChatGPT Prompt Patterns for Improving Code Quality, Refactoring, Requirements Elicitation, and Software Design. arXiv preprint arXiv:2303.07839, 2023.
この論文では、ChatGPTを設計フェーズに応用するにあたって、以下5つのプロンプトパターンが使用できると述べられています。
- APIジェネレーターパターン
- APIシミュレーターパターン
- Few-shotコード例生成パターン
- ドメイン固有言語(DSL)作成パターン
- アーキテクチャの可能性パターン
APIジェネレーターパターン
どんな場合に使用するパターンか?
自然言語で記述されたシステムの要件や説明からAPI仕様(REST API仕様など)を生成するパターンです。
このパターンの目的は、
- 開発者が複数のAPI設計を迅速に試せるようにすること
- API設計を早期に完了し、設計の手動修正のための出発点を提供すること
プロンプトパターン
- システムの説明Xを使用してください
- システムのAPI仕様を生成してください
- API仕様はフォーマットYであるべきです
実装例
以下のプロンプトは、REST APIの仕様であるOpenAPI仕様を生成する例です。
「リストされた要件を実装するウェブアプリケーションのOpenAPI仕様を生成してください。」
メリットとデメリット
メリット | デメリット |
|
|
APIシミュレーターパターン
どんな場合に使用できるパターンか?
API仕様からAPIの動作をシミュレートし、開発者がAPIとすぐに対話してテストできるようにするためのパターンです。
プロンプトパターン
- 仕様Xを使用してシステムを模倣してください。
- フォーマットYでAPIへのリクエストを入力します。
- 仕様Xに基づいてフォーマットZで適切な応答を提供してください。
実装例
“このOpenAPI仕様に基づくウェブアプリケーションとして振る舞ってください。HTTPリクエストをプレーンテキストで入力し、OpenAPI仕様に基づいて適切なHTTPレスポンスを返してください。”
この実装例では、HTTP APIのOpenAPI仕様を使用しています。リクエストはLLMに入力され、対応するHTTPレスポンスが返されます。
メリットとデメリット
メリット | デメリット |
|
|
Few-shotコード例生成パターン
どんな場合に使用できるパターンか?
LLMにfew-shot学習を利用したプロンプトとして提供できるコード例を生成させる場合に使用できます。
プロンプトパターン
- システムXを提供します。
- システムXの使用方法を示すN個の例を作成してください。
- できるだけカバレッジが高い例を作成してください。
- (オプション)例はシステムXの公開インターフェイスに基づいて作成してください。
- (オプション)例はXに焦点を当てて作成してください。
実装例
“コードを提供します。新規ユーザー登録に関連するこのOpenAPI仕様の使用方法を示す10の例を作成してください。”
この実装例では、REST APIの新規ユーザー登録に焦点を当てた使用例を生成しています。これらの例は、API設計に関するリマインダーとして後のプロンプトで使用できます。
メリットとデメリット
メリット | デメリット |
|
|
ドメイン固有言語(DSL)作成パターン
どんな場合に使用できるパターンか?
このパターンは、LLMが要件、デプロイメント、セキュリティルール、モジュールなどのシステム概念を説明・操作するためのドメイン固有言語(DSL)を作成できるようにするものです。
プロンプトパターン
- Xのためのドメイン固有言語を作成してください。
- 言語の構文は、次の制約に従ってください。
- その言語を説明し、いくつかの例を提供してください。
実装例
“要件を文書化するためのドメイン固有言語を作成してください。言語の構文はYAMLに基づいてください。言語を説明し、いくつかの例を提供してください。”
この実装例では、要件のためのDSLを作成しています。YAMLのような構文であることを制約として加えています。
メリットとデメリット
メリット | デメリット |
|
|
アーキテクチャの可能性パターン
どんな場合に使用できるパターンか?
このパターンは、開発者が労力をあまりかけずに、いくつかの異なるアーキテクチャを検討するために使用されます。開発者は、ファイルの配置、モジュール間の通信、マルチティアシステムの各層など、システムのアーキテクチャの様々な側面をLLMと一緒に探求できます。
プロンプトパターン
- Xを用いてYのためのソフトウェアシステムを開発しています。
- システムはこれらの制約に従わなければなりません。
- このシステムのためのN個の可能なアーキテクチャを説明してください。
- Qに関してアーキテクチャを説明してください。
実装例
“FastApiを使用したPythonのWebアプリケーションを開発しており、ユーザーがTwitterのように興味深いChatGPTのプロンプトを投稿できるようにします。このシステムの3つの可能なアーキテクチャを説明してください。各モジュールが含む機能に関してアーキテクチャを説明してください。”
メリットとデメリット
メリット | デメリット |
|
|