【ChatGPT】設計フェーズでAIを活用する5つのパターン

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つのプロンプトパターンが使用できると述べられています。

  1. APIジェネレーターパターン
  2. APIシミュレーターパターン
  3. Few-shotコード例生成パターン
  4. ドメイン固有言語(DSL)作成パターン
  5. アーキテクチャの可能性パターン

 

APIジェネレーターパターン

どんな場合に使用するパターンか?

自然言語で記述されたシステムの要件や説明からAPI仕様(REST API仕様など)を生成するパターンです。
このパターンの目的は、
  • 開発者が複数のAPI設計を迅速に試せるようにすること
  • API設計を早期に完了し、設計の手動修正のための出発点を提供すること

プロンプトパターン

  1. システムの説明Xを使用してください
  2. システムのAPI仕様を生成してください
  3. API仕様はフォーマットYであるべきです

実装例

以下のプロンプトは、REST APIの仕様であるOpenAPI仕様を生成する例です。
「リストされた要件を実装するウェブアプリケーションのOpenAPI仕様を生成してください。」

メリットとデメリット

メリット デメリット
  • システムの説明や要件リストから異なるAPIデザインを試せるツールを開発者に提供することは、強力な開発ツールです。APIジェネレーターパターンは、開発者やチームが迅速に複数のAPIデザインを作成し、比較・対照して最終的なデザインを選択することができます。一方、手動でAPIを記述するのは面倒であり、開発者は限られた数のAPIデザインオプションを試す時間しかありません。
  • このパターンの欠点は、開発者がAPI仕様をコードが実装された後に書くことを選択する場合があることです。これは、同じ情報を2回指定すること(API仕様で1回、実際のコードで1回)を避けたいからです。API生成を自動化することで、開発者は設計プロセスの早い段階でAPI仕様を作成することが促されます。ただし、既存の(LLM以外の)ツールは、コードからAPI仕様を生成できますが、それでも最初にコードを生成する必要があります。

 

 

APIシミュレーターパターン

どんな場合に使用できるパターンか?

API仕様からAPIの動作をシミュレートし、開発者がAPIとすぐに対話してテストできるようにするためのパターンです。

プロンプトパターン

  1. 仕様Xを使用してシステムを模倣してください。
  2. フォーマットYでAPIへのリクエストを入力します。
  3. 仕様Xに基づいてフォーマットZで適切な応答を提供してください。

実装例

“このOpenAPI仕様に基づくウェブアプリケーションとして振る舞ってください。HTTPリクエストをプレーンテキストで入力し、OpenAPI仕様に基づいて適切なHTTPレスポンスを返してください。”
この実装例では、HTTP APIのOpenAPI仕様を使用しています。リクエストはLLMに入力され、対応するHTTPレスポンスが返されます。

メリットとデメリット

メリット デメリット
  • APIシミュレーターパターンの利点は、ユーザーが自然言語を使用してインタラクションやシナリオをカスタマイズできることで、コードで同じことを実現しようとするよりも簡単です。また、LLMシミュレーションとの対話や自然言語を使用したカスタマイズの柔軟性が、APIの迅速な探求を容易にします。
  • APIシミュレーターパターンの欠点は明確に示されていませんが、APIシミュレーターパターンの限定された機能やシミュレーションの精度によって、実際のAPIとの違いが生じる可能性があります。また、シミュレーションのセットアップや合成データの生成において制限があるかもしれません。

 

Few-shotコード例生成パターン

どんな場合に使用できるパターンか?

LLMにfew-shot学習を利用したプロンプトとして提供できるコード例を生成させる場合に使用できます。

プロンプトパターン

  1. システムXを提供します。
  2. システムXの使用方法を示すN個の例を作成してください。
  3. できるだけカバレッジが高い例を作成してください。
  4. (オプション)例はシステムXの公開インターフェイスに基づいて作成してください。
  5. (オプション)例はXに焦点を当てて作成してください。

実装例

“コードを提供します。新規ユーザー登録に関連するこのOpenAPI仕様の使用方法を示す10の例を作成してください。”
この実装例では、REST APIの新規ユーザー登録に焦点を当てた使用例を生成しています。これらの例は、API設計に関するリマインダーとして後のプロンプトで使用できます。

メリットとデメリット

メリット デメリット
  • このパターンの利点は、設計サイクルの初期にシステムの予想される使用方法を取り込むのに役立ち、後でLLMに過去の設計決定を説明するために使用可能なプロンプトを提供できることです。APIシミュレーターパターンなどのパターンと組み合わせることで、開発者は迅速にシステムと対話し、インタラクションを記録して追加の生成された例で補完できます。
  • このパターンは、システムの使用例が制約や仮定、期待などの重要な情報を伝える際に、他の形式(例えば自然言語で記述された説明)で表現するよりもトークン効率が高い場合に適用するのが最適です。しかし、例の使用がLLMの問題解決能力を向上させる効果的な方法であることが示されているため、このパターンは情報伝達の最もトークン効率の良いメカニズムでない場合でも有用なツールとなります。

ドメイン固有言語(DSL)作成パターン

どんな場合に使用できるパターンか?

このパターンは、LLMが要件、デプロイメント、セキュリティルール、モジュールなどのシステム概念を説明・操作するためのドメイン固有言語(DSL)を作成できるようにするものです。

 

プロンプトパターン

  1. Xのためのドメイン固有言語を作成してください。
  2. 言語の構文は、次の制約に従ってください。
  3. その言語を説明し、いくつかの例を提供してください。

実装例

“要件を文書化するためのドメイン固有言語を作成してください。言語の構文はYAMLに基づいてください。言語を説明し、いくつかの例を提供してください。”
この実装例では、要件のためのDSLを作成しています。YAMLのような構文であることを制約として加えています。

メリットとデメリット

メリット デメリット
  • DSL作成パターンの結果として、トークン制限に達することなくシステム設計が可能になることが挙げられます。ただし、指定された構文ルールは、生成されるDSLの効率に直接影響するため、慎重に考慮する必要があります。
  • DSLの設計におけるトークン効率は、慣習や暗黙的な構文ルールによって向上することがあります。ただし、この場合、構文に不慣れなユーザーにとってはDSLが解釈しにくくなることがあります。この問題は、Few-shotコード例生成パターンを使って、ユーザーにDSLの適用方法を教える例を作成することで解決できます。これらのパターンを組み合わせることで、後のプロンプトに基づいてDSLの使用方法を自己文書化するのにも役立ちます。

アーキテクチャの可能性パターン

どんな場合に使用できるパターンか?

このパターンは、開発者が労力をあまりかけずに、いくつかの異なるアーキテクチャを検討するために使用されます。開発者は、ファイルの配置、モジュール間の通信、マルチティアシステムの各層など、システムのアーキテクチャの様々な側面をLLMと一緒に探求できます。

プロンプトパターン

  1. Xを用いてYのためのソフトウェアシステムを開発しています。
  2. システムはこれらの制約に従わなければなりません。
  3. このシステムのためのN個の可能なアーキテクチャを説明してください。
  4. Qに関してアーキテクチャを説明してください。

実装例

“FastApiを使用したPythonのWebアプリケーションを開発しており、ユーザーがTwitterのように興味深いChatGPTのプロンプトを投稿できるようにします。このシステムの3つの可能なアーキテクチャを説明してください。各モジュールが含む機能に関してアーキテクチャを説明してください。”

メリットとデメリット

メリット デメリット
  • パフォーマンスに敏感なアプリケーションでは、このパターンを使用して、パフォーマンス目標を達成するための可能なアーキテクチャを提案し、各アーキテクチャをテストするための実験を行うことができます。
  • 特に言及されていませんが、アーキテクチャの可能性パターンの欠点としては、開発者が選択肢を絞り込む際に過剰な情報が提供されることがあるかもしれません。また、適切なアーキテクチャを見つけるためには、多くのアイデアを試す必要があるため、このパターンを適用する際には多くの時間がかかることがあります。

 

 

最新情報をチェックしよう!