Promptyで簡単にLLMのプロンプトを共有・管理しよう！

2024年に「Prompty」という生成AI関連ツールが発表されました。

こちらが生成AIを組み込んだアプリ開発をする際に有用そうでしたので、今回お試しで使用してみた内容となります。

## Promptyとは？
LLMの環境情報や、プロンプトを定義・管理するためのフォーマットのことです。`.prompty`拡張子で作成されます。

https://prompty.ai/

## Promptyの導入～実行まで（VSCode）
早速、Promptyを導入し使ってみます。以下、エディターはVSCode、LLMはAzure OpenAI Serviceを使用した例です。

1. Prompty拡張機能のインストール
   * VSCodeマーケットプレイスから、下記拡張機能をVSCodeにインストール
     * https://marketplace.visualstudio.com/items?itemName=ms-toolsai.prompty

1. VSCodeのエクスプローラーを右クリックし、「New Prompty」を選択

   ![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398865/b45c92ef-fa00-80aa-d27e-31ca053d449d.png)


1. 下記ように`basic.prompty`のテンプレートファイルが新しく作成されています。OpenAIの環境やプロンプトがyamlのような形式で書かれています。

   ![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398865/0c9f111b-3b42-31db-8430-5dd1ca8ae051.png)

1. promptyファイルの内容を編集します。下記の例はAIに新入社員へのOJTをしてもらうようなプロンプトを実行する場合となります。
   ```
   ---
   name: OJT研修プロンプト
   description: 新人研修向けOJT
   authors:
     - 作成者名
   model:
     api: chat
     configuration:
       type: azure_openai
       azure_endpoint: https://<your-aoai-endpoint>.openai.azure.com
       azure_deployment: gpt-4o
       api_version: 2023-12-01-preview
       api_key: <api-key>
     parameters:
       max_tokens: 3000
   sample:
     question: 電話の取り方について教えてください。
   ---
 
   system:
   あなたはシステム開発会社の新入社員を指導するOJTです。
   システム開発に関する技術的な質問やビジネススキルに関する質問に対し、
   新入社員に理解できる内容で回答しなければなりません。
 
   user:
   {{question}}
   ```
 
   * 詳細な内容ついては、以下のように定義します
   * 上段（`---`の間の箇所）には、OpenAIの環境やパラメータを記載します。特に下記の内容が重要です。
     * `model`: OpenAIのモデルに関する環境情報（上記の例のようにファイルに直書きするほか、拡張機能の設定値にも切り出すことができます）
       * `type`: Azure OpenAI Serviceを利用する場合は`azure_openai`
       * `azure_endpoint`: Azure OpenAI Serviceのエンドポイント
       * `azure_deployment`: Azure OpenAI Serviceのデプロイメント名
       * `api_version`: Azure OpenAI ServiceのAPIバージョン
       * `api_key`: APIキー
     * `parameters`: OpenAIのパラメータに関する情報
       * 詳細は[こちら](https://learn.microsoft.com/en-us/azure/ai-services/openai/reference#completions)をご参照ください
     * `sample`: 後述のプロンプト内に埋め込む各種変数
   * 下段ではプロンプトを下記の形式で記載します。上記の例ですと、システムプロンプトとユーザープロンプトが1件ずつ書かれています。
     ```
     <system or user or assistant>:
     プロンプト
     ```
    * プロンプトに埋め込む変数名は`{{変数名}}`で定義します。変数の値は上段の`sample`内で定義できます。

1. 編集が完了したら、promptyファイルでF5キーを押してプロンプトを実行します。しばらくすると、下記の通りAIからの回答が出力されます。

   ![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398865/c05b5852-a0a1-4283-9db4-1c30d7ff7aed.png)

## 使ってみて感じたメリット
### 生成AIをエディタで気軽に利用できる
* 今まではAI Studioなど生成AIをお試しできる環境がいくつかありましたが、Promptyを導入することにより手元のエディタのみで簡単に生成AIを試すことができます。
  * 生成AIの回答結果をその場で確認したいような場合に有用かと思います。

### プロンプトの共有・管理が楽
* 生成AIの環境情報/パラメータ/プロンプトを1ファイルで定義できることがとても楽だと感じました。
  * 本拡張機能さえインストール済みであれば簡単にプロンプトの共有ができるため、例えば複数人で生成AIのプロジェクトに取り組んでいる場合などで有用かと思います。

### アプリのソースコードとプロンプトを切り出せる
* 今まではプロンプトの内容はハードコードもしくは何かしらの手段で切り出す必要がありましたが、Promptyを活用すればアプリのソースコードとプロンプトを切り分けて管理ができます。
  * （今回試してはいませんが）Python向けのライブラリも提供されており、LangChain/Semantic Kernel/Prompt Flowといった主要なLLM関連のフレームワークおよびツールにインポートができるのも嬉しいです。

## まとめ
Promptyを活用することで、プロンプトの共有やアプリ側ソースコードとの切り分けなどができ、特に複数人で生成AIを取り扱うプロジェクトでかなり有用そうな印象です。

また、Promptyは現在プレビューの機能になるため、さらなる機能追加が期待できそうです。

## 参考情報
https://prompty.ai/

https://marketplace.visualstudio.com/items?itemName=ms-toolsai.prompty